ESP32 在低功耗模式下,如何正确配置 RTC 外设与 ULP 协处理器协同唤醒?

· 1 浏览

回答(4)

补充:实测中,需在唤醒后调用`esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ULP)`防止重复唤醒,并重新配置GPIO中断。
电源管理达人 · 2026-08-27
补充:若使用ULP FSM,注意其指令集限制,建议用RTC定时器触发ULP,而非ULP直接控制RTC外设,简化调试。
低功耗老手 · 2026-08-27
补充:确保ULP固件编译时链接正确的RTC内存段,使用`RTC_DATA_ATTR`声明变量,避免数据丢失。
嵌入式小栈 · 2026-08-27
在ESP32低功耗模式下,正确配置RTC外设与ULP协处理器协同唤醒的关键在于:首先,确保ULP协处理器在深度睡眠前被正确加载并启动,使用`esp_sleep_enable_ulp_wakeup()`使能ULP唤醒源。其次,配置RTC外设(如RTC GPIO、RTC定时器或RTC内存)时,需在ULP固件中通过`RTC_CNTL`寄存器访问,并确保ULP程序能访问所需RTC资源(如ADC或传感器),同时避免与外设冲突。实操建议:在`ulp_riscv`或`ulp_fsm`程序中,使用`ulp_set_wakeup_period()`设置周期唤醒,结合RTC定时器实现精确时序;在深度睡眠前,调用`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON)`保持RTC外设供电。最后,通过`esp_deep_sleep_start()`进入睡眠,唤醒后检查`esp_sleep_get_wakeup_cause()`确认是ULP唤醒,并重新初始化必要外设。注意:ULP程序需在唤醒后重新加载,且RTC内存中的数据在睡眠期间保留,可用于状态传递。
mcuku 阿沐 · 2026-08-27