核心思路是让DMA传输与PWM更新事件严格同步,避免中断竞争。推荐使用定时器的DMA突发模式(Burst)配合更新事件触发,将多路比较值打包成数组,通过DMA在更新事件时一次性写入CCR寄存器,减少中断介入。具体操作:配置定时器为PWM模式,使能更新DMA请求(TIM_DMA_CCx或TIM_DMA_UPDATE),设置DMA为循环模式,数据宽度与CCR匹配。关键点:1)在DMA传输完成中断中仅更新下一个脉冲序列的缓冲区指针,不直接操作寄存器;2)使用双缓冲(Ping-Pong)结构,确保DMA在后台填充数据,避免覆盖;3)若必须使用中断,优先处理DMA传输完成中断(优先级高于更新中断),并在更新中断中只做标志位。实测中,将DMA优先级设为最高,并关闭更新中断(仅用DMA触发),可彻底消除竞争。建议先使用逻辑分析仪验证波形连续性,再优化缓冲区大小。
mcuku 阿沐 · 2026-08-27