GPIO
GPIO(General Purpose Input/Output),即通用输入输出端口,是计算机系统中常见的一种外设接口。它允许CPU或其他主要芯片与外部设备进行双向通信,以实现控制和数据传输。
在嵌入式系统中,GPIO通常是控制外围器件(如LED、开关、电机等)的最常见方式。它们使用数字信号(0或1)进行控制,并且可以以不同模式配置,例如输入、输出、上升沿中断、下降沿中断等。
ESP32-S3 芯片具有 56 Pin(引脚),其中可以分化出 45 路GPIO(GPIO0 ~ GPIO48,其中缺失了GPIO22 ~ GPIO25);
ESP32-S3-WROOM-1 模组中共有 41 个 Pin(管脚),其中只有36个可以作为 GPIO 使用;
ESP32-S3-WROOM-2 模组中共有 41 个 Pin(管脚),其中只有33个可以作为 GPIO 使用。
在使用GPIO之前,通常需要进行针脚的初始化,以设定特定的模式和方向。对于输出GPIO引脚,需要配置其输出高或低电平来控制连接到该引脚的设备。对于输入GPIO引脚,则需要在针脚上设置内部上拉或下拉电阻,并将其配置为中断模式,以便在检测到特定电平变化时触发中断处理程序。
ESP32 的GPIO
ESP32-S3 芯片具有 45 个物理 GPIO 焊盘。部分GPIO焊盘不能使用或芯片封装上没有对应管脚。每个焊盘均可用作通用 I/O 或可连接到内部外围信号。
- Strapping 引脚:GPIO0、GPIO3、GPIO45 和 GPIO46 是 Strapping 引脚。
- SPI0/1:GPIO26-32 通常用于 SPI flash 和 PSRAM,不推荐用于其他用途。当使用 Octal Flash 或 Octal PSRAM 或两者时,GPIO33~37 连接到 SPIIO4 ~ SPIIO7 和 SPIDQS。因此在 ESP32-S3R8 / ESP32-S3R8V 板上 GPIO33~37 也不推荐用于其他用途。
- USB-JTAG:默认情况下,USB-JTAG 使用 GPIO 19 和 20。为了将它们用作 GPIO,驱动程序将禁用 USB-JTAG。
还有单独的“RTC GPIO”支持,当 GPIO 被路由到“RTC”低功耗和模拟子系统时,它会起作用。这些引脚功能可在以下情况下使用:
- 在沉睡中
- 超低功耗协处理器正在运行
- ADC/DAC/等模拟功能正在使用中
ESP3 的 IO MUX
- 仅有部分输入信号可以直接通过 IO MUX 直连外设,这些输入信号在表 6-2 “信号可经由 IO MUX 直接输入”一栏中被标为“yes”。剩余其它信号只能通过 GPIO 交换矩阵连接至外设;
- ESP32-S3 共有 45 个 GPIO 管脚,因此从 GPIO SYNC 进入到 GPIO 交换矩阵的输入共有 45 个;
- 位于 VDD3P3_CPU 电源域和 VDD3P3_RTC 电源域的管脚由 IE、OE、WPU 和 WPD 信号控制;
- 仅有部分输出信号可通过 IO MUX 直连管脚,这些输出信号在表 6-2“信号可经由 IO MUX 直接输出”一栏中被标为“yes”。剩余其它信号只能通过 GPIO 交换矩阵连接至外设;
- 从 GPIO 交换矩阵到 IO MUX 的输出共有 45 个,对应 GPIO X:0 ~ 21、26 ~ 48。
图中展示了芯片焊盘 (PAD) 的内部结构,即芯片逻辑与 GPIO 管脚之间的电气接口。45 个 GPIO 管脚均采用这一结构,且由 IE、OE、WPU 和 WPD 信号控制。
ESP32 的 IO MUX(Multiplexing)是一种硬件资源分配方案,用于控制芯片上的 GPIO 引脚,以适应不同的应用场景和扩展需求。它可以将多个不同的功能映射到同一个物理引脚上,从而实现 GPIO 引脚的复用和扩展。
在 ESP32 中,每个 GPIO 引脚都有多个功能可供选择,例如普通输入输出、中断、PWM、SPI、I2C、UART 等。通过使用 IO MUX,我们可以自由地将这些功能映射到不同的物理引脚上,以满足不同的应用需求。
ESP32 芯片中的 IO MUX 由两部分组成:GPIO Matrix 和 Peripheral Input Output Matrix(PIOM)。这两个矩阵分别用于控制 GPIO 引脚和外设接口的复用和映射。
GPIO Matrix:用于控制 GPIO 引脚的复用和映射。它包含多个 GPIO 输入/输出通道,每个通道可以映射到多个物理引脚上,并通过寄存器进行控制和配置。
PIOM:用于控制外设接口的复用和映射。例如,当我们要使用 SPI 接口时,可以将某个 GPIO 引脚的功能设置为 SPI 输入或输出,然后将其与其他 SPI 引脚连接起来,以实现 SPI 数据传输。
需要注意的是,在使用 IO MUX 时需要考虑多个因素,例如引脚的电气参数、信号完整性、时序要求等。为了确保系统的可靠性和稳定性,开发者需要仔细阅读相关文档和参考资料,进行正确的 IO MUX 配置和调试。
总之,IO MUX 是 ESP32 芯片中一种重要的硬件资源分配方案,可以实现 GPIO 引脚和外设接口的复用和映射。开发者可以根据具体的应用需求和系统设计进行 IO MUX 设置和调整。
说明:
- IE:输入使能
- OE:输出使能
- WPU:内部弱上拉
- WPD:内部弱下拉
- Bonding pad:接合焊盘,芯片逻辑的结点,实现芯片封装内晶片与 GPIO 管脚之间的物理连接。
GPIO 使用注意事项
以下具有颜色标注的 GPIO 尽量不用使用
ESP32 中 GPIO的初始化
在ESP32-IDF中,GPIO的初始化主要包括以下几个步骤:
- 配置GPIO引脚的输入/输出模式:通过gpio_config()函数配置,该函数在头文件driver/gpio.h中定义。
- 配置GPIO引脚电平触发和中断类型:通过gpio_set_intr_type()函数配置,可选择下降沿触发、上升沿触发、双边沿触发或者禁用中断。该函数在头文件driver/gpio.h中定义。
- 配置GPIO引脚的下拉/上拉电阻:通过gpio_set_pull_mode()函数配置,可选择禁用、上拉或者下拉。该函数在头文件driver/gpio.h中定义。
gpio_config_t
ESP32-IDF编程中,通过 gpio_config 初始化 GPIO,该函数需要传入一个 gpio_config_t 类型的结构体,该结构体在 driver/gpio.h 中定义,原型如下:
typedef struct {
uint64_t pin_bit_mask; /* GPIO引脚的位掩码 */
gpio_mode_t mode; /* GPIO引脚的工作模式 */
gpio_pull_mode_t pull_up_en; /* GPIO引脚的上拉电阻是否使能 */
gpio_pull_mode_t pull_down_en; /* pull_down_en */
gpio_int_type_t intr_type; /* GPIO引脚的中断类型 */
} gpio_config_t;
成员 | 描述< |
---|