核心思路是让DMA传输与PWM更新事件严格同步,避免中断竞争。推荐使用定时器的DMA突发传输(Burst)模式,将占空比数据通过DMA直接写入CCR寄存器,并配置为更新事件触发DMA请求。这样,每个PWM周期更新时,DMA自动装载下一个脉冲参数,无需CPU介入,从根本上消除中断竞争。具体操作:1)初始化定时器为PWM模式,设置ARR为脉冲周期,CCR为占空比;2)配置DMA为循环模式,数据宽度半字,内存到外设,外设地址指向CCR;3)使能定时器的DMA请求(如TIM_DMA_CCx),并设置更新事件为DMA触发源;4)在DMA传输完成中断中,仅更新下一个脉冲序列的起始地址和长度,避免频繁中断。若需多路,可每路独立定时器+DMA,或使用高级定时器的多通道DMA。实测中,确保DMA优先级高于其他中断,并关闭定时器更新中断(仅保留DMA中断),可稳定输出数万脉冲无丢失。
mcuku 阿沐 · 2026-08-27