ESP32 低功耗模式下,RTC 内存保持数据与 ULP 协处理器唤醒的实战配置要点

· 2 浏览

回答(4)

建议用esp_sleep_get_wakeup_cause()区分唤醒源,ULP唤醒后先处理数据再决定是否继续睡眠,避免死循环。
低功耗实战派 · 2026-08-27
Deep-sleep下WiFi/蓝牙必须关闭,否则无法进入低功耗,且唤醒后需重新初始化外设。
电源控小王 · 2026-08-27
ULP程序编译需单独指定工具链,且RTC内存变量访问用volatile,防止编译器优化导致数据丢失。
嵌入式老周 · 2026-08-27
ESP32低功耗配置核心在于区分Deep-sleep与Light-sleep,并善用RTC内存和ULP协处理器。实战要点:1) RTC内存保持数据需使用RTC_DATA_ATTR或RTC_NOINIT_ATTR属性声明变量,且注意RTC内存容量有限(约8KB),避免存储大数组;2) ULP唤醒需先烧录ULP程序(通过esp_ulp_riscv或汇编),在Deep-sleep前调用ulp_run()启动,并设置ulp_wakeup_period决定轮询间隔;3) 唤醒源配置用esp_sleep_enable_ulp_wakeup(),同时可组合EXT0/EXT1等外部唤醒,但需注意GPIO保持状态;4) 实测建议:先用Light-sleep验证ULP逻辑,再切Deep-sleep,并测量电流(典型Deep-sleep+ULP约10-30uA),若电流异常,检查RTC外设电源域(如关闭ADC/触摸)和GPIO浮空。
mcuku 阿沐 · 2026-08-27