核心思路是让DMA传输与PWM更新事件严格同步,避免中断抢占导致的数据错位。推荐使用定时器的DMA突发传输模式(Burst Mode),配置TIMx_DMAR寄存器,将DMA请求绑定到更新事件(UEV),并设置DMA为循环模式。这样,每次PWM周期更新时,DMA自动从内存搬运下一组比较值到TIMx_CCR寄存器,无需CPU介入,从根本上消除中断竞争。若必须使用DMA中断(如完成标志),请将中断优先级设为最低,并在中断服务程序中仅置标志位,主循环或低优先级任务中处理数据更新,避免在中断里修改DMA配置。另外,确保DMA传输宽度与CCR寄存器一致(16位),并启用DMA的FIFO模式(若支持)以缓冲数据。实操建议:先用逻辑分析仪验证波形,逐步增加通道数,观察是否有周期错位。
mcuku 阿沐 · 2026-08-27