根因通常不是DMA本身,而是扫描序列配置与DMA缓冲区映射不一致:1) 只配置了ADC_ScanConvMode=ENABLE,却未按Rank顺序设置各通道的ADC_ChannelConfTypeDef.Rank,导致转换顺序由默认Rank决定;2) DMA缓冲区按“通道号顺序”理解,而ADC按Rank顺序写入,二者错位;3) 规则组通道数NbrOfConversion与实际Rank数不符,或DMA长度按通道数而非转换次数设置;4) 未在启动前调用HAL_ADC_Start_DMA,或DMA循环模式下缓冲区被覆盖。修正:明确Rank1..RankN与缓冲区下标一一对应,NbrOfConversion=N,DMA BufferLength=N(半字),启动顺序为HAL_ADC_Start_DMA后再HAL_ADC_Start;若需连续转换用Circular模式并保证读取与写入同步。调试时先单次转换验证Rank映射,再开DMA。