> 文章列表 > ESP32 GPIO使用

ESP32 GPIO使用

ESP32 GPIO使用

ESP32 GPIO使用

#define GPIO_OUT_PIN 2      //定义引脚
#define GPIO_OUTPUT_PIN_SEL  (1<<GPIO_OUT_PIN)      //定义输出引脚的宏,用来将输出引脚号转换为位掩码void bsp_gpio_init(){gpio_config_t io_conf;io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;     //  配置GPIO引脚io_conf.mode = GPIO_MODE_OUTPUT;        //  配置GPIO模式io_conf.pull_up_en = 0;     //  配置上拉电阻io_conf.pull_down_en = 0;   // 配置下拉电阻io_conf.intr_type = GPIO_INTR_ANYEDGE;      //配置GPIO口的中断类型gpio_config(&io_conf);
}

其他可以选择的参数:
intr_type:中断类型
GPIO_PIN_INTR_DISABLE(禁止中断)
GPIO_PIN_INTR_POSEDGE(上升沿触发)
GPIO_PIN_INTR_NEGEDGE(下降沿触发)
GPIO_PIN_INTR_ANYEDGE(边沿触发)
GPIO_PIN_INTR_LOW_LEVEL(低电平触发)
GPIO_PIN_INTR_HIGH_LEVEL(高电平触发)。

mode:GPIO口的工作模式,
GPIO_MODE_INPUT(输入模式)
GPIO_MODE_OUTPUT(输出模式)
GPIO_MODE_INPUT_OUTPUT(输入/输出模式)。

pin_bit_mask:GPIO口的引脚编号
GPIO_INPUT_PIN_SEL(输入引脚)
GPIO_OUTPUT_PIN_SEL(输出引脚)。

pull_down_en:是否启用GPIO口的下拉电阻,可以选择0(禁止)或1(启用)。
pull_up_en:是否启用GPIO口的上拉电阻,可以选择0(禁止)或1(启用)。

示例:

#include <stdio.h>
#include "esp_log.h"
#include"freertos/FreeRTOS.h"
#include"freertos/task.h"
#include"driver/gpio.h"
#include "driver/uart.h"
#include <esp_timer.h>#define GPIO_OUT_PIN 2
#define GPIO_OUTPUT_PIN_SEL  (1<<GPIO_OUT_PIN)#define GPIO_ON gpio_set_level(GPIO_OUT_PIN, 1)     //高电平
#define GPIO_OFF gpio_set_level(GPIO_OUT_PIN, 0)    //低电平static const char* TAG = "MyModule";
//#define BUF_SIZE (1024)
void bsp_gpio_init(){gpio_config_t io_conf;io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;     //  配置GPIO引脚io_conf.mode = GPIO_MODE_OUTPUT;        //  配置GPIO模式io_conf.pull_up_en = 0;     //  配置上拉电阻io_conf.pull_down_en = 0;   // 配置下拉电阻io_conf.intr_type = GPIO_INTR_ANYEDGE;      //配置GPIO口的中断类型gpio_config(&io_conf);// uart_config_t uart_config = {//         .baud_rate = 115200,//         .data_bits = UART_DATA_8_BITS,//         .parity    = UART_PARITY_DISABLE,//         .stop_bits = UART_STOP_BITS_1,//         .flow_ctrl = UART_HW_FLOWCTRL_DISABLE//     };// uart_param_config(UART_NUM_1, &uart_config);// uart_set_pin(UART_NUM_1, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);// uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);printf("init\\n");ESP_LOGI(TAG, "GPIO Init ready!");
}
void app_main(void)
{uint16_t count = 0;bsp_gpio_init();while(1){if(0 == count){count = 1;GPIO_ON;}else{count = 0;GPIO_OFF;}printf("\\ncount: %d\\n",count);vTaskDelay(1000 / portTICK_PERIOD_MS); /*  1000 / portTICK_PERIOD_MS,表示延时1000ms,portTICK_PERIOD_MS表示每ms有多少个ticks,ticks是一个时间片,一般1ms有1000ticks,如果延时1000ms,则需要1000*1000=1000000ticks。*/}
}

有关ESP_LOGI(TAG, “GPIO Init ready!”);可以看之前文章
https://blog.csdn.net/hongyun1221/article/details/129391697