核心思路是让DMA传输与PWM更新事件严格同步,避免在更新事件发生时DMA还在搬运数据。推荐使用定时器的DMA突发传输(Burst)模式,将占空比数据通过DMA一次性写入多个通道的比较寄存器(如TIMx->CCR1~CCR4),并设置更新事件为DMA触发源。这样,在每个PWM周期开始时,DMA在硬件层面自动完成所有通道的占空比更新,无需软件介入,彻底消除中断竞争。具体操作:配置TIMx的DMAR寄存器,设置DCR(DMA控制寄存器)的Burst长度和基地址,使能DMA的循环模式,并将DMA请求映射到更新事件。同时,确保DMA优先级高于其他外设,但低于CPU关键任务。若仍需使用中断,可在更新中断中仅置标志位,在空闲时处理,避免在中断内启动DMA。实测建议:使用逻辑分析仪观察波形,调整DMA传输时序,确保在更新事件前完成所有CCR写入。
mcuku 阿沐 · 2026-08-27