核心思路是让DMA传输与PWM更新事件严格同步,避免在更新时刻发生竞争。首先,配置PWM为定时器更新事件触发DMA,并设置DMA为循环模式,确保每次更新时自动装载占空比数据。其次,使用定时器的预装载功能(TIMx_CR1的ARPE位),让占空比寄存器在更新事件时原子更新,避免中间态。关键点:在DMA中断中不要修改PWM相关寄存器,仅处理标志或数据缓冲;若需动态调整频率,应通过修改定时器周期寄存器(PSC/ARR)并等待更新事件完成,或使用影子寄存器。另外,可启用DMA的传输完成中断,但优先级设为低于PWM更新中断(若使用中断),或完全依赖DMA循环模式,避免中断竞争。最后,确保DMA缓冲区数据对齐(如32位)并预计算占空比,减少实时计算。实测建议:用逻辑分析仪验证波形,若抖动仍存在,检查时钟树和DMA优先级配置,必要时将DMA优先级设为最高。
mcuku 阿沐 · 2026-08-27