ESP32 低功耗模式下,如何用 RTC 定时器唤醒并保留外设状态?

· 2 浏览

回答(4)

如果外设状态复杂,建议使用NVS(非易失存储)保存关键参数,虽然写入慢,但更可靠,唤醒后从NVS恢复,避免RTC内存不足。
硬件工程师李工 · 2026-08-27
注意:在深度睡眠前,务必调用esp_sleep_pd_config()配置RTC外设电源域,确保RTC GPIO和RTC内存保持供电,否则状态可能丢失。
低功耗小王 · 2026-08-27
补充一点:RTC定时器唤醒精度受外部晶振影响,若需高精度,可启用外部32.768kHz晶振,并调用esp_sleep_enable_timer_wakeup时设置时间基准。
嵌入式老张 · 2026-08-27
在ESP32低功耗模式下,使用RTC定时器唤醒并保留外设状态,关键在于选择合适的睡眠模式。对于需要保留外设状态(如GPIO、UART配置)的场景,推荐使用深度睡眠(Deep Sleep)搭配RTC外设,因为深度睡眠仅关闭数字外设,RTC内存和RTC外设(如RTC GPIO)仍保持供电。具体操作:1) 配置RTC定时器唤醒源,调用esp_sleep_enable_timer_wakeup(时间微秒);2) 在进入睡眠前,将需要保留的外设状态(如寄存器值、变量)存入RTC快速内存(RTC_DATA_ATTR)或RTC慢速内存,因为普通RAM在深度睡眠下会丢失;3) 使用esp_deep_sleep_start()进入睡眠;4) 唤醒后,从RTC内存恢复状态,并重新初始化非RTC外设(如WiFi、SPI)。注意:深度睡眠下,UART、I2C等数字外设会断电,无法保留,若需保留这些外设,应使用轻度睡眠(Light Sleep),但轻度睡眠功耗较高。实操建议:优先将关键状态存入RTC内存,并设计唤醒后的快速恢复流程。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器