PY32F030 VREFINT 读到 4095 时检查 5 V 信号接入的 GPIO结论: 本板开启外部 DCDC 后,5 V 电源域的输出信号进入工作在 3.3 V 电源域的 MCU,相关 GPIO 出现高于 VDD 的电压,VREFINT 随即饱和到 4095。关闭 DCDC 后,GPIO 电压恢复,VREFINT 也立即恢复正常。
供电结构与异常现象业务操作需要开启外部 DCDC,由 DCDC 输出 5 V,为其他电路供电。MCU 仍由 3.3 V 供电,但 5 V 电源域中的部分输出信号会接入 MCU GPIO。
DCDC 关闭时,VREFINT 原始值约为 1470,反推 VDD 约为 3.3 V: - [VREF] raw=1476 vdd_mv=3330
复制代码DCDC 开启后,连续两次转换都到满量程: - [VREF] raw=4095 first_raw=4095 vdd_mv=1200
复制代码
DCDC 开关的单变量验证每次只改变一个硬件状态:
| 操作 | VREFINT 原始值 | | GPIO 时钟和输出初始化 | 约 1470 | | DCDC 使能脚配置为输出 | 约 1470 | | DCDC 开启 | 4095 | | DCDC 关闭 | 立即恢复到约 1470 |
DCDC 使能脚完成 GPIO 初始化时,VREFINT 仍然正常。异常只在 DCDC 实际输出 5 V 后出现。ADC 重置和 VREFINT 通道重建也没有改变这一对应关系,因此排查方向需要从 ADC 配置转向 5 V 电源域与 MCU 之间的信号连接。
5 V 信号跨电源域的触发链路示波器确认了以下触发链路:
- 开启外部 DCDC,5 V 电源域开始工作。
- 该电源域中的部分电路向 MCU 输出信号。
- 相关 GPIO 电压高于 MCU 的 3.3 V VDD。
- VREFINT 固定为 4095。
关闭 DCDC 后,GPIO 过压消失,VREFINT 无需重建 ADC 或重启 MCU 便立即恢复。现有证据可以确认 GPIO 过压与 VREFINT 异常同步出现,但没有直接证明具体的片内耦合路径。
ADC 结果的失效边界异常日志中的 1200 mV 是由满量程读数反推得到的错误结果。VREFINT 已经读到 4095 时,基于该值计算的 VDD、电池电压或阈值判断都不能继续使用。
跨电源域信号的排查顺序再次遇到 VREFINT 满量程时:
- 测量 MCU 的真实 VDD。
- 检查外部电源域与 MCU 之间的全部信号线。
- 测量相关 GPIO,找出电压高于 MCU VDD 的引脚。
- 关闭对应外设供电,观察 GPIO 电压与 VREFINT 是否同时恢复。
确认触发关系后,再根据接口类型处理电平兼容问题。具体电路改法取决于信号方向、速度和驱动方式,本文不展开。
build 28 July 2026 14:28 (UTC+8)
|