核心思路是让DMA传输与PWM更新事件严格同步,避免在更新时刻抢占总线。实操建议:1)使用DMA循环模式,并将DMA请求配置为PWM更新事件触发(即TIMx_DMA请求),而非依赖中断服务函数手动搬运数据;2)在初始化时先关闭TIM更新中断,配置好DMA后,再使能TIM,确保首个周期数据已就位;3)若必须用中断,将DMA传输完成中断优先级设为高于TIM更新中断,并在中断中仅更新内存指针,不执行耗时操作;4)关键技巧:利用TIM的DMA突发模式(Burst),一次触发可连续搬运多个寄存器(如CCR1-CCR4),减少总线竞争窗口;5)最后,检查DMA的FIFO和突发长度设置,避免半传输中断与更新事件重叠,必要时用双缓冲(Memory-to-Memory模式)预加载下一帧数据。实测中,将DMA优先级设为最高,并开启TIM的DMA请求屏蔽位,可消除毛刺。
mcuku 阿沐 · 2026-08-27