在VSCode中搭建完ESP32的开发环境后,就可以开始快乐编程了。在进行ESP32开发前,我们需要对它的API有个基本了解。
一.资料下载
授人以鱼不如授人以渔,学会找学习资料很重要。在乐鑫的官网上,给出了各种型号的技术支持,点击支持,技术文档。
我所使用的开发板为ESP32,所以选择ESP32,选择ESP-IDF编程指南。
点击开来后,里面有非常详细的教程。这里我们重点关注它的各个API接口,点击API参考,外设API,里面列出了关于各类外设对于的API。这边文章主要介绍关于GPIO配置的各种API函数,后面各种接口函数将在后面学习过程中依次介绍。这里我们选泽GPIO & RTC GPIO。
GPIO & RTC GPIO介绍文档中先是介绍了ESP32开发板的引脚接口,需要注意的是,并不是所有引脚都能够被复用,有些引脚只能用做指定接口。里面介绍了关于引脚配置所使用到的函数以及结构体。
二.相关函数介绍
在使用相关函数时,我们需要引入相应的头文件:
#include "driver/gpio.h"
(1)用于初始化GPIO引脚函数
//参数: gpio_config_t,GPIO结构指针
//返回:ESP_OK success
// ESP_ERR_INVALID_ARG Parameter error
//作用:完成对GPIO口方向,上拉,模式,中断等的配置
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)
(2)引脚高低电平的设置与获取
//参数:GPIO端口号,高低电平(0,1)
//返回:ESP_OK success
// ESP_ERR_INVALID_ARG Parameter error
//作用:设置引脚高低电平
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)
//参数:GPIO的引脚号
//返回:引脚电平
int gpio_get_level(gpio_num_t gpio_num)
(3)引脚配置结构体
typedef struct {
uint64_t pin_bit_mask; /*配置引脚寄存器*/
gpio_mode_t mode; /*设置引脚模式,输入,输出等*/
gpio_pullup_t pull_up_en; /*上拉使能*/
gpio_pulldown_t pull_down_en; /*下拉使能*/
gpio_int_type_t intr_type; /*中断方式*/
} gpio_config_t;
//gpio_mode_t 参数
typedef enum {
GPIO_MODE_DISABLE = GPIO_MODE_DEF_DISABLE,
GPIO_MODE_INPUT = GPIO_MODE_DEF_INPUT,
GPIO_MODE_OUTPUT = GPIO_MODE_DEF_OUTPUT,
GPIO_MODE_OUTPUT_OD = ((GPIO_MODE_DEF_OUTPUT) | (GPIO_MODE_DEF_OD)),
GPIO_MODE_INPUT_OUTPUT_OD = ((GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT) |
(GPIO_MODE_DEF_OD)),
GPIO_MODE_INPUT_OUTPUT = ((GPIO_MODE_DEF_INPUT) | (GPIO_MODE_DEF_OUTPUT)),
} gpio_mode_t;
typedef enum {
GPIO_PULLUP_DISABLE = 0x0, /*!< Disable GPIO pull-up resistor */
GPIO_PULLUP_ENABLE = 0x1, /*!< Enable GPIO pull-up resistor */
} gpio_pullup_t;
typedef enum {
GPIO_PULLDOWN_DISABLE = 0x0, /*!< Disable GPIO pull-down resistor */
GPIO_PULLDOWN_ENABLE = 0x1, /*!< Enable GPIO pull-down resistor */
} gpio_pulldown_t;
typedef enum {
GPIO_INTR_DISABLE = 0, /*!< Disable GPIO interrupt */
GPIO_INTR_POSEDGE = 1, /*!< GPIO interrupt type : rising edge */
GPIO_INTR_NEGEDGE = 2, /*!< GPIO interrupt type : falling edge */
GPIO_INTR_ANYEDGE = 3, /*!< GPIO interrupt type : both rising and falling edge */
GPIO_INTR_LOW_LEVEL = 4, /*!< GPIO interrupt type : input low level trigger */
GPIO_INTR_HIGH_LEVEL = 5, /*!< GPIO interrupt type : input high level trigger */
GPIO_INTR_MAX,
} gpio_int_type_t;
三.创建工程
打开VScode,Ctrl+Shift+P,在命令框中输入show examples.
选择sample project->Create project using example sample_project,选择工程文件夹。
选择我信任此作者。
打开工程如图所示。
然后我们就开始代码编写 ,这里我就直接张代码了哦!
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "driver/gpio.h"
#define RXD GPIO_NUM_19 //GPIO管脚定义
#define TXD GPIO_NUM_23
#define RXD_OUTPUT_PIN_SEL (1ULL << RXD) //配置GPIO_OUT寄存器
#define TXD_OUTPUT_PIN_SEL (1ULL << TXD)
void IO_int(void){
gpio_config_t IO_Config;
IO_Config.pin_bit_mask = RXD_OUTPUT_PIN_SEL;
IO_Config.mode = GPIO_MODE_DEF_OUTPUT; /*输出 */
IO_Config.pull_up_en = 1; /*上拉*/
IO_Config.pull_down_en = 0;
IO_Config.intr_type = GPIO_INTR_DISABLE; /*不使能中断*/
gpio_config(&IO_Config);
IO_Config.pin_bit_mask = TXD_OUTPUT_PIN_SEL;
gpio_config(&IO_Config);
gpio_set_level(RXD,0);
gpio_set_level(TXD,0);
}
void app_main(void)
{
IO_int();//初始化
while (1)
{
vTaskDelay(1000/portTICK_PERIOD_MS); //延迟1s
gpio_set_level(RXD,1);//设置高电平
gpio_set_level(TXD,0);//设置低电平
}
}
作为第一个工程项目,关于如何下载工程到开发板中,我将做详细的讲解。
(1)串口选择:如果不知道选择哪一个串口,有一个简答直白的方法,把开发板拔掉,再插上,多出来的那个串口就是啦!如果插上后没有反应,一个可能是由于你电脑没有装相应的驱动,另一个可能是你的电源线只能供电(两线),换个电源线。如果还是不可以,可能就是开发板有问题了。
(2)设备选择
(3)编译下载
到此,整个工程结束。文章来源:https://www.toymoban.com/news/detail-688220.html
文章来源地址https://www.toymoban.com/news/detail-688220.html
到了这里,关于ESP32开发(二)——GPIO管脚配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!