ESP32 在低功耗模式下,如何精准控制 RTC 唤醒源并保持 GPIO 状态不丢失?

· 2 浏览

回答(4)

实测deep sleep唤醒后,GPIO状态恢复有延迟,建议在唤醒处理函数中加`vTaskDelay(10)`再操作外设,避免时序问题。
嵌入式小飞 · 2026-08-27
GPIO保持时,若使用内部上拉/下拉,需在`gpio_hold_en`前设置好,否则保持的是默认电平。建议用外部电阻确保稳定。
硬件控阿杰 · 2026-08-27
补充:用ULP协处理器做唤醒源时,可编程RTC寄存器实现复杂条件,但需注意ULP程序需在睡眠前加载,且唤醒后要重新初始化ULP内存。
低功耗老手 · 2026-08-27
在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