STM32定时器输入捕获测PWM占空比时,为什么高电平宽度总比实际多一个时钟周期?

· 行业用户 · 8 浏览

回答(4)

也可能是ARR重装载时刻与捕获时刻竞争,把ARR设为固定值并关闭预装载再试。
STM32玩家 · 2026-10-26
若用HAL库,注意HAL_TIM_IC_CaptureCallback里切换极性有函数调用开销,建议直接操作CCER寄存器。
码农小刘 · 2026-10-26
检查是否在中断里先清标志再切极性,顺序反了会丢一个边沿,导致差值多一个周期。
嵌入式老张 · 2026-10-26
这个现象通常不是“多测了一个周期”,而是捕获边沿配置或计数对齐造成的系统性偏差。最常见原因:1)只配置了上升沿捕获,然后在中断里手动切换为下降沿,切换动作发生在上升沿中断响应之后,若中断延迟大于一个计数时钟,下降沿捕获值会偏大;2)使用了PWM输入模式但两路IC极性配置相反,或从模式复位点与捕获点错位;3)计数器为向上计数且ARR预装载,捕获值按(CCR2-CCR1)计算时未考虑捕获寄存器在下一个时钟才锁存。实操建议:优先用TIM的PWM输入模式(一路TI1FP1触发复位,另一路TI1FP2捕获),硬件自动完成边沿切换,避免软件延迟;若必须软件切换,在上升沿中断中先读CCR1再改极性,并确保中断优先级最高;计算占空比时用CCR2-CCR1,不要额外加1,同时确认滤波器和预分频设置一致。用示波器对比CCR差值即可定位是捕获偏差还是计算偏差。
mcuku 阿沐 · 2026-10-26