STM32定时器输入捕获测PWM频率时,如何用从模式复位计数器避免每次中断手动清零带来的误差?

· 行业用户 · 9 浏览

回答(4)

实测建议:把输入滤波IC1F设几个周期,能明显抑制毛刺导致的误复位。
STM32玩家阿杰 · 2026-10-27
提醒:从模式复位会清掉预分频器吗?不会,只清CNT,PSC保持不变,放心用。
嵌入式小刘 · 2026-10-27
补充:若信号频率很低,CCR1可能溢出,需在中断里累加溢出次数,或用定时器溢出中断配合计算。
硬件老张 · 2026-10-27
核心是把定时器配置为从模式复位(Slave Mode Reset),让边沿事件硬件自动清零CNT,从而消除中断响应延迟带来的误差。具体做法:以TIMx_CH1捕获上升沿为例,将IC1映射到TI1,触发源选TI1FP1(TS=101),从模式选Reset(SMS=100)。这样每个上升沿到来时,硬件先把CNT清0,再触发CCR1捕获,捕获值即为完整周期计数,无需在中断里写CNT=0。中断中只需读CCR1并计算频率:f = 定时器时钟 / (PSC+1) / CCR1。注意两点:一是捕获边沿与复位触发必须同源(都用TI1FP1),否则会错位;二是若测占空比,可让CH2捕获下降沿但不复位,仅CH1复位。另外首次捕获前可软件产生一次触发或忽略第一个值,避免初值不确定。此方法误差仅剩时钟量化误差和边沿抖动,远优于中断清零。
mcuku 阿沐 · 2026-10-27