- ESP32 GPIO 说明: GPIO 编程指南,了解 GPIO 函数使用。
- 《ESP32 技术规格书》:“4.2 外设管脚分配” 章节
- 《ESP32 技术参考手册》:关于 “4 IO_MUX 和 GPIO 交换矩阵 (GPIO, IO_MUX)” 章节说明
- 《ESP32 硬件设计指南》:硬件设计建议
Strapping 管脚
- 共有 5 个 Strapping 管脚,GPIO0、GPIO2、GPIO5、GPIO12 (MTDI)、GPIO15 (MTDO)。每一个 Strapping 管脚都会连接内部上拉/下拉。如果一个 Strapping 管脚没有外部连接或者连接的外部线路处于高阻抗状态,内部弱上拉/下拉将决定 Strapping 管脚输入电平的默认值。为改变 Strapping 的值,用户可以应用外部下拉/上拉电阻,或者应用主机 MCU 的 GPIO 控制芯片上电复位放开时的 Strapping 管脚电平。复位放开后,Strapping 管脚和普通管脚功能相同。配置 Strapping 管脚的详细启动模式如下,参见《ESP32 技术规格书》。
- MTDI 对应 GPIO12 ,GPIO12 的电平与 Flash 启动相关。
- MTDO 对应 GPIO15
- GPIO0 与 GPIO2 与下载启动模式相关
Flash/PSRAM 管脚
- SPI0/1: GPIO6-11 和 GPIO16-17 通常连接模块上集成的 SPI flash 和 PSRAM,不能用于其他用途。
- PSRAM 的接口除了 CS(任意 GPIO)不能与 Flash 共用外,CLK 接口(建议参考模组使用的时钟脚),其他都可以与 Flash 的接口共用。
- 不同型号的模组内置 Flash 的管脚配置不同,可使用 esptool 工具,通过 espefuse.py summary 命令读取。例如:
SPI_PAD_CONFIG_CLK (BLOCK0): Override SD_CLK pad (GPIO6/SPICLK) = 0 R/W (0b00000)
SPI_PAD_CONFIG_Q (BLOCK0): Override SD_DATA_0 pad (GPIO7/SPIQ) = 0 R/W (0b00000)
SPI_PAD_CONFIG_D (BLOCK0): Override SD_DATA_1 pad (GPIO8/SPID) = 0 R/W (0b00000)
SPI_PAD_CONFIG_HD (BLOCK0): Override SD_DATA_2 pad (GPIO9/SPIHD) = 0 R/W (0b00000)
SPI_PAD_CONFIG_CS0 (BLOCK0): Override SD_CMD pad (GPIO11/SPICS0) = 0 R/W (0b00000)
JTAG 调试管脚
- GPIO12-15 通常用于 Debug(JTAG) 调试,可参见“ESP32 引脚和 JTAG 接口信号” 和 “ESP-Prog 下载与调试板介绍”。
下载管脚/日志输出
- 默认通过 UART0(GPIO1 和 GPIO3) 下载固件和日志输出
- 下载串口不支持修改为其他 UART 接口
- 日志输出串口可在 menuconfig 中进行修改,可参见“ESP32 如何修改 LOG 输出至串口 UART1”。
仅输入管脚
- GPIO34-39 只能设置为输入模式,没有软件上拉或下拉功能。
ADC 管脚
- 使用 Wi-Fi 时,不能使用 ADC2 管脚。所以,如果你正在使用 Wi-Fi,同时在从 ADC2 GPIO 获取值时遇到了困难,可以考虑使用 ADC1 GPIO,这会解决你的问题。更多详情,请参阅 “ADC 限制”。
- ADC 硬件设计参考《ESP32 硬件设计指南》中 “2.6 ADC” 章节说明。
复位(RST)管脚
- CHIP_PU(EN):高电平:芯片使能;低电平:芯片关闭。注意:不能让 CHIP_PU 管脚浮空。参见《ESP32 技术规格书》中“表 1:管脚描述”
- CHIP_PU(EN)可以作为硬件复位管脚,硬件设计要求可参考《ESP32 硬件设计指南》中的 "2.2.2 复位"章节说明。
RTC_GPIO
- 在 Deep-sleep 模式下,只有 RTC_GPIO 可保持工作。且仅有 RTC GPIO 可以作为唤醒源,而非数字 GPIO。
- 18 个 RTC GPIO 管脚,由 ESP32 的 RTC 子系统控制。作为输出管脚时仍然能够在芯片处于 Deep-sleep 睡眠模式下保持输出电平值或者作为输入管脚使用时可以将芯片从 Deep-sleep 中唤醒。可参见《ESP32 技术参考手册》中的 “RTC_MUX 管脚清单”。
- ULP 模式下 RTC_GPIO 的应用例程:esp-iot-solution/examples/ulp_examples
I2C 管脚
- I2C 的管脚可通过任意 GPIO 映射(GPIO34-39 仅输入的管脚除外),请参见 《ESP32 技术规格书》 管脚分配说明。
- 则在 Deepsleep 模式下,I2C 可使用如下红框里的 RTC_GPIO。注意:使用 GPIO(0,2,4,15)以外的 RTC_GPIO 为模拟的 I2C 。可参考例程:esp-iot-solution/examples/ulp_examples/ulp_i2c_bitbang
AT 串口管脚
- 默认 release/v2.0.0.0 版本以下的 AT 固件都是通过 UART0(与下载同串口)来传输 AT 指令的;release/v2.0.0.0 及以上版本的 AT 固件默认的 AT 串口对应管脚,不同型号的模组是不一样,具体的 AT 串口管脚默认配置参见 esp-at 出厂配置文件:esp-at/components/customized_partitions/raw_data/factory_param/factory_param_data.csv
- AT 串口可通过自行编译 esp-at SDK 来进行修改,可参见“Ubuntu18.04 上通过 Gitee 完成 esp-at release_v2.2.0.0 编译环境搭建”说明。
外设管脚分配
- 请参见《ESP32 技术规格书》“4.2 外设管脚分配” 章节。
SPI 接口
- ESP32 的 SPI 在专用 IO_MUX SPI 引脚上的速度可达 80 MHz ,在 GPIO matrix 引脚上的速度可达 40 MHz ,但在 GPIO matrix 上的全双工传输只支持高达 26 MHz 的速度。请阅读 “SPI Master Driver” 编程指南。
GPIO 中断
- 当使用 ADC 或在 Wi-Fi 开启睡眠模式时,请不要使用 GPIO36 和 GPIO39 中断。对应说明参见 “gpio_intr_enable()” 函数说明,解决方案参考《ESP32 Bug 描述及解决方案》。
GPIO 应用
- 如何配置 GPIO 以及如何使用 GPIO 中断:esp-idf/examples/peripherals/gpio/generic_gpio
- 基于专用 GPIO 的矩阵键盘:esp-idf/examples/peripherals/gpio/matrix_keyboard
- 使用 GPIO 唤醒 Light Sleep 例程:esp-idf/examples/system/light_sleep
注意:ESP32 ECO V0 和 V1 版本的芯片,GPIO 唤醒源不能与 Touch 或 ULP 唤醒源一起使用。可参见 “esp_sleep_enable_gpio_wakeup()” 函数说明。
- ESP32 使用 RTC GPIO 唤醒 Deep Sleep 模式