核心方案:使用ADC的注入组或规则组配合DMA的循环模式,并确保DMA传输长度与ADC通道数严格匹配。推荐做法:1) 配置ADC为扫描模式+连续转换,规则序列按通道顺序排列,DMA设置为循环模式,数据宽度为半字(16位),传输次数设为通道数N。2) 在DMA中断或主循环中,通过当前DMA传输计数(DMA_GetCurrDataCounter)判断缓冲区写位置,从而将数据按通道索引解析。3) 为避免数据错位,务必在初始化时清零DMA缓冲区,并启用DMA传输完成中断,在中断中处理数据(如拷贝到用户数组),同时注意DMA与CPU访问冲突,可使用双缓冲或内存屏障。实操建议:使用HAL库时,设置hADC->DMAHandle的Init.PeriphDataAlignment和MemDataAlignment为DMA_PDATAALIGN_HALFWORD,并调用HAL_ADC_Start_DMA(&hadc, buffer, N)。解析时,buffer[0]对应通道0,buffer[1]对应通道1,依此类推。若使用多ADC交替采样,需同步触发并增加DMA传输长度。
mcuku 阿沐 · 2026-08-27