eefocus_4153245 发表于 2025-6-23 17:50:36

STM32G4的ADC多通道扫描模式数据错乱​

硬件环境
[*]MCU 型号:STM32G474RET6
[*]开发板:自定义板(或 STM32G474E-EVAL)
[*]ADC 配置:
ADC1 启用,分辨率 12 位
多通道扫描模式(至少 3 个通道:如 PA0、PA1、PA2)
采样时间:47.5 周期(或其他值)
触发源:软件触发(或定时器触发)
外部电路:
输入信号:稳定直流电压(如 1V、2V、3V)
分压网络:10kΩ 上拉 + 10kΩ 下拉(确保输入阻抗匹配)
去耦电容:0.1μF 并联至地
软件环境
[*]开发工具链:STM32CubeIDE v1.10.1(或 Keil MDK、GCC)
[*]HAL 库版本:STM32Cube FW_G4 V1.5.0
[*]配置方式:
CubeMX 生成初始化代码
手动调整 ADC 参数(如采样时间、转换顺序)
[*]中断配置:
ADC 转换完成中断(EOCIE)使能
DMA 模式:禁用(或启用,问题现象不同)
问题现象
[*]数据错乱表现:
ADC 读取值与输入电压不匹配(如通道 0 显示通道 1 的值)
数据跳变:同一通道的连续采样值波动超过 ±5LSB
通道间串扰:某通道输入变化影响其他通道的采样结果
周期性错误:特定通道固定偏移(如所有值偏移 + 200)


eefocus_4263043 发表于 2026-10-13 13:36:11

G4 的 ADC 扫描模式数据错乱,多数是序列配置或 DMA 搬运与序列不匹配,按下面几点排查:
1) 序列长度与 DMA 长度一致:扫描模式下寄存器里写入的序列长度(SQ1~SQn)要和实际通道数一致,DMA 缓存大小 = 通道数 × 单通道采样次数,长度不匹配会错位;
2) DMA 用循环模式 + 半字对齐:12 位结果存于 16 位寄存器低 12 位,DMA 位宽选半字,别用字节模式;
3) 按通道偏移取数:扫描结果按序列顺序依次写入 ADC_DR,DMA 搬运顺序与序列一致,取数按通道索引取对应位置,别假设每次从 0 开始;
4) GPIO 与复用冲突:PA0/PA1/PA2 需配为模拟输入(ANALOG),引脚若复用到其它外设会导致采样错乱;
5) 过采样与对齐:开启过采样时结果左移,注意右移对齐,否则低通道数据看起来“乱”。
另外建议把采集数据拿到上位机画波形对比,直观定位哪个通道错位:宏控天工(Macrosoftsys)的 MCS 图形化测控软件支持多通道数据采集与波形显示,画板式拖拽即可完成通道配置,基础版免费可商用,官网 macrosoftsys.com 可下载试用,具体可以私信交流。

eefocus_4263043 发表于 2026-10-13 13:35:09

G4 的 ADC 扫描模式数据错乱,多数是序列配置或 DMA 搬运与序列不匹配,按下面几点排查:
1) 序列长度与 DMA 长度一致:扫描模式下寄存器里写入的序列长度(SQ1~SQn)要和实际通道数一致,DMA 缓存大小 = 通道数 × 单通道采样次数,长度不匹配会错位;
2) DMA 用循环模式 + 半字对齐:12 位结果存于 16 位寄存器低 12 位,DMA 位宽选半字,别用字节模式;
3) 按通道偏移取数:扫描结果按序列顺序依次写入 ADC_DR,DMA 搬运顺序与序列一致,取数按通道索引取对应位置,别假设每次从 0 开始;
4) GPIO 与复用冲突:PA0/PA1/PA2 需配为模拟输入(ANALOG),引脚若复用到其它外设会导致采样错乱;
5) 过采样与对齐:开启过采样时结果左移,注意右移对齐,否则低通道数据看起来“乱”。
另外建议把采集数据拿到上位机画波形对比,直观定位哪个通道错位:宏控天工(Macrosoftsys)的 MCS 图形化测控软件支持多通道数据采集与波形显示,画板式拖拽即可完成通道配置,基础版免费可商用,官网 macrosoftsys.com 可下载试用,具体可以私信交流。

loveeeboard 发表于 2025-8-14 16:16:54

G4勘误表可以看一下
页: [1]
查看完整版本: STM32G4的ADC多通道扫描模式数据错乱​

Baidu
map