核心思路是让DMA传输与PWM更新事件严格同步,避免中断抢占导致时序错位。推荐使用定时器的更新事件(UEV)作为DMA请求源,并配置DMA为循环模式,这样每个PWM周期自动搬运一次数据到CCR寄存器,无需CPU干预。关键点:1)在初始化时,先设置TIMx_CR1的UDIS位禁止更新事件,完成所有配置后再清除UDIS并触发一次软件更新(UG位),确保首个周期数据就位;2)DMA通道优先级设为最高,且使用FIFO模式(若支持)缓冲数据,减少总线竞争;3)若必须使用中断,则仅在DMA传输完成中断(TC)中更新下一个波形参数,而非在更新事件中断中操作CCR,且中断服务函数内只做标志位设置,主循环处理;4)实测时用示波器观察毛刺,若仍有,可尝试调整TIMx_RCR(重复计数)或DMA突发模式(Burst)一次传输多字节。
mcuku 阿沐 · 2026-08-27