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   阅读(6)   评论(0)
 标签: 创客 ESP32

涨知识
PID

PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。

评论:
相关文章
ESP32 FreeROS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


ESP32Encoder:高效的ESP32旋转编码器库

ESP32Encoder库是一个利用ESP32脉冲计数器硬件外设实现高效旋转编码器读取的软件库。


适合学习物联网的几款盒子

本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。


乐动掌控

乐动掌控采用掌控板作为主控,塑胶一体式外壳,侧面和底面开具多个乐高扩展孔位,兼容乐高积木,可完成多种创意应用。


ESP32 MicroPython存储数据到闪存

在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


小鹏物联网 MicroPython 图像采集方案

本方案是一个基于ESP32-CAM + 物联网的图像采集方案。


esp32cam开发板烧录micropython固件

‌ESP32-CAM与MicroPython结合可实现摄像头图像采集、视频流传输等功能,不过Micropython官方没有支持ESP32-CAM的固件,需要烧录第三方的专有固件。


小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。