GPIO 输出输出配置

![[Pasted image 20250519103522.png]]

![[Pasted image 20250519103658.png]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"

void app_main(void)
{
    // //1.配置GPIO
    // gpio_config_t gpio_cfg = {
    //     .pin_bit_mask = 1ULL << 9,      //pin掩码
    //     .mode = GPIO_MODE_OUTPUT,
    // };
    // gpio_config(&gpio_cfg);             //配置

    gpio_reset_pin(GPIO_NUM_9);
    gpio_set_direction(GPIO_NUM_9, GPIO_MODE_OUTPUT);
    while (1)
    {
        /* code */
        gpio_set_level(GPIO_NUM_9, 0);         //点亮
        vTaskDelay(pdMS_TO_TICKS(1000));
        gpio_set_level(GPIO_NUM_9, 1);         //熄灭
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

主要区别对比

特性 gpio_config gpio_reset_pin + gpio_set_direction
配置方式 批量配置(可配置多个GPIO) 单个GPIO逐个配置
功能支持 支持模式、上拉/下拉、中断等 仅支持方向(输入/输出)
灵活性 更高(可配置更多参数) 较低(仅方向)
适用场景 复杂GPIO配置(多引脚、特殊功能) 简单GPIO方向设置

GPIO 驱动能力

![[Pasted image 20250519110820.png]]
![[Pasted image 20250519110925.png]]

GPIO输入示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "esp_log.h"

void app_main(void)
{
    //1.配置GPIO
    gpio_config_t gpio_cfg = {
        .pin_bit_mask = 1ULL << 1,      //pin掩码
        .mode = GPIO_MODE_INPUT,
        .pull_up_en = GPIO_PULLUP_ENABLE,
    };
    ESP_ERROR_CHECK(gpio_config(&gpio_cfg));              //配置
    gpio_dump_io_configuration(stdout, 1ULL<<1);

    while (1)
    {
        int level = gpio_get_level(GPIO_NUM_1);
       
        ESP_LOGE("TAG", "GPIO1 input level:%d", level);
        ESP_LOGW("TAG", "GPIO1 input level:%d", level);
        ESP_LOGI("TAG", "GPIO1 input level:%d", level);
        ESP_LOGD("TAG", "GPIO1 input level:%d", level);
        ESP_LOGV("TAG", "GPIO1 input level:%d", level);

        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

![[Pasted image 20250519111241.png]]