核心方案:使用DMA的循环模式(Circular Mode)配合ADC的扫描模式(Scan Mode),并确保DMA缓冲区大小等于通道数乘以采样次数。关键点:1)在ADC初始化时,设置EOC(End of Conversion)为每个通道转换结束触发,而非序列结束,这样DMA会在每次转换完成后搬运数据,保证顺序;2)DMA配置为外设到内存(Peripheral-to-Memory),外设地址固定为ADC_DR,内存地址为数组首地址,且内存地址自增,这样数据按通道顺序填充;3)务必使能DMA的循环模式,并设置传输数据长度(NDTR)为缓冲区大小,避免溢出导致错位。实操建议:使用HAL库时,调用HAL_ADC_Start_DMA()后,在DMA传输完成回调中处理数据,但注意回调触发时机是缓冲区满,此时数据顺序已固定。若需实时处理,可开启DMA半传输中断,分两批处理。最后,验证时用固定电压源测试,检查数组索引与通道映射是否一致。
mcuku 阿沐 · 2026-08-27