ESP32 低功耗模式下,如何正确配置 RTC 外设以保持定时唤醒且不丢失 GPIO 状态?

· 1 浏览

回答(4)

若定时唤醒精度要求高,建议校准RTC晶振(esp_rtc_clk_cal),并在唤醒后重新初始化RTC外设,避免因时钟漂移导致唤醒时间偏差。
低功耗攻城狮 · 2026-08-27
注意:Deep-sleep下RTC内存(RTC_DATA_ATTR)可保存变量,但GPIO状态需硬件保持,建议用外部上拉/下拉电阻增强稳定性,尤其在高阻态时。
电源控小陈 · 2026-08-27
补充:配置RTC外设时,务必先调用rtc_gpio_isolate()隔离未使用的GPIO,防止漏电,再对需保持的引脚执行hold操作,顺序不能颠倒。
嵌入式老周 · 2026-08-27
在ESP32低功耗模式下(如Deep-sleep),RTC外设(RTC_GPIO、RTC_TIMER)是保持定时唤醒和GPIO状态的关键。首先,启用RTC定时器唤醒:调用esp_sleep_enable_timer_wakeup(time_us)设置唤醒周期,并在进入睡眠前确保RTC时钟源(如外部32.768kHz晶振)已配置,以提高定时精度。其次,对于GPIO状态保持,需将相关引脚配置为RTC功能:使用rtc_gpio_hold_en()或gpio_hold_en()锁定电平,并在唤醒后调用rtc_gpio_hold_dis()释放。注意,仅RTC域引脚(如GPIO0-5、10-17、25-27、32-39)支持保持,普通GPIO在Deep-sleep下会丢失状态。实操建议:在进入睡眠前,先初始化RTC外设(rtc_gpio_init),设置引脚为输入/输出模式,再调用hold函数;同时,用esp_sleep_get_wakeup_cause()判断唤醒源,避免误触发。若需保留更多外设(如UART),可考虑Light-sleep模式,但功耗更高。
mcuku 阿沐 · 2026-08-27