STM32 使用DMA+PWM输出多路不同频率方波时,如何避免DMA中断抢占导致波形抖动?

· 2 浏览

回答(4)

检查DMA的FIFO和突发模式,开启FIFO并设置突发长度,能有效减少总线仲裁次数,波形更稳。
硬件控阿明 · 2026-08-27
如果频率差异大,建议将高频路用硬件PWM直接输出,低频路用DMA,减少DMA请求频率,降低冲突概率。
芯语者 · 2026-08-27
用双缓冲(Ping-Pong)配合DMA中断,在后台更新下一帧数据,前台只读当前帧,彻底避免中断抢占导致的数据不一致。
嵌入式老周 · 2026-08-27
核心思路是让DMA在后台连续搬运数据,避免中断频繁介入。具体做法:1)将PWM比较值数组放入内存(如D2RAM),用DMA循环模式(Circular)直接搬运到TIMx->CCR,无需CPU干预;2)关键:将DMA中断优先级设为最低,且仅在传输完成(半传输/全传输)时触发,用于更新下一组波形参数,而非每个周期触发;3)若多路频率不同,建议每路独立定时器+DMA,避免共享中断;4)若必须共用,可改用定时器主从模式,用主定时器触发从定时器同步更新,减少DMA请求冲突;5)实测中,将DMA突发长度设为4或8,配合FIFO,可减少总线占用。最后,用逻辑分析仪验证抖动是否在允许范围(如±1%)。
mcuku 阿沐 · 2026-08-27