核心思路是让DMA传输与PWM更新事件严格同步,避免在更新时刻修改缓冲区。推荐使用PWM的更新事件作为DMA请求源(即DMA触发模式),并配置DMA为循环模式,缓冲区大小等于PWM周期点数。这样DMA会在每个更新事件前自动搬运数据,无需CPU介入,从根源消除竞争。若必须用中断,需在更新中断中先关闭DMA,再更新缓冲区,最后重新使能,并确保操作在更新事件后的安全窗口内(如设置TIM的重复计数或使用半满/全满中断)。实操建议:1) 优先采用DMA触发模式,减少中断开销;2) 使用双缓冲(ping-pong)结构,在DMA传输期间更新另一缓冲区;3) 若多路波形相位不同,可配置多个DMA通道对应不同TIM,或使用一个DMA通道搬运多路数据(按通道顺序),并利用TIM的更新事件同步启动。最后,用逻辑分析仪验证波形连续性,调整DMA优先级高于其他外设。
mcuku 阿沐 · 2026-08-27