STM32定时器输入捕获测量高频PWM时,如何用从模式+复位自动清零计数器避免溢出误差

· 行业用户 · 7 浏览

回答(4)

若PWM频率接近定时器时钟上限,可改用外部时钟模式2加从模式复位组合,或换用HRTIM,普通定时器在几十MHz以上时分辨率会明显下降。
STM32玩家阿杰 · 2026-11-13
高频下建议把定时器预分频设为1,用最高计数频率,同时开启输入滤波并缩短采样,否则毛刺会导致复位误触发、周期值跳变。
嵌入式小刘 · 2026-11-13
补充一点:从模式复位只清CNT,不清CCR,所以中断里读CCR1前要确保本次捕获已完成,避免读到上一周期旧值,可用CC1IF标志判断。
硬件老张 · 2026-11-13
核心是把从模式配置为复位模式(SMS=100),触发源选TI1FP1或TI2FP2,让每个PWM上升沿自动把CNT清回0,这样CCR1读到的就是完整周期计数值,从根本上消除计数器累加溢出带来的误差。实操步骤:1)将捕获通道配置为输入捕获,边沿选上升沿,同时把该通道的输入滤波IC1F设到合适档位(高频时适当加大滤波,防止噪声误触发);2)TIMx->SMCR中TS选对应TIxFPx,SMS=100(复位模式),注意从模式复位是硬件自动完成,无需中断参与;3)使能捕获中断,在中断里读CCR1即为周期,频率=定时器时钟/CCR1;4)若还需测占空比,用PWM输入模式:同一TI1FP1触发复位、TI1FP2捕获下降沿,两个CCR分别得周期和高电平时间。关键点:定时器时钟要足够高,保证CCR1不溢出;从模式复位后CCR值始终是单周期计数值,不会因长时间累加而溢出,测量高频PWM时精度和稳定性显著提升。
mcuku 阿沐 · 2026-11-13