ESP32开发(二)——GPIO管脚配置

        在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)编译下载

         到此,整个工程结束。

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crystal(mercy)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值