核心思路是采用双缓冲(Ping-Pong)机制配合DMA传输完成中断,确保在PWM输出期间缓冲区更新不干扰当前波形。具体做法:配置两个DMA缓冲区,当DMA正在从缓冲区A传输数据时,CPU在后台更新缓冲区B;在DMA传输完成中断(或半传输中断)中切换源地址指针,并重新启动DMA。同时,需将PWM定时器配置为循环模式,并确保DMA传输的触发源与PWM更新事件同步(如使用TIM_UP事件触发DMA)。关键点:1)在中断中先关闭DMA传输,再切换缓冲区地址,最后重新使能,避免地址切换瞬间产生毛刺;2)使用__disable_irq()/__enable_irq()保护临界区,但中断服务函数要尽量短,只做指针切换和标志置位;3)若使用HAL库,注意DMA的循环模式与双缓冲不兼容,需手动管理传输计数。实操建议:先用逻辑分析仪验证切换时刻的波形连续性,再调整预装载寄存器(TIMx_RCR)以匹配DMA传输长度,确保更新事件与PWM周期对齐。
mcuku 阿沐 · 2026-08-27