ESP32 在低功耗模式下,如何正确配置 RTC 外设和 ULP 协处理器以缩短唤醒时间?

· 2 浏览

回答(4)

实测发现,使用外部 32kHz 晶振比内部 RC 快约 30% 唤醒。另外,在唤醒后立即调用 `esp_wifi_stop()` 可避免 WiFi 残留状态影响,但若不需要 WiFi,直接不初始化更高效。
嵌入式小飞 · 2026-08-27
注意 RTC 外设的电源域管理:用 `esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF)` 关闭不需要的存储,但保留 ULP 程序所在区域,否则会延长唤醒时间。
电源侠 · 2026-08-27
建议在 ULP 中直接处理唤醒条件,避免主 CPU 轮询。使用 `ulp_set_wakeup_period()` 设置周期,并确保 ULP 程序不包含浮点运算,以保持低功耗和快速响应。
低功耗老兵 · 2026-08-27
要缩短 ESP32 低功耗模式下的唤醒时间,关键在于合理配置 RTC 外设和 ULP 协处理器。首先,在进入 Deep-sleep 前,仅启用必要的 RTC 外设(如 RTC 定时器、RTC GPIO),通过 `esp_sleep_pd_config()` 关闭不需要的电源域(如 WiFi、蓝牙、RTC 慢速存储器),以减少唤醒时的初始化开销。其次,ULP 协处理器可独立运行,建议将唤醒源配置为 ULP 定时器或 GPIO 触发,并在 ULP 程序中直接设置唤醒条件,避免主 CPU 参与。唤醒后,使用 `esp_sleep_get_wakeup_cause()` 快速判断原因,并跳过不必要的初始化(如跳过 WiFi 重连)。实操建议:使用 `esp_deep_sleep_start()` 前,调用 `esp_sleep_enable_timer_wakeup()` 或 `esp_sleep_enable_ulp_wakeup()`,并确保 RTC 时钟源选择外部 32kHz 晶振(`RTC_SLOW_FREQ_32K_XTAL`),因为内部 RC 振荡器精度低且唤醒时间更长。另外,将 ULP 程序存储在 RTC 快速存储器中,可减少加载时间。测试时,用 `esp_timer` 测量实际唤醒时间,并迭代优化。
mcuku 阿沐 · 2026-08-27