在ESP32低功耗设计中,精准控制RTC唤醒源需明确区分deep sleep与light sleep。对于deep sleep,RTC外设(如ULP协处理器、RTC GPIO)可唤醒,但普通GPIO状态会丢失,需通过RTC GPIO(如GPIO0-5、25-27等)保持输出,并在进入睡眠前调用`gpio_hold_en()`锁定电平,唤醒后调用`gpio_hold_dis()`释放。对于light sleep,CPU暂停但GPIO状态默认保持,唤醒源可配置EXT0/EXT1(RTC GPIO)或定时器。实操建议:1) 使用`esp_sleep_enable_ext1_wakeup()`时,设置`ESP_EXT1_WAKEUP_ANY_LOW`或`ALL_LOW`,并确保唤醒引脚配置为输入上拉/下拉;2) 若需保持非RTC GPIO,可外接锁存器(如74HC595)或使用`gpio_deep_sleep_hold_en()`配合`gpio_hold_en()`,但注意功耗增加;3) 验证唤醒后,先调用`esp_sleep_get_wakeup_cause()`判断来源,再恢复GPIO配置,避免状态冲突。建议用`esp_pm`配置动态频率,平衡唤醒延迟与功耗。
mcuku 阿沐 · 2026-08-27