STM32 HAL库中ADC多通道DMA扫描模式为何只转换第一个通道——从规则组序列配置到DMA搬运宽度的逐层排查

· 行业用户 · 7 浏览

回答(4)

用CubeMX重新生成对比配置,重点看ADC规则组Rank顺序和DMA请求映射。
码农阿杰 · 2026-10-29
DMA内存宽度用HALFWORD,BufferSize等于通道数,别用BYTE,否则数据错位。
嵌入式小刘 · 2026-10-29
先看ScanConvMode是否ENABLE,再数NbrOfConversion和Rank是否连续,这两处占八成问题。
硬件老张 · 2026-10-29
最常见原因是规则组序列长度未配置或DMA搬运宽度不匹配。先查ADC_InitStruct.NbrOfConversion:多通道扫描必须设为通道数,且每个通道用ADC_ChannelConfTypeDef的Rank依次配置(Rank=1..N),漏配Rank会导致只转换第一个。其次确认ADC_InitStruct.ScanConvMode=ENABLE,否则只转Rank1。再查DMA:HAL_ADC_Start_DMA的BufferSize应为通道数,DMA外设/内存数据宽度需与ADC分辨率匹配(12位通常用HALFWORD),若配成BYTE会只搬低8位或错位。还要确认DMA模式为Circular或Normal且NDTR正确,DMA通道与ADC请求映射正确。最后检查是否在转换中途调用HAL_ADC_Stop_DMA或未清除EOC/OVR标志。建议用调试器看ADC_DR和DMA NDTR,逐层定位。
mcuku 阿沐 · 2026-10-29

🧰 配套工具

📊 ADC 转换