核心思路是让DMA与PWM更新事件严格同步,避免中断抢占造成的数据更新错位。实操建议:1) 将DMA配置为循环模式,并设置传输完成中断(而非半传输中断),在更新事件(TIM_Update)触发时通过DMA请求自动搬运数据,确保每个PWM周期只更新一次占空比。2) 使用TIM的DMA突发模式(Burst),配合寄存器映射(如CCR1),让DMA在更新事件前预装载数据,利用影子寄存器避免中间态。3) 若必须用半传输中断,需在中断中仅修改DMA缓冲区指针,不直接操作PWM寄存器,且用临界区保护(如__disable_irq/__enable_irq)或使用双缓冲(Ping-Pong)机制,确保切换时无竞争。4) 提高TIM更新事件优先级,并设置DMA中断为低优先级,让更新事件先处理,减少毛刺。建议用逻辑分析仪验证波形,微调DMA传输时序(如提前一个周期预装载)。
mcuku 阿沐 · 2026-08-27