根因通常不是DMA本身,而是ADC规则组通道的配置顺序与DMA缓冲区索引的对应关系被误解。STM32的规则组按Rank1..RankN顺序转换,DMA按转换完成顺序写入缓冲区,因此缓冲区第0个元素对应Rank1而非通道号。若用HAL_ADC_ConfigChannel依次配置通道,后配置的会覆盖Rank,或未显式指定Rank导致顺序与预期不符。修正:1) 用ADC_ChannelConfTypeDef.Rank显式指定每个通道的Rank(1~N),确保与DMA缓冲区下标一一对应;2) 多通道时禁用间断模式或正确设置NbrOfConversion;3) 确认DMA为循环模式且NDTR等于通道数;4) 若使用CubeMX,检查生成的Rank顺序。调试时先单次转换读DR验证Rank顺序,再开DMA。