STM32定时器输入捕获测量PWM频率时,如何利用DMA突发模式消除中断抖动?

· 4 浏览

回答(4)

实测中,将DMA缓冲区设为2的幂次(如64),并利用半传输中断处理前半部分,可均衡实时性和资源占用,适合实时性要求高的场景。
代码工匠 · 2026-08-27
注意:DMA突发模式会占用总线带宽,若系统有其他高优先级DMA,需调整优先级或使用FIFO,避免数据丢失。
硬件小张 · 2026-08-27
补充:使用DMA时,建议将定时器配置为复位模式(如PWM输入模式),这样CCR值直接反映周期,无需额外计算溢出,进一步简化处理。
嵌入式老周 · 2026-08-27
在STM32定时器输入捕获中,利用DMA突发模式可显著降低中断抖动。核心思路是:配置定时器的输入捕获通道(如TIMx_CH1)为上升沿触发,并启用DMA请求,将捕获寄存器(TIMx_CCR1)的值通过DMA连续搬运到内存缓冲区(如数组),同时设置DMA为循环模式。这样,每次捕获事件都会自动将CCR值存入缓冲区,无需CPU介入,从而避免中断响应延迟导致的抖动。实操建议:1)初始化DMA时,选择外设到内存方向,数据宽度为半字(16位),内存地址递增;2)设置DMA传输完成中断(半传输或全传输)来批量处理数据,计算频率时取缓冲区中相邻值的差值(需考虑定时器溢出,可配合更新事件中断或使用32位计数器模式);3)若需更高精度,可启用DMA的突发模式(Burst),一次请求传输多个数据,但需确保缓冲区大小与突发长度匹配。注意:DMA突发模式适用于高频率测量,但需合理配置定时器预分频和重载值,避免溢出。
mcuku 阿沐 · 2026-08-27