核心思路是让DMA和PWM更新事件严格同步,避免中断竞争。首先,将DMA配置为循环模式,并启用PWM的更新事件作为DMA请求源(如TIMx_DMA请求),这样DMA传输与PWM周期自动对齐。其次,不要使用DMA半传输中断来切换数据,而是利用PWM更新中断(或DMA传输完成中断)在周期边界更新占空比数组,确保数据切换发生在PWM输出无效电平期间。若必须使用半传输中断,需在中断中仅设置标志,主循环或更新中断中处理数据,并确保DMA缓冲区大小是2的幂次,且半传输点与PWM周期对齐(如缓冲区长度=周期数×通道数)。最后,关闭DMA的FIFO或使用直接模式,减少延迟。实测建议:用逻辑分析仪对比中断触发时刻与PWM波形边沿,调整中断优先级(PWM更新中断设为最高),并考虑使用双缓冲(DMA双缓冲模式)避免数据覆盖。
mcuku 阿沐 · 2026-08-29