ESP32 GPIO 矩阵和引脚多路复用

ESP32 芯片有34个物理GPIO管脚。每个GPIO管脚都可用作一个通用IO,或连接一个内部的外设信号。IO_MUX ¹、RTC IO MUX 和GPIO交换矩阵用于将信号从外设传输至GPIO管脚。

ESP32 架构包括将一些外设配置到任何 GPIO 引脚的功能,由 IO MUX GPIO 管理。从本质上讲,此功能意味着我们可以使用 IO MUX 和 GPIO Matrix 将内部外设路由到不同的物理引脚。

ESP32 GPIO 矩阵和引脚多路复用

Digtal pads是GPIO引脚,我们看到图上是一个双箭头,代表的是双向,既可以作为输入也可也作为输出。
IO MUX 中每个GPIO管脚有一组寄存器。每个管脚可以配置成GPIO功能(连接GPIO交换矩阵)或者直连功能(旁路GPIO交换矩阵,快速信号如以太网、SDIO、SPI、JTAG、UART等会旁路GPIO交换矩阵以实现更好的高频数字特性。所以高速信号会直接通过IOMUX输入和输出。)

GPIO交换矩阵则可以将部分外设映射到任意的I/O口上
ESP32 GPIO 矩阵和引脚多路复用

要使用此功能,我们必须注意一些预防措施:

  • 某些 GPIO 仅为 INPUT。

  • 一些外设具有 OUTPUT 信号,必须在能够配置为 OUTPUT 的 GPIO 上使用。

  • 一些外设,主要是高速外设、ADC、DAC、Touch 和 JTAG 使用专用的 GPIOs 引脚。

  • 一些引脚用于连接模块上的闪存 - 这可以防止它们用于任何其他用途 - 如果外围设备被路由到这些引脚之一,设备将无法启动。


外设 

ESP32共有34个物理GPIO管脚,序号为:0-19,21-23,25-27,32-39。其中GPIO34-39仅用作输入管脚,其他的既可以作为输入又可以作为输出管脚,GPIO2为启动引脚,最好也好不要接东西。

以下是 ESP32 上的基本外设列表。外设列表可能因每个 ESP32 SoC 系列而异。要查看 ESP32-S2 和 ESP32-C3 上可用的所有外设,请查看每个数据表。

外设表 

Type  类型

Function  功能

ADC

Dedicated GPIOs  专用 GPIO

DAC

Dedicated GPIOs  专用 GPIO

Touch Sensor  触摸传感器

Dedicated GPIOs  专用 GPIO

JTAG

Dedicated GPIOs  专用 GPIO

SD/SDIO/MMC HostController
SD/SDIO/MMC 主机控制器

Dedicated GPIOs  专用 GPIO

Motor PWM  电机 PWM

Any GPIO  任何 GPIO

SDIO/SPI SlaveController  SDIO/SPI 从控制器

Dedicated GPIOs  专用 GPIO

UART

Any GPIO[1]  任何 GPIO[1]

I2C

Any GPIO  任何 GPIO

I2S

Any GPIO  任何 GPIO

LED PWM

Any GPIO  任何 GPIO

RMT

Any GPIO  任何 GPIO

GPIO

Any GPIO  任何 GPIO

Parallel QSPI  并行 QSPI

Dedicated GPIOs  专用 GPIO

EMAC

Dedicated GPIOs  专用 GPIO

Pulse Counter  脉冲计数器

Any GPIO  任何 GPIO

TWAI

Any GPIO  任何 GPIO

USB

Dedicated GPIOs  专用 GPIO

[1] 除了由 bootloader 决定的下载/编程模式。

该表格位于 Espressif 提供的每个数据表中。


使用示例

在 Arduino Uno 中,我们有由硬件定义的 I2C 引脚,A4 是 SDA,A5 是 SCL。在这种情况下,我们不需要在 Wire.begin(); 函数中设置这些引脚,因为它们已经在 Wire 库中。

void setup()
{
    Wire.begin(); // join i2c bus (address optional for master)
}

现在,对于 ESP32,I2C 的默认引脚是 SDA (GPIO21) 和 SCL (GPIO22)。如果您需要更改引脚,我们可以使用不同的引脚作为默认引脚的替代。要更改引脚,我们必须在调用 Wire.begin(); 之前调用 Wire.setPins(int sda, int scl); 该函数。

int sda_pin = 16; // GPIO16 as I2C SDA
int scl_pin = 17; // GPIO17 as I2C SCL

void setup()
{
    Wire.setPins(sda_pin, scl_pin); // Set the I2C pins before begin
    Wire.begin(); // join i2c bus (address optional for master)
}
类似的方法也适用于其他外围设备。
- 本文为本站原创文章,转载请保留出处。
- 文章链接:https://www.xpstem.com/article/2000386

07-14   阅读(181)   评论(0)
 标签: 创客 ESP32

涨知识
RISC-V

RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。

评论:
相关文章
Arduino-ESP32与ESP-IDF的版本对应表

Arduino-ESP32与ESP-IDF的版本对应表。


Arduino-ESP32文件系统全解析:SPIFFS、LittleFS、SD卡操作

Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。


ESP32-P4-WIFI6开发板

ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。


ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。