通用IO口

  • gpio
  • GPIO

ESP32 管脚配置需要注意什么?

ESP32 系列模组分为 ESP32-WROOM 系列和 ESP32-WROVER 系列,GPIO 使用配置注意事项如下。

WROOM-32/32D/32U/32E/32UE 系列共有 26 个管脚可供客户使用,注意事项如下:

  • WROOM-32/32D/32U 系列的 GPIO6-GPIO11 被内置 flash 占用,不可用做它用;
  • WROOM-32E/32UE 系列的 GPIO6 ~ GPIO11 被内置 flash 占用,且不再拉出至模组管脚;
  • GPIO34、35、36 和 39 为输入管脚,不具备输出能力;
  • ESP32 内置 GPIO 矩阵,部分外设接口可以配置到任意空闲管脚上。即硬件设计时,不需要严格将某些功能固定在某些管脚上;
  • WROOM-32/32D/32U 不推荐用于新设计,推荐使用 WROOM-32E/32UE 系列;
  • 在带有 QSPI PSRAM 的 WROOM-32E/32UE 系列中,GPIO16 用于连接至嵌入式 PSRAM,不可用于其他功能。

详细信息可以参考 《ESP32 技术规格书》 中表格 6-2 GPIO_Matrix 的内容。

WROVER*/WROVER-I*/WROVER-B/WROVER-IB/WROVER-E/WROVER-IE 共有 24 个管脚可供客户使用,注意事项如下:

  • WROVER*/WROVER-I*/WROVER-B/WROVER-IB 系列的 GPIO6-GPIO11 被内置 flash 占用,不可用做它用;
  • WROVER-E/WROVER-IE 系列的 GPIO6-GPIO11 被内置 flash 占用,且不再拉出至模组管脚;
  • GPIO34、35、36 和 39 为输入管脚,不具备输出能力;
  • WROVER 系列模组中,GPIO12 由于在模组内部被上拉,不建议用做触摸传感功能;
  • ESP32 内置 GPIO 矩阵,部分外设接口可以配置到任意空闲管脚上。即硬件设计时,不需要严格将某些功能固定在某些管脚上;
  • WROVE*/WROVER-I*/WROVER-B/WROVER-IB 不推荐用于新设计,推荐使用 WROVER-E/WROVER-IE 系列。

详细信息可以参考 《ESP32 技术规格书》 中表格 6-2 GPIO_Matrix 的内容。

ESP32 有 3 组 UART,但下载只可使用 UART0,且管脚固定。

* 表示该产品处于生命周期终止状态。

ESP32 GPIO 电平翻转速度是多少?

GPIO 电平翻转大约耗时 300 ns。

ESP32 如果多个 GPIO 管脚配置了沿中断,则硬件可能⽆法正确触发中断。如何解决?

《ESP32 系列芯片勘误表》 中所言,当一些 RTC 外设的电源打开时,GPIO36 和 GPIO39 的数字输入会被拉低约 80 ns,暂无解决方案;变通方法为:当用户决定把用于控制以上传感器的电源域打开时,应当忽略来自 GPIO36 和 GPIO39 的输入。

ESP32-C3 系列芯片将 GPIO19 配置成输入下拉时,读取该 IO 口状态依旧显示高电平,但配置 ESP32-C3 的其他管脚或者其他芯片的管脚为输入下拉时,均正常显示为低电平?

  • ESP32-C3 的 GPIO19 为 USB D+ 管脚,USB 管脚的上拉电阻由管脚上拉和 USB 上拉共同控制,当其中一种上拉方式为 1 时,对应的上拉电阻就会使能。
  • GPIO19 是默认 USB 上拉使能的,因此配置了管脚为输入下拉后依旧是上拉使能,管脚显示高电平。
  • v4.4.3 及以上版本 GPIO 驱动已经修复该问题,如果您在使用较低版本的 ESP-IDF,请直接将 USB_SERIAL_JTAG_DP_PULLUP 寄存器写为 0 进行配置。

ESP-IDF 里是否能设置 GPIO 的驱动强度?

可以。请使用 API gpio_set_drive_capability 来设置 GPIO 驱动强度。

ESP32 使用 gpio_install_isr_service() 初始化新的 GPIO 中断服务时返回 ESP_ERR_NOT_FOUND,可能是什么原因?

这个错误通常代表 ESP32 的可用中断源不够用,此时应该同时有多个外设在同时占用中断源,可尝试减少其他组件的中断源使用个数来初始化新的 GPIO 中断。

如何获取 ESP32 RTC_GPIO 的输入电平状态?

uint8_t level = (uint8_t)((REG_GET_FIELD(RTC_GPIO_IN_REG, RTC_GPIO_IN_NEXT) & BIT(gpio_num)) ? 1 : 0);

如何在 Light-sleep 模式下使用 GPIO 按键?

可以启用按键的唤醒功能,注意,非 RTC GPIO 无法同时启用 GPIO 边沿触发和电平触发。可以使用 Button 组件现有的功能来实现。