核心思路是让DMA传输与PWM更新事件严格同步,避免中断抢占导致时序错乱。首先,将DMA配置为循环模式,并设置传输完成中断(TC)而非半传输中断(HT),确保在PWM更新事件(UEV)发生时DMA已准备好下一组数据。其次,利用定时器的DMA突发请求(BURST)功能,将多个比较寄存器(如CCR1-CCR4)一次性更新,减少DMA中断频率。关键点:在DMA中断服务函数中只做标志位设置,不进行任何PWM操作,实际更新由硬件在下一个UEV自动完成。若仍需软件干预,可关闭DMA中断,改用定时器更新中断(UI)来触发DMA传输,但需确保DMA优先级高于定时器中断。实测建议:将DMA优先级设为最高,定时器更新中断设为次高,并开启DMA的FIFO模式缓冲数据,可有效消除毛刺。最后,用示波器验证波形边沿抖动,微调DMA突发长度(如4次)和预装载值。
mcuku 阿沐 · 2026-08-27