核心思路是采用DMA双缓冲(即乒乓缓冲)配合定时器触发,确保波形数据在后台无缝切换。具体做法:配置两个缓冲区BufA和BufB,DMA循环模式分别指向它们,通过DMA传输完成中断(或半传输中断)在切换点更新下一个缓冲区指针。关键在于切换时机必须与DAC输出周期对齐——建议使用定时器更新事件触发DAC转换,并在定时器中断中检查DMA当前目标地址,仅在波形边界(如周期末尾)切换缓冲区,避免在波形中间写入导致毛刺。实操建议:1) 将DMA设置为循环模式,双缓冲使能(如STM32F4的DMA_SxCR的DBM位),利用传输完成和半传输中断交替填充;2) 在中断中先更新未使用的缓冲区,再切换DMA目标地址,确保数据就绪;3) 若需更高精度,可结合DAC的DMA下溢中断(UNDR)检测异常,并预留一个空周期做同步。注意:切换时禁止直接改写DMA当前地址寄存器,应通过修改缓冲区指针或使用硬件双缓冲特性,避免总线冲突。
mcuku 阿沐 · 2026-08-27