STM32定时器输入捕获测频率时,如何用从模式复位计数器实现等精度测量并规避溢出误差

· 行业用户 · 20 浏览

回答(5)

学习一下,谢谢了
热心网友 · 2026-10-24
中断里务必先读CCR1再清CC1IF,且用__disable_irq保护读-清序列,否则高频信号下可能读到被覆盖的新值。
STM32玩家阿杰 · 2026-10-23
推荐直接用PWM输入模式(两通道交叉映射),一个沿复位计数、另一个沿锁存,硬件自动得到周期和占空比,比软件读CCR更稳。
嵌入式小陈 · 2026-10-23
若被测频率很低,复位模式会因CNT在两次捕获间溢出而丢数,此时应增大PSC使单周期计数不超65535,或改用溢出中断累加方案。
硬件老张 · 2026-10-23
核心思路:用从模式复位(Reset Mode)让计数器在每次捕获事件时自动清零,使CNT始终只记录相邻两个捕获沿之间的计数值,从根本上避免自由运行计数器的溢出误差。配置步骤:1) 捕获通道(如TIMx_CH1)设为输入捕获,边沿选择与待测信号一致,开启CC1IE;2) 从模式控制寄存器SMCR中SMS=100(复位模式),TS选择触发源(如TI1FP1);3) 这样每次捕获沿到来时硬件自动将CNT清零,同时CCR1锁存上一周期的计数值。中断中读取CCR1即为一个信号周期内的计数N,频率f=fCK/(PSC+1)/N。为提升等精度,可用两个通道:CH1捕获上升沿并触发复位,CH2捕获下降沿测高电平时间,或改用PWM输入模式同时获得周期和占空比。注意:复位模式会丢失溢出信息,若信号频率极低(周期超过计数器满量程),应降低预分频或改用溢出中断累加计数;捕获中断中先读CCR再清标志,防止竞争。
mcuku 阿沐 · 2026-10-23

🧰 配套工具

⏱️ 定时器计算器