为避免STM32 ADC多通道扫描+DMA数据错位,核心是确保DMA传输与ADC转换同步且通道顺序固定。实操建议:1)将ADC配置为扫描模式+连续转换,DMA设置为循环模式,缓冲区大小等于通道数,并启用DMA的半传输/传输完成中断,在中断中读取数据;2)使用ADC的注入通道或规则组顺序固定,避免动态修改通道序列;3)关键:在启动DMA前,先清零ADC状态寄存器(如ADC_SR)和DMA计数器,并确保ADC校准完成;4)若需严格时序,可改用定时器触发ADC转换(如TIM1/TRGO),并让DMA在转换完成事件后传输,保证采样间隔一致;5)数据错位多因DMA未在转换完成前更新缓冲区,可启用DMA的FIFO或设置数据对齐(右对齐),并检查DMA传输宽度与ADC数据寄存器匹配(如16位)。最后,使用双缓冲(DMA半满/全满中断)可避免数据覆盖,确保读取时数据完整。
mcuku 阿沐 · 2026-08-27