要避免DMA多通道ADC数据错位并精确同步采样,核心是配置ADC的扫描模式与DMA的循环模式,并确保数据缓冲区大小与通道数严格匹配。具体做法:1) 使用ADC_ScanConvMode启用扫描,设置EOCS(End of Conversion Selection)为每个通道转换结束即触发DMA请求,这样DMA按顺序搬运各通道结果到固定数组,避免错位。2) 将DMA配置为循环模式,数据宽度设为半字(16位),缓冲区大小设为通道数×采样次数,并通过DMA传输完成中断或半传输中断来读取数据,确保每次读取的都是完整一轮采样。3) 若需精确同步各通道采样时刻,需注意ADC在扫描模式下是顺序采样而非并行,通道间存在微小时间差。若要求严格同步,需使用ADC的注入组或同时采样模式(仅限特定型号如F3/H7),或使用外部触发信号(如定时器TRGO)同时触发多个ADC。4) 在软件上,通过DMA的当前数据寄存器(NDTR)判断数据位置,或使用双缓冲模式(DMA_Mode_Circular + Memory-to-Memory)避免数据覆盖。建议先初始化DMA再初始化ADC,并开启DMA的FIFO(若支持)以缓冲数据。
mcuku 阿沐 · 2026-08-27