这个程序用GPIO25按键按下无法唤醒(按键按下低电平)
#include <stdio.h>
#include "driver/gpio.h"
#include <time.h>
#include <sys/time.h>
#include "sdkconfig.h"
#include "soc/soc_caps.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_sleep.h"
#include "esp_log.h"
#include "driver/rtc_io.h"
#include "nvs_flash.h"
#include "nvs.h"
#define DEFAULT_WAKEUP_PIN 25
#define DEFAULT_WAKEUP_LEVEL ESP_GPIO_WAKEUP_GPIO_LOW
void example_deep_sleep_register_gpio_wakeup(void)
{
const gpio_config_t config = {
.pin_bit_mask = BIT(DEFAULT_WAKEUP_PIN),
.mode = GPIO_MODE_INPUT,
.pull_up_en = 1,
.pull_down_en = 0
};
ESP_ERROR_CHECK(gpio_config(&config));
//esp_sleep_enable_ext1_wakeup(DEFAULT_WAKEUP_PIN, DEFAULT_WAKEUP_LEVEL);
esp_deep_sleep_enable_gpio_wakeup(BIT(DEFAULT_WAKEUP_PIN), DEFAULT_WAKEUP_LEVEL);
printf("Enabling GPIO wakeup on pins GPIO%d\n", DEFAULT_WAKEUP_PIN);
}
void app_main()
{
uint64_t wakeup_pin_mask = 0;
example_deep_sleep_register_gpio_wakeup();
//light_sleep_wakeup();
//rtc_gpio_isolate(GPIO_NUM_25);
printf("sleep\r\n");
vTaskDelay(500);
esp_deep_sleep_start();
//esp_light_sleep_start();
while(1)
{
printf("exit_sleep\r\n");
vTaskDelay(300);
}
}
ESP32P4 deep sleep
-
- Posts: 23
- Joined: Sat Jan 18, 2025 2:31 pm
Re: ESP32P4 deep sleep
确保按键电路正确,按下时 GPIO25 电平能够拉低到足够的低电平(接近 0V)。
如果板子上有上拉电阻,可能和软件配置冲突。建议只在软件中启用 pull_up_en。
修正后的代码:
如果板子上有上拉电阻,可能和软件配置冲突。建议只在软件中启用 pull_up_en。
修正后的代码:
Code: Select all
#include <stdio.h>
#include "driver/gpio.h"
#include "esp_sleep.h"
#include "driver/rtc_io.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define DEFAULT_WAKEUP_PIN GPIO_NUM_25
#define DEFAULT_WAKEUP_LEVEL ESP_GPIO_WAKEUP_GPIO_LOW
void example_deep_sleep_register_gpio_wakeup(void)
{
// 配置 GPIO 为输入模式并启用 RTC 功能
rtc_gpio_init(DEFAULT_WAKEUP_PIN);
rtc_gpio_set_direction(DEFAULT_WAKEUP_PIN, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_pulldown_dis(DEFAULT_WAKEUP_PIN);
rtc_gpio_pullup_en(DEFAULT_WAKEUP_PIN);
// 启用 GPIO 唤醒
ESP_ERROR_CHECK(esp_deep_sleep_enable_gpio_wakeup(BIT(DEFAULT_WAKEUP_PIN), DEFAULT_WAKEUP_LEVEL));
printf("Enabling GPIO wakeup on pins GPIO%d\n", DEFAULT_WAKEUP_PIN);
}
void app_main()
{
printf("Configuring wakeup source...\n");
example_deep_sleep_register_gpio_wakeup();
printf("Entering deep sleep mode...\n");
vTaskDelay(pdMS_TO_TICKS(100)); // 确保状态稳定
esp_deep_sleep_start();
while (1)
{
// 这里的代码不会执行,因为 MCU 进入了深度睡眠
printf("Should not be here\n");
vTaskDelay(pdMS_TO_TICKS(300));
}
}
Who is online
Users browsing this forum: Google [Bot] and 86 guests