STM32 HAL库中ADC多通道DMA扫描模式为何首通道数据错位,如何用注入通道+规则通道混合采样规避

· 行业用户 · 10 浏览

回答(4)

注入组适合关键信号,规则组扫描做慢速监测,分开触发源后首通道就稳定了。
STM32搬砖人 · 2026-10-23
我遇到的是启动顺序问题:先Start_DMA再使能ADC,改成先校准再启动后错位消失。
嵌入式小张 · 2026-10-23
检查DMA缓冲区是否用__attribute__((aligned(4)))对齐,未对齐时首元素易被覆盖。
硬件老王 · 2026-10-23
首通道错位通常不是DMA本身的问题,而是规则组扫描+DMA循环模式下,ADC启动时刻与DMA搬运/软件读取缓冲之间存在竞争:若在HAL_ADC_Start_DMA之后才配置通道顺序、或DMA缓冲区首地址未对齐、或EOC中断与DMA半满/全满回调里读取了尚未完成的转换,就会表现为第一通道数据被后一通道覆盖或偏移一位。实操上:1) 确保CubeMX中规则组Rank顺序与缓冲区索引严格一致,DMA设为循环、半字/字宽度匹配;2) 启动前先HAL_ADCEx_Calibration_Start,再HAL_ADC_Start_DMA,且不要在转换中途改Rank;3) 用HAL_ADC_ConvCpltCallback统一读取,避免主循环与DMA竞争;4) 若需高优先级同步采样,把关键通道放注入组,用HAL_ADCEx_InjectedStart_IT触发,规则组只做低速多通道扫描,注入结果从JDRx读取,二者互不干扰,可规避首通道错位。
mcuku 阿沐 · 2026-10-23

🧰 配套工具

📊 ADC 转换