ESP32C3的GPIO操作

下面是驱动ESP32C3的GPIO操作方法汇总

开发环境:VSCode、ESP-IDF

简单操作方法

															#include <stdio.h>
															#include <driver/gpio.h>
															#include <sys/unistd.h> //usleep()函数在这里,单位是微妙
															#include <esp_rom_gpio.h> //esp_rom_gpio_pad_select_gpio()函数的头文件
																						//gpio_pad_select_gpio()函数,个人使用时找不到。
																
															void Delay_ms(unsigned int ums)
															{
															    usleep(ums * 1000);
															}
															
															void GPIO_Init(void)
															{
															    esp_rom_gpio_pad_select_gpio(GPIO_NUM_12); //选择具体的引脚
															    gpio_set_direction(GPIO_NUM_12,GPIO_MODE_OUTPUT); //设置引脚的输出方向
															
															    gpio_set_level(GPIO_NUM_12,0);
															}
															
															void app_main(void)
															{
															    GPIO_Init();
															    while(1)
															    {
															        Delay_ms(800);
															        gpio_set_level(GPIO_NUM_12,1);
															        Delay_ms(800);
															        gpio_set_level(GPIO_NUM_12,0);
															    }
															}
														

使用结构体操作方法

使用结构体的方式更像STM32的编程风格。
注意:使用结构体方式,需要提前为pin_bit_mask参数设定使用的数值。
格式:#define GPIO_OUTPUT_PIN_SEL (1ULL << GPIO_NUM_12)。GPIO_NUM_12是引脚的编号。
															//在简单方式的代码中添加宏定义和替换GPIO_Init()的内容即可。
															#define GPIO_OUTPUT_PIN_SEL (1ULL << GPIO_NUM_12)
															
															void GPIO_Init(void)
															{
															    gpio_config_t io_config;
															
															    io_config.intr_type = GPIO_INTR_DISABLE; //不使用中断
															    io_config.mode = GPIO_MODE_DEF_OUTPUT; //输出模式
															    io_config.pin_bit_mask = GPIO_OUTPUT_PIN_SEL; //选择引脚
															    io_config.pull_down_en = GPIO_PULLDOWN_DISABLE; //不下拉
															    io_config.pull_up_en = GPIO_PULLUP_DISABLE; //不上拉
															    gpio_config(&io_config); 
															
															    gpio_set_level(GPIO_NUM_12,0);
															}