ESP32_IDF学习(2)--GPIO

简介

ESP32 芯片有 40 个物理 GPIO pad。每个 pad 都可用作一个通用 IO,或连接一个内部的外设信号。IO_MUXRTC IO_MUXGPIO 交换矩阵用于将信号从外设传输至 GPIO pad。这些模块共同组成了芯片的 IO 控制。

注意:其中 GPIO 34-­39 仅用作输入管脚,其他的既可以作为输入又可以作为输出管脚。

GPIO6-11通常用于SPI闪存。

ESP-IDF GPIO函数

GPIO配置函数

esp_err_t gpio_config(const gpio_config_t *pGPIOConfig);

作用:配置GPIO基本功能

#define GPIO_OUTPUT_IO_0    22
#define GPIO_OUTPUT_PIN_SEL  (1ULL<<GPIO_OUTPUT_IO_0)  // 配置GPIO_OUT位寄存器

void gpio_init(void)
{
    gpio_config_t io_conf;  // 定义一个gpio_config类型的结构体,下面的都算对其进行的配置

    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;  // 禁止中断  
    io_conf.mode = GPIO_MODE_OUTPUT;            // 选择输出模式
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL; // 配置GPIO_OUT寄存器
    io_conf.pull_down_en = 0;                   // 禁止下拉
    io_conf.pull_up_en = 0;                     // 禁止上拉

    gpio_config(&io_conf);                      // 最后配置使能
}

GPIO复位函数

esp_err_t gpio_reset_pin(gpio_num_t gpio_num);

作用:将GPIO设为默认状态(启用GPIO功能,启用上拉并禁用输入输出)

gpio_reset_pin(GPIO_NUM_5);

GPIO中断设置函数

esp_err_t gpio_set_intr_type(gpio_num_t gpio_num, gpio_int_type_t intr_type);

作用:GPIO设置中断触发类型

gpio_set_intr_type(GPIO_NUM_36, GPIO_INTR_NEGEDGE);
GPIO_INTR_DISABLE //禁用GPIO中断
GPIO_INTR_POSEDGE //GPIO中断类型:上升沿
GPIO_INTR_NEGEDGE //下降沿
GPIO_INTR_ANYEDGE //上升沿和下降沿
GPIO_INTR_LOW_LEVEL //输入低电平触发
GPIO_INTR_HIGH_LEVEL //输入高电平触发

GPIO中断使能函数

esp_err_t gpio_intr_enable(gpio_num_t gpio_num);

作用:中断使能

gpio_intr_enable(GPIO_NUM_36);

注意:请不要在启用睡眠模式的情况下使用ADCWi-Fi时使用GPIO36GPIO39的中断

GPIO禁用中断函数

esp_err_t gpio_intr_disable(gpio_num_t gpio_num);

作用:禁止GPIO中断信号

GPIO输出电平函数

esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level);

作用:GPIO设置输出电平

gpio_set_level(GPIO_OUTPUT_IO_0, 0);            // 把这个GPIO输出低电平
gpio_set_level(GPIO_OUTPUT_IO_0, 1);            // 把这个GPIO输出高电平

GPIO获得输入函数

int gpio_get_level(gpio_num_t gpio_num);

作用:GPIO获得输入电平

gpio_get_level(GPIO_NUM_2)

GPIO设置方向函数

esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)

作用:GPIO设置引脚方向

gpio_set_direction(GPIO_NUM_5, GPIO_MODE_OUTPUT); // 把这个GPIO作为输出
gpio_set_direction(GPIO_NUM_2,GPIO_MODE_INPUT); //GPIO设置成输入

GPIO设置电阻函数

esp_err_t gpio_set_pull_mode(gpio_num_t gpio_num, gpio_pull_mode_t pull);

作用:配置GPIO上拉/下拉电阻

    GPIO_PULLUP_ONLY,               /*!< 上拉           */
    GPIO_PULLDOWN_ONLY,             /*!< 下拉          */
    GPIO_PULLUP_PULLDOWN,           /*!< 上拉+下拉*/
    GPIO_FLOATING,                  /*!< 浮空        */
    gpio_set_pull_mode(GPIO_NUM_5,GPIO_PULLUP_ONLY);

GPIO设置唤醒功能

esp_err_t gpio_wakeup_enable(gpio_num_t gpio_num, gpio_int_type_t intr_type);

作用:设置GPIO唤醒功能

gpio_wakeup_enable(GPIO_NUM_2,GPIO_INTR_LOW_LEVEL);//低电平唤醒
gpio_wakeup_enable(GPIO_NUM_2,GPIO_INTR_HIGH_LEVEL);//高电平唤醒

GPIO禁用唤醒功能

esp_err_t gpio_wakeup_disable(gpio_num_t gpio_num);

作用:禁止使用唤醒功能

版权声明:本文为CSDN博主「一月一星辰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43677266/article/details/121694538

生成海报
点赞 0

一月一星辰

我还没有学会写个人说明!

暂无评论

相关推荐

ESP32学习记录<四>ADC和DAC

ESP32学习记录ADC和DAC 前言 ADC和DAC是单片机比较常用的,ESP32具有12位的ADC和8位的DAC。今天我就简单地记录它们的使用。 一、ADC ADC也就是我们通常所说的模数转换,模拟信号

PCM开发板模块指令详解--功能指令4

25         MODBUS RTU指令 编号         指令名          参数1    参数2    参数3   参数4    参数5       说明 1          modbusrtum       K