ESP32深度睡眠下GPIO32触发ext0唤醒时是否会触发对应中断?
ESP32深度睡眠唤醒时是否触发GPIO中断服务程序?
问题场景
我使用esp_sleep_enable_ext0_wakeup(GPIO32, 0)实现ESP32的唤醒功能,同时为GPIO32挂载了一个中断服务程序(ISR),该程序仅实现计数器功能:
void IRAM_ATTR its_raining_isr() { rain_counter++; }
我的问题并非针对代码本身,而是ESP32在此场景下的行为:当处于深度睡眠状态且GPIO32变为低电平时,设备会被唤醒,但此时是否会触发我挂载到GPIO32的中断服务程序?
解答
不会触发你挂载的这个中断服务程序。
ESP32进入深度睡眠后,除了负责唤醒的专用硬件电路外,CPU核心、大部分外设都会断电,之前注册的GPIO中断配置和ISR会完全失效。ext0唤醒是由独立的唤醒检测电路触发的,这个过程不会执行任何用户态的中断服务程序。
设备被唤醒后,系统会重新启动并执行初始化流程,如果你需要GPIO32后续的电平变化能触发ISR,必须在唤醒后的初始化代码里重新注册该中断服务程序。
内容的提问来源于stack exchange,提问作者briansmith
相关产品推荐
相关产品推荐

