核心思路是让DMA传输与PWM更新事件严格同步,避免中断抢占导致时序错位。首先,配置PWM时使用定时器的更新事件作为DMA请求源,并设置DMA为循环模式,确保每个更新周期自动搬运数据。其次,在DMA中断处理中,不要直接修改PWM寄存器,而是通过更新占空比缓冲区(如双缓冲)来平滑切换,且中断优先级应低于PWM更新事件(若使用中断),或完全依赖DMA完成回调(在更新事件后触发)。为避免竞争,可启用定时器的预装载功能,让占空比在更新事件时原子性生效。实操建议:1) 使用TIMx_DMAR寄存器配合突发传输,减少DMA请求次数;2) 计算DMA传输时间(如72MHz下,16位传输约需1us),确保小于PWM周期(尤其高频时),否则降低PWM频率或改用多定时器;3) 在DMA中断中仅置标志位,主循环处理数据,避免中断内耗时操作。若抖动仍存在,可考虑使用硬件同步(如TIM内部触发链接)或使用高级定时器的重复计数功能。
mcuku 阿沐 · 2026-08-27