Esp32-C3使用gpio唤醒深度睡眠,rtc gpio0~5始终置低,导致低电平唤醒一直复位,高电平唤醒无效?

博客讲述了在使用ESP32-C3开发板时遇到的深度睡眠唤醒问题,官方文档与实际操作不符。作者发现GPIO在睡眠后无法正确响应高电平或低电平唤醒。通过查阅GitHub上的解决方案,了解到需要配置GPIO并禁用数字GPIO pad保持功能,最终实现了GPIO唤醒深度睡眠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Esp32-C3使用gpio唤醒深度睡眠,rtc gpio0~5始终置低,导致低电平唤醒一直复位,高电平唤醒无效?

为省电环保,需要让芯片进入深度睡眠,然后在需要时唤醒它,而不是复位重启
我使用vscode+platformIO+arduino开发DfRobot的esp32-c3的这块开发板。因为esp32-C3官方称它深度水睡眠时电流只有5μa,这样的功耗是非常诱人的。为了在不需要它工作时让它休眠,需要时再唤醒它,这想着就觉得很爽,再加上这块板子只有20.5mm×25mm这么大,完美的environment friendly。
来自淘宝
esp32-c3和esp32系列不一样不支持ext0/1唤醒,也没有Touchpad不支持触摸唤醒,而esp_sleep_gpio_wakeup仅支持lightsleep。根据乐鑫官方文档所说esp32-c3可以使用

esp_deep_sleep_enable_gpio_wakeup(uint64_t gpio_pin_mask, esp_deepsleep_gpio_wake_up_mode_t mode )

这个函数就可以把芯片从deepsleep中唤醒:
在这里插入图片描述
并且似乎不需要在使用这个函数之前把IO拉高或拉低。


问题描述

事实情况似乎和官方文档所说的不一样

根据乐鑫的官方文档,GPIO 0~5都是RTC GPIO,于是我先用上面这个函数设置高电平唤醒,然后进入睡眠

esp_deep_sleep_enable_gpio_wakeup(1, ESP_GPIO_WAKEUP_GPIO_HIGH);
esp_deep_sleep_start();

进入深度睡眠后,用万用表测得1号引脚为低电平,但连线接3v3后无反应,GPIO 1始终置低。于是我设置低电平唤醒:

esp_deep_sleep_enable_gpio_wakeup(1, ESP_GPIO_WAKEUP_GPIO_LOW)
esp_deep_sleep_start();

睡眠后可以唤醒,但由于GPIO 0始终置低,所以进入睡眠后会立即唤醒导致芯片一直处于唤醒状态。我还尝试了0,3,4,5号IO都是如此。尤其比较离谱的是这个板子GPIO 2始终置高,导致使用GPIO 2高电平唤醒就会和0,1,3~5正好相反,设置高电平唤醒时芯片一直会不断被唤醒,无法睡眠,接地时也无任何反应。


原因分析:

可能需要在芯片进入睡眠前,对GPIO进行配置

根据上述情况分析,GPIO本身的状态应该是和开发板外部电路设计有关,本身不是问题,问题在于当把IO拉高或拉低时,芯片并没有对信号做出回应。所以应该需要配置IO使它对信号能够做出反应。


解决方案:

最后还得是github

在github上找了一番,发现有个人也问这个问题,而且最后他自己解决了,巧的是他也用arduino框架开发C3。
在这里插入图片描述
原文网址:https://github.com/espressif/arduino-esp32/issues/6656
看了他的代码,简化了一下,使用以下代码即可完成使用指定GPIO唤醒Esp32-C3深度睡眠:

//定义用于RTC_GPIO唤醒的IO,0b为二进制,“0010”为2^(gpio 1)的二进制数
//gpio0~3 为0b1111,即2^0+2^1+2^2+2^3=15的二进制数
const uint64_t WAKEUP_PIN_BITMASK = 0b0010;
//配置唤醒源
gpio_deep_sleep_hold_dis();	    //在深度睡眠时禁用所有数字gpio pad保持功能。
esp_deep_sleep_enable_gpio_wakeup(WAKEUP_PIN_BITMASK, ESP_GPIO_WAKEUP_GPIO_HIGH);
gpio_set_direction(GPIO_NUM_1, GPIO_MODE_INPUT);	//GPIO定向,设置为输入或输出
//开始睡眠
esp_deep_sleep_start();

完美解决!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值