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=12001200 mV 是错误结果。4095 已说明 ADC 读数失真,不能继续用于电池判断。
单变量隔离
每次只改变一个硬件状态:
| 操作 | VREFINT 原始值 |
|---|---|
| GPIO 时钟和输出初始化 | 约 1470 |
| DCDC 使能脚配置为输出 | 约 1470 |
| DCDC 开启 | 4095 |
| DCDC 关闭 | 立即恢复到约 1470 |
ADC 重置和 VREFINT 通道重建都没有改变这个对应关系。
根因边界
示波器最终确认:触发条件是 GPIO 电压高于 MCU VDD。
- 过压存在:VREFINT 固定为
4095。 - 过压消失:VREFINT 立即恢复。
- 无需重启 MCU,也无需重建 ADC。
具体片内耦合路径没有直接证据。本文只记录可重复验证的板级结论。
排查顺序
再次遇到 VREFINT 满量程时:
- 测量 MCU 的真实 VDD。
- 测量每个 GPIO,找出高于 VDD 的引脚。
- 关闭对应外设供电,观察 VREFINT 是否立即恢复。
先确认 GPIO 电气边界,再调整 ADC 初始化代码。