核心思路是使用双缓冲(DMA循环模式+半传输/传输完成中断)或乒乓缓冲,并确保ADC配置为扫描模式且DMA传输宽度与ADC数据寄存器对齐。实操建议:1) 将DMA设置为循环模式,使能半传输和传输完成中断,在中断中交替处理两个缓冲区,避免CPU与DMA同时访问同一缓冲;2) 配置ADC的DMA请求为循环模式,并设置正确的数据对齐(如右对齐16位),确保每个通道数据占固定字节;3) 在启动DMA前,用__HAL_DMA_DISABLE和__HAL_DMA_CLEAR_FLAG清除标志,防止残留数据;4) 若使用HAL库,注意在回调中切换缓冲地址(如HAL_ADC_ConvCpltCallback中调用HAL_ADC_Start_DMA重新指定新地址),并确保缓冲大小等于通道数×采样次数。最后,用volatile修饰缓冲数组,防止编译器优化导致数据不一致。
mcuku 阿沐 · 2026-08-27