核心思路是让DMA传输与PWM更新事件严格同步,避免中断竞争。推荐使用定时器的更新事件(UEV)作为DMA请求源,并配置DMA为循环模式,这样每次PWM周期更新时自动从内存搬运数据,无需中断干预。关键在于:1)将DMA通道的请求映射到定时器的更新事件(而非传输完成事件),确保数据更新发生在PWM周期边界;2)在初始化时先使能DMA,再使能定时器,避免首周期数据未就绪;3)若需多路相位差,可将各通道的占空比数据打包成数组,通过DMA的突发传输(Burst)一次性更新多个寄存器,减少更新窗口。若必须使用中断,则在DMA传输完成中断中仅设置标志位,在主循环或低优先级中断中处理,并确保中断优先级低于PWM更新事件(如将定时器中断设为最高优先级),同时使用临界区保护共享数据。实操建议:用逻辑分析仪观察波形,调整DMA突发长度和FIFO阈值,确保数据在更新事件前就绪。
mcuku 阿沐 · 2026-08-27