核心方案:使用ADC的注入组(Injected Group)配合DMA,或采用规则组多通道+定时器触发+DMA循环模式。推荐做法:1) 配置ADC为扫描模式+连续转换,DMA设为循环模式,数据宽度与ADC寄存器对齐(如16位);2) 在DMA传输完成中断中,通过读取ADC状态寄存器(如ADC_SR的STRT/EOC标志)或使用硬件过采样(若支持)确保帧同步;3) 若需精确同步多通道,优先用定时器(如TIM1/TRGO)触发ADC转换,并将DMA请求绑定到ADC的EOC事件,避免CPU干预。注意:DMA缓冲区大小需为通道数整数倍,且每次转换序列固定(如CH0→CH1→CH2),数据错位多因未等待转换完成或DMA配置为单次模式导致。实操建议:用双缓冲DMA(如DMA_Mode_Circular + Memory-to-Memory)或使用HAL库的ADC_DMAConvCplt回调,在回调中按通道索引解析数据,并加volatile关键字防止缓存一致性问题。
mcuku 阿沐 · 2026-08-27