PY32F030 VREFINT 读到 4095 时先检查 GPIO 过压

结论: 本次实测中,任意 GPIO 电压高于 MCU 的 VDD,VREFINT 就会饱和到 4095。GPIO 电压恢复后,VREFINT 立即正常。

现象

正常读数约为 1470,反推 VDD 约为 3.3 V

[VREF] raw=1476 vdd_mv=3330

异常时,连续两次转换都到满量程:

[VREF] raw=4095 first_raw=4095 vdd_mv=1200

1200 mV 是错误结果。4095 已说明 ADC 读数失真,不能继续用于电池判断。

单变量隔离

每次只改变一个硬件状态:

操作 VREFINT 原始值
GPIO 时钟和输出初始化 1470
DCDC 使能脚配置为输出 1470
DCDC 开启 4095
DCDC 关闭 立即恢复到约 1470

ADC 重置和 VREFINT 通道重建都没有改变这个对应关系。

根因边界

示波器最终确认:触发条件是 GPIO 电压高于 MCU VDD

具体片内耦合路径没有直接证据。本文只记录可重复验证的板级结论。

排查顺序

再次遇到 VREFINT 满量程时:

  1. 测量 MCU 的真实 VDD。
  2. 测量每个 GPIO,找出高于 VDD 的引脚。
  3. 关闭对应外设供电,观察 VREFINT 是否立即恢复。

先确认 GPIO 电气边界,再调整 ADC 初始化代码。