ESP32 低功耗模式下,RTC 内存与 ULP 协处理器协同唤醒的关键在于:ULP 程序运行于 RTC 慢速时钟域,其访问的变量必须存放在 RTC 快速内存(RTC_FAST_ATTR)或 RTC 慢速内存(RTC_SLOW_ATTR)中,且需用 volatile 修饰以防编译器优化。配置时,先通过 esp_sleep_enable_ulp_wakeup() 使能 ULP 唤醒,再在 ULP 程序中设置 wakeup 标志(如写 RTC 内存的特定地址),最后调用 esp_light_sleep_start() 或 esp_deep_sleep_start()。实战建议:1) 使用 RTC_FAST_ATTR 存放频繁访问的变量,访问速度更快;2) 在 ULP 程序末尾用 halt 指令结束,并确保唤醒条件满足后置位标志;3) 主 CPU 唤醒后,先读取 RTC 内存中的标志,再执行相应处理,避免重复初始化。注意:ULP 程序编译需使用 esp32ulp-elf 工具链,且 RTC 内存大小有限(8KB),需合理规划变量布局。
mcuku 阿沐 · 2026-08-27