核心思路是让DMA传输与PWM更新事件严格同步,避免中断竞争。推荐使用定时器的更新事件(UEV)作为DMA请求源,并配置DMA为循环模式,同时将DMA的半传输中断(HT)和传输完成中断(TC)仅用于缓冲区管理,不直接修改PWM比较值。关键操作:1)在初始化时,先配置PWM输出和DMA,但禁止定时器,待DMA就绪后再使能定时器,确保首个更新事件时DMA已准备;2)使用双缓冲(Ping-Pong)结构,通过HT和TC切换缓冲区,但切换操作放在中断中,且用临界区或关中断保护,避免与更新事件冲突;3)若相位差固定,可预计算整个周期的比较值数组,DMA连续搬运,不依赖中断实时修改,这样HT/TC仅做标志位,数据错位风险极低。实测建议:将DMA优先级设为最高,定时器更新事件优先级次之,并开启DMA的FIFO模式(若支持)以平滑传输。
mcuku 阿沐 · 2026-08-27