ESP32配置GPIO,实现每0.5秒翻转LED电平
一、控制LED每隔0.5秒翻转电平
#define LED_PIN GPIO_NUM_27void led_task(void *pvParameters)
{// 配置GPIOgpio_config_t io_conf = {.pin_bit_mask = (1ULL << LED_PIN), // 设置GPIO27为输出引脚.mode = GPIO_MODE_OUTPUT, // 配置为输出模式.pull_up_en = GPIO_PULLUP_DISABLE, // 禁用上拉电阻.pull_down_en = GPIO_PULLDOWN_DISABLE, // 禁用下拉电阻.intr_type = GPIO_INTR_DISABLE // 禁用中断};gpio_config(&io_conf);while(1) {// 翻转LED状态static uint8_t level = 0;gpio_set_level(LED_PIN, level);level = !level;// 延时500msvTaskDelay(pdMS_TO_TICKS(500));}
}
这段代码是对一个 gpio_config_t
类型的结构体变量 io_conf
进行初始化,然后通过调用 gpio_config(&io_conf)
函数对 GPIO 引脚进行配置。
- .pin_bit_mask = (1ULL << LED_PIN) :
pin_bit_mask
字段用于指定要配置的 GPIO 引脚位掩码。这里(1ULL << LED_PIN)
表示将LED_PIN
对应的位设置为 1,其余位为 0。1ULL
是一个无符号长整型常量,通过左移操作将其移到LED_PIN
对应的位位置,从而实现对指定引脚的选取。例如,如果LED_PIN
定义为 27,则该表达式的结果是第 27 位为 1,其余位为 0 的 64 位无符号整数,表示选中 GPIO27。 - .mode = GPIO_MODE_OUTPUT :
mode
字段用于设置 GPIO 的工作模式,这里将其设置为GPIO_MODE_OUTPUT
,即输出模式,表示该引脚被配置为输出引脚。 - .pull_up_en = GPIO_PULLUP_DISABLE :
pull_up_en
字段用于控制是否启用上拉电阻。GPIO_PULLUP_DISABLE
表示禁用上拉电阻,即不对该引脚启用内部的上拉电阻。 - .pull_down_en = GPIO_PULLDOWN_DISABLE :
pull_down_en
字段用于控制是否启用下拉电阻。GPIO_PULLDOWN_DISABLE
表示禁用下拉电阻,即不对该引脚启用内部的下拉电阻。 - .intr_type = GPIO_INTR_DISABLE :
intr_type
字段用于设置 GPIO 的中断类型。GPIO_INTR_DISABLE
表示禁用中断,即该引脚不会产生中断信号。
在 gpio_config_t
结构体中,除了上述字段外,还有其他一些可用的选项,以下是详细介绍:
二、其他可用的 GPIO 引脚配置选项
-
GPIO 引脚工作模式(mode)选项
GPIO_MODE_INPUT
:输入模式。引脚用于接收外部信号,此时通常会结合上拉或下拉电阻配置(如果需要)来确保引脚电平稳定。GPIO_MODE_OUTPUT_OD
:开漏输出模式。在这种模式下,引脚只能输出低电平或者高阻态。需要外部上拉电阻来将引脚拉高,常用于多个设备共享一条总线的情况,可以有效避免引脚电平冲突。GPIO_MODE_INPUT_OD
:开漏输入模式。引脚在输入模式下具有开漏特性,一般也需要外部上拉或下拉电阻来配合使用,用于特殊的输入场景,如一些带有线与功能的总线信号输入。GPIO_MODE_DISABLE
:禁用模式。引脚的功能被禁用,不会作为 GPIO 使用,可能用于其他外设功能或者完全不使用该引脚。
-
GPIO 引脚上拉电阻配置(pull_up_en)选项
GPIO_PULLUP_ENABLE
:启用上拉电阻。当引脚处于输入模式时,上拉电阻会将引脚电平拉高到高电平状态,防止引脚电平悬空,在一些需要默认高电平的场景下很有用,比如连接按键的一端接地,另一端接 GPIO 引脚,启用上拉电阻后,按键未按下时引脚为高电平,按键按下时引脚为低电平。
-
GPIO 引脚下拉电阻配置(pull_down_en)选项
GPIO_PULLDOWN_ENABLE
:启用下拉电阻。与上拉电阻相反,下拉电阻会将引脚电平拉低到低电平状态,适用于需要默认低电平的场景,例如连接一个上拉的按键到 GPIO 引脚,启用下拉电阻后,按键未按下时引脚为低电平,按键按下时引脚为高电平。
-
GPIO 引脚中断类型(intr_type)选项
GPIO_INTR_LOW_LEVEL
:低电平触发中断。当引脚电平持续为低电平时,产生中断。GPIO_INTR_HIGH_LEVEL
:高电平触发中断。当引脚电平持续为高电平时,产生中断。GPIO_INTR_FALLING_EDGE
:下降沿触发中断。当引脚电平从高变低时,产生中断。GPIO_INTR_RISING_EDGE
:上升沿触发中断。当引脚电平从低变高时,产生中断。GPIO_INTR_ANYEDGE
:任意边沿触发中断。当引脚电平发生跳变(无论是上升沿还是下降沿)时,都产生中断。