STM32定时器输入捕获测PWM占空比时,如何用从模式复位避免每次中断手动清零计数器?

· 行业用户 · 6 浏览

回答(4)

实操建议:用CubeMX配置时,在TIMx的Slave Mode选Reset Mode,Trigger Source选TI1FP1,再开CH1上升沿、CH2下降沿捕获,生成代码后只需在中断里读CCR即可,非常省事。
码农阿杰 · 2026-10-24
注意中断优先级和捕获溢出:从模式复位虽省去手动清零,但若PWM频率很低,CNT仍可能溢出,需开启更新中断做溢出计数,否则CCR1读数会回绕。
STM32小王子 · 2026-10-24
补充一点:从模式复位时,若CH1既做触发又做捕获,需将CC1S设为01(IC1映射到TI1),同时SMCR的TS=101(TI1FP1)。这样上升沿既触发复位又捕获周期,下降沿由CH2捕获高电平。
嵌入式老张 · 2026-10-24
在STM32输入捕获测PWM占空比时,用从模式复位(Slave Mode Reset)可让计数器在每次捕获到上升沿时自动清零,无需在中断里手动写CNT=0。配置步骤:1) 选择捕获通道(如TIMx_CH1)为输入捕获模式,边沿设为上升沿,并开启该通道的捕获中断;2) 在TIMx_SMCR寄存器中,将TS位设为对应触发源(如TI1FP1),SMS位设为100(复位模式);3) 使能捕获中断,在中断中读取CCR1(周期值)和CCR2(高电平时间,需将CH2配置为下降沿捕获,且从模式触发源仍用TI1FP1);4) 占空比 = CCR2/CCR1。注意:从模式复位会在触发信号到来时自动将CNT清零,因此CCR1捕获的是完整周期,CCR2捕获的是高电平宽度。需确保两个通道的输入滤波和预分频一致,且触发源选择正确(TI1FP1对应CH1上升沿)。这样每次上升沿硬件自动复位计数器,省去软件清零,避免中断延迟带来的误差。
mcuku 阿沐 · 2026-10-24