STM32定时器输入捕获测PWM频率时,为什么占空比接近0%或100%会丢数?从捕获边沿和中断延迟分析

· 行业用户 · 23 浏览

回答(4)

占空比0%/100%时边沿间隔太近,建议降低PWM频率或提高定时器计数时钟,保证脉宽大于几个计数周期,同时用输入滤波消抖。
STM32玩家阿杰 · 2026-11-11
中断延迟是硬伤,窄脉冲宽度小于ISR响应时间就必丢。可以开捕获DMA,让硬件自动搬数,CPU不参与就不会丢。
码农小刘 · 2026-11-11
本质是CCR寄存器只有一份,双沿捕获时窄脉冲的第二个边沿会覆盖第一个值,中断来不及读。建议用PWM输入模式,硬件自动分离周期和占空比。
嵌入式老张 · 2026-11-11
STM32输入捕获测PWM时,占空比接近0%或100%丢数的核心原因在于捕获边沿与中断响应的时序竞争。以测量周期为例,通常配置为上升沿捕获,每次上升沿触发CCR读取并计算周期。当占空比接近0%时,高电平脉宽极窄(可能仅几十ns),若同时开启双沿捕获测占空比,下降沿紧随上升沿到来。此时第一次中断尚未响应,CCR已被第二次捕获覆盖,导致丢失一个边沿或读到错误值。当占空比接近100%时,低电平脉宽极窄,下降沿与下一个上升沿间隔极短,同样造成CCR覆盖或中断排队溢出。此外,中断延迟(包括NVIC响应、入栈、ISR执行)通常为数百ns到数us,若脉宽小于中断处理时间,边沿事件会丢失。实操建议:1)测频率时只用单沿捕获,避免双沿竞争;2)提高定时器时钟或使用预分频为1,提升捕获分辨率;3)用DMA搬运CCR值,减少中断延迟影响;4)对极窄脉冲可改用从模式复位或PWM输入模式,硬件自动处理双沿。
mcuku 阿沐 · 2026-11-11