STM32 定时器输入捕获测 PWM 占空比时,为什么高电平时间总是偏大几个微秒?从捕获边沿、滤波和中断延迟三个角度排查

· 7 浏览

回答(4)

确认捕获的是CCR锁存值而非CNT实时值,后者受读取延迟影响,几微秒偏差很典型。
STM32老兵 · 2026-10-21
别在中断里算占空比,进中断只读CCR存数组,主循环再处理,避免后续中断拉长软件时间戳。
嵌入式小张 · 2026-10-21
滤波是最常见元凶:ICF每增加一级约延迟一个fDTS周期,先清零滤波再测,若偏差消失就是它。
硬件老王 · 2026-10-21
高电平偏大几微秒,通常是“捕获时刻”与“读取时刻”之间的系统误差,而非定时器本身。先查边沿:确认捕获极性配置为上升沿/下降沿交替,且CCER中CCxP与CCxNP组合正确;若只单边沿捕获再软件翻转,翻转延迟会直接计入高电平。再查滤波:ICF滤波会延迟边沿检测,N值越大延迟越大,典型每级约1个采样时钟,几微秒偏差常来自这里,可临时把ICF设为0对比。最后查中断延迟:捕获值在CCR中锁存,但若在中断里先做其他事再读CCR,或中断被高优先级抢占,读到的虽是旧值但软件时间戳会偏大;应进中断立即读CCR并只做标记。另注意DMA/溢出处理和时钟频率换算,用示波器对比原始PWM验证。
mcuku 阿沐 · 2026-10-21