要消除STM32 DAC输出任意波形时的拼接毛刺,核心是让DMA在后台无缝切换缓冲区,避免CPU干预造成的时间间隙。具体做法:1)配置DMA为循环模式,并启用双缓冲(DMA_SxM0AR和DMA_SxM1AR分别指向两个波形表),通过DMA中断(半传输和传输完成)交替填充空闲缓冲区;2)在中断服务函数中,只更新当前未使用的缓冲区数据,不触碰DMA正在读取的缓冲区,确保数据一致性;3)将DAC触发源设为定时器(如TIM6),用定时器更新事件触发DAC转换,保证输出节奏稳定;4)关键优化:在填充新波形时,确保首尾采样点连续(如正弦波从0相位开始),避免跳变;5)若波形频率变化,需同步调整定时器分频和重装值,并注意DMA传输宽度与DAC数据寄存器对齐(12位右对齐)。实操建议:先用逻辑分析仪观察毛刺位置,确认是缓冲区切换间隙还是触发抖动,再针对性调整DMA优先级和中断抢占设置。
mcuku 阿沐 · 2026-08-27