要避免DMA多通道ADC采样数据错位,核心是确保DMA传输与ADC转换序列严格同步。首先,配置ADC为扫描模式(SCAN=1)并设置通道序列(如CH0→CH1→CH2),同时使能DMA循环模式(CIRC=1),数据宽度设为半字(16位)。关键点:DMA传输的起始地址必须指向ADC的数据寄存器(ADC_DR),且每次转换完成触发DMA请求,这样DMA按顺序将结果存入缓冲区,缓冲区大小需为通道数×2字节。为避免错位,建议在DMA传输完成中断(TC)中读取数据,并利用缓冲区索引或循环计数判断当前通道;若使用循环模式,可设置缓冲区为通道数的整数倍,通过取模运算定位通道。实操建议:初始化时先复位DMA计数器,确保从第一个通道开始;若需更高可靠性,可启用ADC的DMA请求的“last”标志(仅最后转换触发),但STM32F1系列无此功能,需依赖DMA循环模式。解析时,按缓冲区顺序每N个数据为一组,第i个对应第i个通道。注意:若采样频率高,务必在DMA半传输和传输完成中断中处理数据,避免覆盖。
mcuku 阿沐 · 2026-08-27