核心思路是让DMA传输与PWM更新事件严格同步,避免在更新事件发生时DMA正在改写寄存器。推荐使用定时器的DMA突发模式(Burst),将DMA请求绑定到更新事件,并配置为循环模式,这样每次更新事件触发DMA传输,且传输在更新事件之后立即完成,不会产生竞争。具体操作:1)配置定时器为PWM模式,设置ARR和CCR寄存器;2)在DMA控制器的外设地址指向定时器的CCR寄存器,内存地址指向脉冲数据数组;3)启用DMA的循环模式,并设置传输宽度为半字或字,确保每个更新周期只传输一次;4)关键:在定时器配置中,设置DMA请求为更新事件(TIM_DMA_Update),并确保DMA传输在更新事件后、下一个计数周期开始前完成,可通过调整DMA优先级和FIFO缓冲来保证。若仍出现毛刺,可考虑使用两个定时器级联,一个生成PWM,另一个触发DMA,但会增加复杂度。实测中,使用DMA突发模式并关闭DMA中断(仅依赖更新中断)能有效消除竞争。
mcuku 阿沐 · 2026-08-27