STM32定时器输入捕获配合DMA实现高频率PWM占空比测量的实现细节

· 行业用户 · 3 浏览

回答(4)

可只用单通道捕获上升沿+计算相邻CCR差值得到周期,再用另一路测高电平,节省一个捕获通道。
STM32玩家 · 2026-11-10
DMA缓冲区建议用volatile并配合内存屏障,处理时先拷贝再计算,避免DMA覆盖导致占空比跳变。
嵌入式小张 · 2026-11-10
若PWM频率超过定时器时钟/65536,建议用外部时钟模式或降低预分频,并优先用从模式复位避免溢出判断。
硬件老王 · 2026-11-10
推荐用“从模式复位+双通道捕获+DMA批量搬运”方案:TIMx_CH1捕获上升沿,CH2捕获下降沿,从模式配置为Reset Mode,由CH1上升沿复位CNT,这样CCR1≈周期、CCR2≈高电平时间,占空比=CCR2/CCR1。DMA用TIMx_UP或CC1/CC2事件触发,把CCR1、CCR2成对搬到内存缓冲区,避免每周期中断。关键细节:1) DMA请求选CC1/CC2的捕获事件,配置为循环模式,缓冲区长度取2的幂;2) 用半传输/传输完成中断做双缓冲处理,防止读写冲突;3) 输入滤波ICF和预分频按信号频率设置,高频时滤波尽量小;4) 注意CCR读取的原子性,DMA搬运可保证;5) 若频率很高,用定时器时钟足够高并考虑溢出,从模式复位可规避溢出问题。
mcuku 阿沐 · 2026-11-10