ESP32 - 初识GPIO

1、前言

学习一款新的芯片,第一步都是想要点亮一个小灯,所以首先要学习GPIO的一些基本操作,掌握了相关的API就能进行电灯操作了,本文主要讲解GPIO相关API的使用。

2、GPIO输入输出

(1)头文件
#include "driver/gpio.h"
(2)IO初始化

首先了解一个结构体 gpio_config_t,通过初始化该结构体变量后调用gpio_config函数配置PIN脚。

typedef struct {
    uint64_t pin_bit_mask;          /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */
    gpio_mode_t mode;               /*!< GPIO mode: set input/output mode                     */
    gpio_pullup_t pull_up_en;       /*!< GPIO pull-up                                         */
    gpio_pulldown_t pull_down_en;   /*!< GPIO pull-down                                       */
    gpio_int_type_t intr_type;      /*!< GPIO interrupt type                                  */
} gpio_config_t;

输入输出配置如下

/*output*/
    gpio_config_t gpio_set_out = {
        .pin_bit_mask = (1ULL << GPIO_NUM_2),
        .mode = GPIO_MODE_OUTPUT,
        .pull_down_en = GPIO_PULLUP_DISABLE,
        .pull_up_en = GPIO_PULLDOWN_DISABLE,
    };
    gpio_config(&gpio_set_out);
 /*input*/
    gpio_config_t gpio_set_in = {
        .pin_bit_mask = (1ULL << GPIO_NUM_15),
        .mode = GPIO_MODE_DEF_INPUT,
        .pull_down_en = GPIO_PULLUP_ENABLE,
        .pull_up_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_HIGH_LEVEL,
    };
    gpio_config(&gpio_set_in);

NOTE1:这里需要注意的就是pin_bit_mask 这个成员变量表述有个 “bit maps”,所以注意是用的映射的位表示PIN脚,(1ULL<<)这一步必不可少
NOTE2:其他相关的API查看gpio.h即可 ,这里附一个乐鑫官网的链接 https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/gpio.html

(3)其他
/*设置gpio_num 的电平状态 1-高 0-低*/
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)
/*获取gpio_num 的电平状态 -- 返回值*/
int gpio_get_level(gpio_num_t gpio_num)

这里通过gpio_set_level 设置某个IO输出电平状态就用gpio_num_t 枚举值了,不需要移位操作。

3、ISR

了解GPIO的中断需要了解的就是结构体gpio_config_t 中 成员变量intr_type,也就是配置中断的触发方式,常用的就是上升沿、下降沿、高电平、低电平触发
在这里插入图片描述配置好触发方式之后就要,添加对应的中断函数了,一般就用到以下两个API

/*安装GPIO的中断服务,其允许为每个引脚设置独立的 GPIO 中断处理程序*/
esp_err_t gpio_install_isr_service(int intr_alloc_flags);  

/*配置管脚对应的中断函数 参数1:PIN脚枚举 参数2:中断回调函数 参数3:为中断函数传参的指针变量*/
esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void *args); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值