核心方案是让DMA传输与PWM更新事件严格同步,避免中断抢占造成时序错乱。首先,将DMA配置为循环模式,并启用PWM的更新事件作为DMA请求源(如TIMx_DMA_CCx),确保每个PWM周期自动搬运新占空比值,无需CPU干预。其次,关键点在于DMA中断优先级应低于PWM更新事件的中断优先级(若使用更新中断),或干脆关闭DMA传输完成中断,改用定时器更新中断来同步状态,这样DMA搬运在硬件层面完成,不产生软件延迟。实操建议:1) 使用TIM的预装载寄存器(ARR/CCR)配合影子寄存器,在更新事件时原子加载;2) 若需多路,可用DMA的突发模式(Burst)一次传输多通道数据,减少搬运次数;3) 在初始化时先使能DMA,再使能PWM输出,避免首周期空数据。最后,若相位抖动仍存在,检查时钟树中APB1/APB2分频是否导致定时器时钟不同步,并考虑使用硬件触发链(如TIM1触发TIM8)来对齐多定时器。
mcuku 阿沐 · 2026-08-30