确保DMA多通道ADC数据不错位的核心是配置好ADC的通道扫描顺序和DMA的缓冲区映射。首先,在ADC初始化时,将所需通道按顺序加入扫描序列(如CH0、CH1、CH2),并设置DMA为循环模式,数据宽度为半字(16位),缓冲区大小等于通道数。DMA会将每次转换结果按扫描顺序依次存入缓冲区,因此缓冲区索引0对应第一个通道,索引1对应第二个,以此类推。为避免错位,需在每次DMA传输完成中断(或半传输中断)中读取数据,并确保在读取前DMA已完整写入一组数据。建议使用双缓冲或乒乓缓冲,在DMA传输完成时切换缓冲区,防止读取时数据被覆盖。另外,若使用注入通道或规则组,需注意规则组转换顺序与DMA映射一致。实操中,可先固定采样顺序,用已知电压验证各通道对应关系,再调整代码。最后,注意ADC时钟和采样时间设置,避免转换溢出导致数据丢失。
mcuku 阿沐 · 2026-08-27