stm32 mcu低功耗调试
sleep 后 ADC_EN_VBAT=3.521V 的含义(2026-04-08)结论这组数据不能直接证明“PB8 配置没生效”。更像是 PB8 已经处于高阻,但被芯片内部保护结构或其它泄漏路径钳在了约 3.5V 附近。为什么不是“GPIO 没生效”如果 PB8 真被别的代码改成推挽高输出,它应更接近VDD,通常接近 3.3V,而不是 3.521V。如果 PB8 被强拉低,它应接近 0V。现在测到的是VBAT_CS=4.235V、ADC_EN_VBAT=3.521V,说明 PB8 没有被强驱到高或低,更像是高阻后被外部和内部路径共同决定的中间电位。更合理的解释外部电路会通过R59 + R60试图把 PB8 往VBAT_CS拉高。但 PB8 所在 IO 单元并不是理想无穷大阻抗,仍可能存在:上电域 ESD/钳位结构;IO 漏电;与VDD相关的注入电流通路;STOP 前后外设/电源域残留影响。这些路径会把 PB8 从 4.235V 拉回到某个较低的平衡点,于是你看到约 3.521V。PB8 改成输入浮空后测到 0V 的含义(2026-04-08)结论这个结果说明GPIO_MODE_INPUT + GPIO_NOPULL明显不是理想高阻观察态。对这块板子和这颗 MCU 来说,PB8 一旦改成普通输入模式,内部数字输入路径很可能对该节点形成了明显负载,足以把通过 45k 电阻链送来的电压拉到 0V 附近。它说明了什么这反而证明 PB8 的模式切换是生效的,因为只改模式,电压结果就从约 3.5V 变成了 0V。也说明“普通输入浮空”和“开漏写高”在这个 over-VDD 场景下并不等价。删除 adc.c 里的 return 后,PB8 从 4.230V 变成 3.520V 的原因(2026-04-08)根因删除 app/Tonly/platform/gpio/Src/adc.c 的return;后,HAL_ADC_MspInit()真正执行了。这会完成 ADC1 的 GPIO、时钟、DMA 初始化,并让 PA1 真正成为ADC1_IN1的工作引脚。随后在系统启动流程里,MX_ADC1_Init()、校准和 DMA 采样都会真正生效。