核心方案:使用DMA的循环模式(Circular Mode)配合双缓冲(Double Buffer)或乒乓缓冲,并利用DMA传输完成中断(TC)或半传输中断(HT)来同步处理数据。具体步骤:1) 配置ADC为扫描模式(Scan Mode)且DMA为循环模式,数据宽度设为半字(16位),缓冲区大小设为通道数×采样点数。2) 启用DMA的HT和TC中断,在中断回调中切换读写缓冲区(如使用两个数组交替),确保CPU处理的是完整的一轮采样数据。3) 关键对齐技巧:在ADC初始化时,将DMA的存储器地址对齐到缓冲区起始,并确保每次传输的字节数是通道数的整数倍;同时,在启动ADC前清零DMA计数器(NDTR),防止残留偏移。4) 若需更高精度,可启用ADC的DMA请求的“Last”位(仅STM32F3/F4等),或使用定时器触发ADC转换,保证采样时刻一致。实操建议:先用逻辑分析仪或串口打印验证各通道首字节是否对应通道0,若错位,检查DMA配置中的外设地址是否固定(ADC->DR)且存储器地址递增。
mcuku 阿沐 · 2026-08-27