esp-idf GPIO与GPIO中断 api详解

一、特殊引脚说明

仅输入引脚

  • GPIO 34-39是GPIO仅输入引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,因此只能将这些引脚用于输入
    • GPIO 34
    • GPIO 35
    • GPIO 36
    • GPIO 37
    • GPIO 38
    • GPIO 39

集成在ESP-WROOM-32上的SPI闪存

  • 在一些ESP32开发板中,GPIO 6-GPIO 11是暴露的。但是,这些引脚连接到ESP-WROOM-32芯片上的集成SPI闪存,不建议用于其他用途。
    • GPIO 6 (SCK/CLK)
    • GPIO 7 (SDO/SD0)
    • GPIO 8 (SDI/SD1)
    • GPIO 9 (SHD/SD2)
    • GPIO 10 (SWP/SD3)
    • GPIO 11 (CSC/CMD)

电容式触摸GPIO

  • ESP32有10个内部电容式触摸传感器。这些传感器可以感知任何带有电荷的东西的变化,比如人的皮肤。因此,它们可以检测到用手指触摸GPIO时引起的变化。这些引脚可以很容易地集成到电容式焊盘中,并取代机械按钮。电容式触摸引脚还可以用来将ESP32从深度睡眠中唤醒。那些内部触摸传感器就连接到这些GPIO上:

    • T0 (GPIO 4)
    • T1 (GPIO 0)
    • T2 (GPIO 2)
    • T3 (GPIO 15)
    • T4 (GPIO 13)
    • T5 (GPIO 12)
    • T6 (GPIO 14)
    • T7 (GPIO 27)
    • T8 (GPIO 33)
    • T9 (GPIO 32)

二、头文件位置

  • components/driver/include/driver/gpio.h

三、常用类型

gpio_num_t

  • GPIO编号的枚举值,比如gpio_num_1或者 1 表示GPIO 1

gpio_mode_t

  • GPIO输入、输出模式枚举:
    • GPIO_MODE_DISABLE: disable input and output
    • GPIO_MODE_INPUT: input only
    • GPIO_MODE_OUTPUT: output only mode
    • GPIO_MODE_OUTPUT_OD: output only with open-drain mode
    • GPIO_MODE_INPUT_OUTPUT_OD: output and input with open-drain mode
    • GPIO_MODE_INPUT_OUTPUT: output and input mode

gpio_pull_mode_t

  • GPIO上、下拉电阻枚举:
    • GPIO_PULLUP_ONLY: 仅上拉
    • GPIO_PULLDOWN_ONLY: 仅下拉
    • GPIO_PULLUP_PULLDOWN: 上拉+下拉
    • GPIO_FLOATING: 悬空

gpio_int_type_t

  • GPIO中断枚举:
    • GPIO_INTR_DISABLE: 禁用GPIO中断
    • GPIO_INTR_POSEDGE: 上升沿触发
    • GPIO_INTR_NEGEDGE: 下降沿触发
    • GPIO_INTR_ANYEDGE: 任意沿触发
    • GPIO_INTR_LOW_LEVEL: 低电平触发
    • GPIO_INTR_HIGH_LEVEL: 高电平触发

gpio_pulldown_t

  • 下拉电阻使能枚举
    • GPIO_PULLDOWN_DISABLE
    • GPIO_PULLDOWN_ENABLE

gpio_pullup_t

  • 上拉电阻使能枚举
    • GPIO_PULLUP_DISABLE
    • GPIO_PULLUP_ENABLE

gpio_config_t结构体

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                                  */
#if SOC_GPIO_SUPPORT_PIN_HYS_FILTER
    gpio_hys_ctrl_mode_t hys_ctrl_mode;       /*!< GPIO hysteresis: hysteresis filter on slope input    */
#endif
} gpio_config_t;
  • pin_bit_mask: 位图,大小64位,表示所有GPIO
  • mode: GPIO的输入、输出模式
  • pull_up_en: 上拉电阻使能,前提已配置上拉电阻
  • pull_down_en: 下拉电阻使能,前提已配置下拉电阻
  • intr_type: 中断类型:

四、常用API

gpio_config

esp_err_t gpio_config(const gpio_config_t *pGPIOConfig);
  • 通过gpio_config_t结构体整体配置GPIO
  • 参数:
    • pGPIOConfig: gpio_config_t类型指针
  • 返回
    • ESP_OK: 配置成功
    • ESP_ERR_INVALID_ARG: 参数错误

gpio_reset_pin

esp_err_t gpio_reset_pin(gpio_num_t gpio_num);
  • 恢复GPIO默认设置
  • 参数:
    • gpio_num: 要reset的GPIO
  • 返回: 永远返回ESP_OK

gpio_set_direction

esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode);
  • 设置GPIO的mode
  • 参数:
    • gpio_num: 要设置的GPIO
    • mode:GPIO要设置的模式
  • 返回:
    • ESP_OK: 成功
    • ESP_ERR_INVALID_ARG: 参数错误

    gpio_set_level

esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level);
  • 设置GPIO输出电平
  • 参数:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

money的大雨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值