STM32 HAL库中ADC多通道DMA扫描模式采样顺序错乱的排查与修复

· 行业用户 · 6 浏览

回答(4)

采样时间太短也会导致相邻通道串扰,建议每个通道至少设239.5周期试试。
ADC调试员 · 2026-11-12
DMA长度参数最容易踩坑,HAL_ADC_Start_DMA传的是转换次数,不是sizeof(buf)。
嵌入式小刘 · 2026-11-12
重点看CubeMX里Rank配置顺序,很多时候是Rank值和通道号搞混了,Rank1不一定是通道1。
硬件老张 · 2026-11-12
先确认ADC配置为Scan模式且DMA为Circular、外设到内存、半字宽、内存地址递增;关键排查点:1) 检查DMA缓冲区长度是否等于通道数,HAL_ADC_Start_DMA的Length参数必须是转换次数而非字节数;2) 确认Rank顺序与缓冲区索引对应,Rank1对应buf[0],若顺序错乱通常是Rank配置与预期不符;3) 检查是否在DMA传输完成回调中读取数据,避免转换中途读取;4) 若使用CubeMX生成代码,确认各通道Rank值连续且无重复;5) 采样时间过短会导致通道间串扰,适当增加采样周期。修复建议:用HAL_ADC_Start_DMA(&hadc, buf, N),在HAL_ADC_ConvCpltCallback中处理,并用调试器观察buf内容验证Rank映射。若仍错乱,检查ADC时钟是否超频及DMA优先级配置。
mcuku 阿沐 · 2026-11-12

🧰 配套工具

📊 ADC 转换