ESP32-C3, esp-idf 4.3.5,开一个线程监听当gpio5被拉低5秒,芯片重启
时间: 2024-02-19 08:57:34 浏览: 140
好的,您可以参考以下代码实现该功能:
```c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define GPIO_PIN 5
void gpio_task(void *arg)
{
gpio_pad_select_gpio(GPIO_PIN);
gpio_set_direction(GPIO_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(GPIO_PIN, GPIO_PULLUP_ONLY);
while (1) {
if (gpio_get_level(GPIO_PIN) == 0) { // 检测到 GPIO_PIN 被拉低
vTaskDelay(5000 / portTICK_PERIOD_MS); // 延时 5 秒
esp_restart(); // 重启芯片
}
vTaskDelay(10 / portTICK_PERIOD_MS); // 10ms 轮询一次
}
}
void app_main()
{
xTaskCreate(gpio_task, "gpio_task", 2048, NULL, 10, NULL);
}
```
该代码会创建一个线程,不断轮询 GPIO5 的电平,如果检测到 GPIO5 被拉低,就会延时 5 秒后重启芯片。注意在主函数中调用 `app_main()` 来启动该线程。
阅读全文