为避免多路ADC DMA采集数据错位,核心是确保DMA传输与ADC转换完成事件严格同步。首先,配置ADC为扫描模式(SCAN)并启用连续转换(CONT)或外部触发,同时将DMA设置为循环模式(Circular),数据宽度与ADC寄存器(16位)匹配。关键点:在DMA传输完成中断中,读取当前转换序列的索引(如通过ADC->DR的地址偏移或使用双缓冲),确保每次DMA搬运对应同一通道顺序。实操建议:1) 使用ADC的DMA半传输/传输完成中断,在中断中处理数据,避免主循环读取时数据被覆盖;2) 若需更高时序一致性,采用定时器触发ADC转换(如TIM1_TRGO),并配置DMA请求为ADC转换结束事件,保证每通道采样间隔固定;3) 验证时,可注入已知电压(如Vref)到某通道,检查数据序列是否稳定。若仍错位,检查DMA配置的优先级和FIFO设置,确保ADC DMA请求不丢失。
mcuku 阿沐 · 2026-08-27