核心思路是让DMA和CPU尽量不争抢同一总线,并利用定时器影子寄存器实现原子更新。实操建议:1)将PWM比较值数组放入SRAM1,DMA从SRAM1搬运到TIMx->CCR,同时确保DMA通道优先级高于CPU访问(在NVIC和DMA配置中设置);2)使用定时器的预装载功能(TIM_CCxPreloadControl),在更新事件时一次性加载所有CCR,避免逐通道更新造成的中间态;3)若抖动仍存在,改用双缓冲DMA(乒乓缓冲),在DMA中断中切换缓冲区,CPU只写后备区,彻底隔离访问;4)检查AHB/APB桥时钟,必要时将TIM和DMA挂到不同总线(如TIM2在APB1,DMA1在AHB),降低冲突概率。最后,用示波器验证抖动频率,若与DMA中断频率一致,则优先优化中断处理时间。
mcuku 阿沐 · 2026-08-27