GPIO & RTC GPIO

278 阅读3分钟

获取 IO 管脚实时配置状态

GPIO 驱动提供了一个函数gpio_dump_io_configuration() 用来输出指定管脚的实时配置状态,包括上下拉、输入输出使能、管脚映射等。例如,以下命令可用于输出 GPIO4,GPIO8 与 GPIO26 的配置状态:

gpio_dump_io_configuration(stdout, (1ULL << 4) | (1ULL << 18) | (1ULL << 26));

其输出信息如下:

================IO DUMP Start================
IO[4] -
    Pullup: 1, Pulldown: 0, DriveCap: 2
    InputEn: 1, OutputEn: 0, OpenDrain: 0
    FuncSel: 1 (GPIO)
    GPIO Matrix SigIn ID: (simple GPIO input)
    SleepSelEn: 1
IO[18] -
    Pullup: 0, Pulldown: 0, DriveCap: 2
    InputEn: 0, OutputEn: 1, OpenDrain: 0
    FuncSel: 1 (GPIO)
    GPIO Matrix SigOut ID: 256 (simple GPIO output)
    SleepSelEn: 1

IO[26] **RESERVED** -
    Pullup: 1, Pulldown: 0, DriveCap: 2
    InputEn: 1, OutputEn: 0, OpenDrain: 0
    FuncSel: 0 (IOMUX)
    SleepSelEn: 1
=================IO DUMP End==================

如果你想要查看所有管脚的配置状态,可以使用命令

gpio_dump_all_io_configuration(stdout, SOC_GPIO_VALID_GPIO_MASK);

配置 USB PHY 管脚为普通 GPIO 管脚

要将 USB PHY 管脚配置为普通 GPIO 管脚,可使用函数gpio_config(),请参考以下代码片段来进行配置。

gpio_config_t usb_phy_conf = {
    .pin_bit_mask = (1ULL << USB_PHY_DP_PIN) | (1ULL << USB_PHY_DM_PIN),
    .mode = GPIO_MODE_INPUT_OUTPUT,
    .pull_up_en = 0,
    .pull_down_en = 0,
    .intr_type = GPIO_INTR_DISABLE,
};
gpio_config(&usb_phy_conf);

API 参考 - 普通 GPIO

Header File

components/esp_driver_gpio/include/driver/gpio.h 此头文件可以包含在以下文件中 #include "driver/gpio.h"

此头文件是由esp_driver_gpio组件提供的API的一部分。声明您的组件依赖于esp_driver_gpio,请将以下内容添加到CMakeLists.txt中: REQUIRES esp_driver_gpioPRIV_REQUIRES esp_driver_gpio

Functions

gpio_config(const gpio_config_t *pGPIOConfig)

GPIO通用配置。

Configure GPIO's Mode,pull-up,PullDown,IntrType
  • 参数 pGPIOConfig --指向GPIO配置结构的指针。
  • 返回
    • ESP_OK --成功。
    • ESP_ERR_INVALID_ARG --参数错误。

gpio_reset_pin(gpio_num_t gpio_num)

将gpio重置为默认状态(选择gpio功能,启用上拉并禁用输入和输出)。

  • 参数 gpio_num --GPIO编号。
  • 返回
    • ESP_OK --成功(始终返回)。

备注: 此功能还将此引脚的IOMUX配置为GPIO功能,并断开任何其他通过GPIO矩阵配置外围输出。

gpio_set_intr_type(gpio_num_t gpio_num, gpio_int_type_t intr_type)

GPIO设置中断触发类型。

  • 参数
    • gpio_num --GPIO编号。如果要设置触发类型,例如GPIO16,gpio_num应该是gpio_num_16(16)。
    • intr_type --中断类型,从gpio_int_type_t中选择。
  • 返回
    • ESP_OK --成功。
    • ESP_ERR_INVALID_ARG --参数错误。

gpio_intr_enable(gpio_num_t gpio_num)

启用GPIO模块中断信号。

  • 参数
    • gpio_num --GPIO编号。如果要设置触发类型,例如GPIO16,gpio_num应该是gpio_num_16(16)。
  • 返回
    • ESP_OK --成功。
    • ESP_ERR_INVALID_ARG --参数错误。

备注: ESP32:使用ADC或Wi-Fi时,请不要使用GPIO36和GPIO39的中断启用睡眠模式的蓝牙。请参考adc1_get_raw的评论。请参阅第节关于此问题的描述,请参阅ESP32 ECO和Bug解决方案的3.11。

gpio_intr_disable(gpio_num_t gpio_num)

禁用GPIO模块中断信号。

  • 参数
    • gpio_num --GPIO编号。如果要设置触发类型,例如GPIO16,gpio_num应该是gpio_num_16(16)。
  • 返回
    • ESP_OK --成功。
    • ESP_ERR_INVALID_ARG --参数错误。

备注: 当ISR上下文中禁用缓存时,通过启用配置GPIO_CTRL_FUNC_IN_IRAM