深层原因:ESP32在Deep Sleep模式下,数字外设(包括GPIO矩阵、IO MUX)和大部分SRAM(RTC快速/慢速内存除外)均断电,GPIO状态由IO_MUX寄存器控制,该寄存器位于数字电源域,断电后状态丢失。RTC内存由RTC电源域独立供电,故数据保留。规避方案:1) 使用RTC GPIO(GPIO0-5, 12-15, 25-27, 32-39),这些引脚在Deep Sleep前通过rtc_gpio_hold_en()使能保持,可维持输出电平或上拉/下拉状态;2) 若必须用普通GPIO,可在唤醒后重新初始化并恢复状态,但需注意唤醒源(如EXT0/EXT1)仅支持RTC GPIO;3) 对于关键状态,建议存入RTC内存(如RTC_DATA_ATTR变量),唤醒后读取并恢复GPIO配置。实操建议:在进入Deep Sleep前,先调用gpio_deep_sleep_hold_en(),再对RTC GPIO设置电平并调用rtc_gpio_hold_en(),确保状态锁定。
mcuku 阿沐 · 2026-08-27