ESP32硬件参考详细说明

ESP32硬件参考详细说明


📋ESP32简介

(包括:ESP32- d0wd、ESP32- d0wdq6、ESP32- d2wd、ESP32- s0wd)集成了Wi-Fi和双模式蓝牙。根据型号差异,ESP32包含一个或两个低功耗Xtensa®32位LX6微处理器(s),最大时钟速度240 MHz(通常是160 MHz)和Xtensa RAM / ROM,本地内存和JTAG接口。

  • 👉🏻ESP32芯片有48个引脚,具有多种功能。并不是所有的ESP32开发板的引脚都是外露的,有些引脚无法使用。
  • 🍁ESP32硬件功能和外设框架图:

在这里插入图片描述

  • 🔖型号U是后面从单核升级为双核心的,最开始是只代表单核心的。
  • 🔖ESP-WROOM-32 模组引脚排布说明:
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:不是所有的GPIO都可以在所有的开发板中访问,但是每个特定的GPIO都以相同的方式工作,不管你使用的是哪个开发板。如果你刚刚开始使用ESP32.其他开发板型号:

在这里插入图片描述

在这里插入图片描述

  • 🔖ESP32系列命名规则:
    在这里插入图片描述
  • 🔰型号对比:
    在这里插入图片描述

📑ESP32 外设

  • 18 Analog-to-Digital Converter (ADC) channels
  • 4 SPI interfaces
  • 3 UART interfaces(串口)
  • 2 I2C interfaces
  • 16 PWM output channels
  • 2 Digital-to-Analog Converters (DAC)
  • 2 I2S interfaces
  • 10 Capacitive sensing GPIOs(电容式触摸)

ADC(模拟到数字转换器)和DAC(数字到模拟转换器)特征被分配到特定的静态引脚。然而,您可以决定哪些引脚是UART, I2C, SPI, PWM等-您只需要在代码中分配它们。这是由于ESP32芯片的多路复用特性。

  • 虽然您可以在软件上定义引脚属性,但默认分配的引脚如下图所示(以ESP32 DEVKIT V1 DOIT板36引脚为例-引脚位置可以根据制造商而改变)。
📗ESP32 片上存储信息:

• 448 KB 的 ROM,用于程序启动和内核功能调用.
• 用于数据和指令存储的 520 KB 片上 SRAM.
• RTC 快速存储器,为 8 KB 的 SRAM,可以在 Deep-sleep 模式下 RTC 启动时用于数据存储以及被主CPU 访问.
• RTC 慢速存储器,为 8 KB 的 SRAM,可以在 Deep-sleep 模式下被协处理器访问.
• 1 Kbit 的 eFuse,其中 256 bit 为系统专用(MAC 地址和芯片设置); 其余 768 bit 保留给用户程序, 这些程序包括 flash 加密和芯片 ID.

参考文档:https://www.espressif.com.cn/sites/default/files/documentation/esp32_datasheet_cn.pdf

✅外部 Flash 和 SRAM
  • ESP32 支持多个外部 QSPI flash 和静态随机存储器 (SRAM)。

ESP32 可通过高速缓存访问外部 QSPI flash 和 SRAM:

• 外部 flash 可以同时映射到 CPU 指令和只读数据空间。外部 flash 最大可支持 16 MB。

当映射到 CPU 指令空间时,一次最多可映射 11 MB + 248 KB。如果一次映射超过 3 MB + 248 KB,则 cache 性能可能由于 CPU 的推测性读取而降低。

  • 当映射到只读数据空间时,一次最多可以映射 4 MB。支持 8-bit、16-bit 和 32-bit 读取。

• 外部 SRAM 可映射到 CPU 数据空间。外部 SRAM 最大可支持 8 MB。一次最多可映射 4 MB。支持 8-bit、16-bit 和 32-bit 访问。

🍁64­bit 通用定时器

芯片内置 4 个 64-bit 通用定时器,具有 16-bit 分频器和 64-bit 可自动重载的向上/向下计时器。

定时器特性:
• 16-bit 时钟分频器,分频系数为 2 至 65536
• 64-bit 计时器
• 计时器方向可配置:递增或递减
• 软件控制计数暂停和继续
• 定时器超时自动重载
• 软件控制的即时重载
• 电平触发中断和边沿触发中断

⏰看门狗定时器

芯片中有 3 个看门狗定时器:2 个定时器模块中各有 1 个(称作主看门狗定时器,即 MWDT),RTC 模块中也有 1 个(称作 RTC 看门狗定时器,即 RWDT)。意外的软件或硬件问题会导致应用程序工作失常,而看门狗定时器可以帮助系统从中恢复。看门狗定时器有 4 个阶段。如果当前阶段超过预定时间,但没有喂狗或关闭看门狗定时器,可能引发以下 3 到 4 种动作中的 1 种。这些动作是:中断、CPU 复位、内核复位和系统复位。其中,只有 RWDT 能够触发系统复位,将复位包括 RTC 在内的整个芯片。每个阶段的超时时间长度均可单独设置。
在 flash 启动期间,RWDT 和第一个 MWDT 会自动开启,以便检测和修复启动问题。

  • 看门狗具有以下特性:
    • 4 个阶段,每一阶段都可被单独配置或关闭.
    • 各阶段时间段可被编程
    如阶段超时,会采取 3 到 4 种可能动作中的 1 种(中断、CPU 复位、内核复位和系统复位)
    • 32-bit 超时计数器.
    • 写保护,防止 RWDT 和 MWDT 配置被误写.
    • SPI flash 启动保护;如果在预定时间内,来自 SPI flash 的启动过程没有完成,看门狗会重启整个系统。

📓通用输入/输出接口 (GPIO)

ESP32 共有 34 个 GPIO 管脚,通过配置对应的寄存器,可以为这些管脚分配不同的功能,包括如下几类 GPIO:
– 只有数字功能的 GPIO、带模拟功能的 GPIO、带电容触摸功能的 GPIO 等。带模拟功能的 GPIO 和带电容触摸功能的 GPIO 可以被配置为数字 GPIO。
大部分带数字功能的 GPIO 都可以被配置为内部上拉/下拉,或者被设置为高阻。当被配置为输入时,可通过读
– 取寄存器获取输入值。输入管脚也可以被设置为通过边缘触发或电平触发来产生 CPU 中断。大部分数字 IO 管脚都是双向、非反相和三态的,包括带有三态控制的输入和输出缓冲器。这些管脚可以复用作其他功能,例如SDIO、UART、SPI 等(更多信息请参考附录 IO_MUX)。当芯片低功耗运行时,GPIO 可被设定为保持状态。

在这里插入图片描述

在这里插入图片描述

  • 此外,有些引脚具有特定的特性,可以使它们适合或不适合特定的项目。下表显示了哪些引脚是最好的使用作为输入,输出和哪些你需要谨慎。

绿色突出显示的引脚是可以使用的。用黄色突出显示的是可以使用的,但您需要注意,因为它们可能主要在引导时出现意外行为。红色突出显示的引脚不建议用作输入或输出。

在这里插入图片描述

✨仅作为输入引脚使用(限制使用的引脚)

GPIO 34到39是gpio -引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,

GPIO 34
GPIO 35
GPIO 36
GPIO 39
  • ESP-WROOM-32集成SPI flash

部分ESP32开发板GPIO 6 ~ GPIO 11。但是,这些引脚连接到ESP-WROOM-32芯片上集成的SPI flash上,不建议用于其他用途。所以,不要在你的项目中使用这些引脚。

GPIO 6 (SCK/CLK)
GPIO 7 (SDO/SD0)
GPIO 8 (SDI/SD1)
GPIO 9 (SHD/SD2)
GPIO 10 (SWP/SD3)
GPIO 11 (CSC/CMD)
🚩不建议使用引脚归纳

不建议使用 Strapping引脚 ,SPI flash 引脚 以及仅输入的引脚

  • Strapping管脚:是和芯片复位状态有关的引脚,在芯片的系统复位(上电、RTC 看门狗、欠压、模拟超级看门狗 、晶振时钟毛刺检测)等复位过程中,Strapping 管脚对自己电平采样并存储到锁存器,并一直保持到芯片掉电或关闭.
Strapping 引脚
GPIO 0
GPIO 2
GPIO 4
GPIO 5 (启动时必须为高电平)
GPIO 12 (启动时必须为低电平)
GPIO 15 (启动时必须为高电平)

在硬件上要注意使用外接模块时不能将GPIO12拉高,否则将导致ESP32启动异常。还有一些GPIO在启动或重置时其状态更改为高或者输出PWM信号,在使用时需要注意。

SPI flash 引脚 
GPIO 6 (SCK/CLK)
GPIO 7 (SDO/SD0)
GPIO 8 (SDI/SD1)
GPIO 9 (SHD/SD2)
GPIO 10 (SWP/SD3)
GPIO 11 (CSC/CMD)

🌼电容式触摸GPIO引脚

ESP32 提供了多达 10 个电容式传感 GPIO,能够探测由手指或其他物品直接接触或接近而产生的电容差异。这种设计的低噪声特性和电路的高灵敏度支持使用相对较小的触摸板。也可以使用触摸板阵列以探测更大区域或更多点,也可以检测到当用手指触摸gpio时产生的变化。这些引脚可以很容易地集成到电容垫和取代机械按钮。电容触针也可以用来唤醒沉睡的ESP32。表 11 列出了 10 个电容式传感 GPIO。
在这里插入图片描述

T0 (GPIO 4)
T1 (GPIO 0)
T2 (GPIO 2)
T3 (GPIO 15)
T4 (GPIO 13)
T5 (GPIO 12)
T6 (GPIO 14)
T7 (GPIO 27)
T8 (GPIO 33)
T9 (GPIO 32)

🌻模拟数字转换器(ADC)

ESP32 集成了 12-bit SAR ADC,共支持 18 个模拟通道输入。为了实现更低功耗,ESP32 的 ULP 协处理器也
可以在睡眠方式下测量电压,此时,可通过设置阈值或其他触发方式唤醒 CPU。

通过适当的设置,最多可配置 18 个管脚的 ADC,用于电压模数转换。ADC 特性:
在这里插入图片描述

在这里插入图片描述

ADC1_CH0 (GPIO 36)
ADC1_CH1 (GPIO 37)
ADC1_CH2 (GPIO 38)
ADC1_CH3 (GPIO 39)
ADC1_CH4 (GPIO 32)
ADC1_CH5 (GPIO 33)
ADC1_CH6 (GPIO 34)
ADC1_CH7 (GPIO 35)
ADC2_CH0 (GPIO 4)
ADC2_CH1 (GPIO 0)
ADC2_CH2 (GPIO 2)
ADC2_CH3 (GPIO 15)
ADC2_CH4 (GPIO 13)
ADC2_CH5 (GPIO 12)
ADC2_CH6 (GPIO 14)
ADC2_CH7 (GPIO 27)
ADC2_CH8 (GPIO 25)
ADC2_CH9 (GPIO 26)

注意:使用Wi-Fi时,不能使用ADC2引脚。所以,如果你正在使用Wi-Fi,而你在从ADC2 GPIO获取值时遇到了麻烦,你可以考虑使用ADC1 GPIO。这样你的问题就解决了。

  • ADC输入通道有12位分辨率。这意味着您可以获得从0到4095的模拟读数,其中0对应0V, 4095对应3.3V。您还可以在代码和ADC范围上设置通道的分辨率。

ESP32 ADC引脚没有线性行为。你可能无法区分0和0.1V,或者3.2和3.3V。在使用ADC引脚时,您需要记住这一点。您将得到一个类似于下图所示的行为。
在这里插入图片描述

📖数字-模拟转换器(DAC)

ESP32 有 2 个 8-bit DAC 通道,将 2 路数字信号分别转化为 2 个模拟电压信号输出,两个通道可以独立地工作。DAC 电路由内置电阻串和 1 个缓冲器组成。这 2 个 DAC 可以作为参考电压使用。

DAC1 (GPIO25)
DAC2 (GPIO26)

⛳RTC GPIO功能引脚

  • RTC IO_MUX低功耗IO功能

ESP32支持RTC GPIO。当ESP32处于深度睡眠状态时,可以使用RTC低功耗模式下的gpio触发。当Ultra Low Power (ULP)协处理器运行时,这些RTC gpio可用于将ESP32从深度睡眠中唤醒。以下gpio可以作为外部唤醒源。(PS:测试发现,ESP32在低功耗上面表现并不是很优异)
在这里插入图片描述

RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)

🔰LED PWM控制器

LED 控制器 (LEDC) 主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制。 该控制器有 16 路通道,可以产生独立的波形来驱动 RGB LED 等设备。

LEDC 通道共有两组,分别为 8 路高速通道和 8 路低速通道。高速通道模式在硬件中实现,可以自动且无干扰地改变 PWM 占空比。低速通道模式下,PWM 占空比需要由软件中的驱动器改变。每组通道都可以使用不同的时钟源。
LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实现亮度和颜色渐变。

在这里插入图片描述

ESP32 LED PWM控制器有16个独立的通道,可通过配置产生不同属性的PWM信号。占空比的精度可以配置到16位分辨率,所有可以作为输出的引脚都可以用作PWM引脚(GPIOs 34到39不能产生PWM)。
在这里插入图片描述

📢ESP32C3型号特别注意

LED PWM 控制器只有6路独立的数字波形。(0-5通道可选择),占空比精确度可达 18 位,精度和通用型号高出2位。
在这里插入图片描述

  • 设置PWM信号,需要在代码中定义以下参数:
int freq = 5000;//频率
int ledChannel = 0;//通道0
int resolution = 8;//分辨率,1到16位之间的分辨率
ledcSetup(ledChannel, freq, resolution);.

🎞脉冲宽度调制 (PWM)

注意区分上面的LED PWM

PWM 控制器可以用于驱动数字马达和智能灯。该控制器包含 PWM 定时器、PWM 执行器和 1 个专用的捕捉子模组。定时器可以同步定时,也可以独立运行。每个 PWM 执行器为 1 个 PWM 通道生成波形。专用的捕捉子模组可以精确捕捉外部定时事件。

🎋I2C

ESP32有两个I2C通道,任何引脚都可以设置为SDA或SCL。在Arduino IDE下使用ESP32时,默认I2C引脚为:

GPIO 21 (SDA)
GPIO 22 (SCL)
  • 如果你想在使用连线库时使用其他引脚,你只需要调用:
Wire.begin(SDA, SCL);

🌴I2S(高速数位音讯传输标准协议)

在ESP32引脚上实际是标记为 DAC1 (GPIO 25)和 DAC2(GPIO 26

🌾SPI

ESP32 集成了4个SPI外设。SPI0SPI1在内部用于访问ESP32所连接的闪存。两个控制器共享相同的SPI总线信号,并且有一个仲裁器来确定哪个可以访问该总线。在SPI1总线上使用SPI Master驱动程序时有很多限制,请参阅《在SPI1总线上使用SPI Master驱动程序的注意事项》。


SPI2SPI3是通用SPI控制器,有时分别称为HSPIVSPI。它们向用户开放。SPI2和SPI3具有独立的总线信号,分别具有相同的名称。每条总线具有3条CS线,最多能控制6个SPI从设备。
所有 SPI 接口都可以连接外部 flash/SRAM 和 LCD。每一个 SPI 控制器都可连接到 DMA 通道。

  • SPI0是专用于Flash的缓存,ESP32将连接的SPI Flash设备映射到内存中。
  • SPI1和SPI0 使用相同的硬件线,SPI1用于写入flash芯片。
  • HSPI和VSPI可以任意使用。SPI1、HSPI和VSPI共有三条片选线,因此作为SPI主机允许ESP32 至多驱动三个SPI设备。

在这里插入图片描述

需要注意的是,HSPI和VSPI并不是认为的high-speed SPI 和Very High-speed SPI,这是SPI和HSPI、VSPI是一样的,只不过是换个名字用于区分,SPI相当于SPI0或SPI1,HSPI相当于SPI2,VSPI相当于SPI3。

默认情况下,SPI的引脚映射为:

SPIMOSIMISOCLKCS
VSPIGPIO 23GPIO 19GPIO18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 15

如果需要IOMUX提高SPI速率
在这里插入图片描述

🌷中断引脚

所有的引脚都可以作为中断引脚使用。

  • ESP32 Arduino 有以下四种触发方式:
 LOW              低电平触发
 CHANGE           电平变化
 RISING           上升沿触发
 FALLING          下降沿触发
 HIGH             高电平触发 

  • 配置中断

在定义中断函数后,需要在 setup 函数配置中断函数.

// interrupt=中断通道编号,function=中断函数,mode=中断触发模式
attachInterrupt(interrupt, function, mode); 

// pin=中断引脚,function=中断函数,mode=中断触发模式
attachInterrupt(pin, function, mode);

如果在程序运行过程不需要使用外部中断了,可以用中断分离函数来取消这一中断设置:

detachInterrupt(interrupt); 
detachInterrupt(Pin);

🌺启动时的强制引脚

GPIO 0
GPIO 2
GPIO 4
GPIO 5 (must be HIGH during boot)
GPIO 12 (must be LOW during boot)
GPIO 15 (must be HIGH during boot)

这些是用来使ESP32进入引导加载程序或闪烁模式。在大多数内置USB/Serial的开发板上,你不需要担心这些引脚的状态。单板将引脚置于正确的闪光或启动模式状态。更多关于ESP32启动模式选择的信息可以在这里找到。

然而,如果你有外设连接到这些引脚,你可能在尝试上传新代码、用新固件刷新ESP32或重置单板时遇到麻烦。如果有外设连接在捆绑引脚上,导致上传代码或ESP32闪烁出现问题,可能是这些外设导致ESP32无法进入正确模式。请阅读引导模式选择文档,以指导您找到正确的方向。在复位、闪烁或启动后,这些引脚按预期工作。

  • 在启动时,引脚为高电平

一些gpio在启动或复位时改变其状态为HIGH或输出PWM信号。这意味着如果你有输出连接到这些gpio,你可能会在ESP32重置或启动时得到意想不到的结果。

GPIO 1
GPIO 3
GPIO 5
GPIO 6 to GPIO 11 (connected to the ESP32 integrated SPI flash memory – not recommended to use).
GPIO 14
GPIO 15
  • 使能(EN)引脚是3.3V稳压器的使能引脚。它是被拉上来的,所以连接到地面,使3.3V稳压器失效。例如,您可以使用连接到按钮的引脚来重启ESP32。

🧲内置霍尔传感器

ESP32 集成的霍尔传感器是基于空穴 (N-carrier) 电阻设计的。当芯片置于电磁场中时,霍尔传感器会在电阻上横向产生一个小电压,这个小电压可由 ADC 直接测量。

🔗RTC 和低功耗管理

ESP32 采用了先进的电源管理技术,可以在不同的功耗模式之间切换。
• 功耗模式
– Active 模式:芯片射频处于工作状态。芯片可以接收、发射和侦听信号。
– Modem­sleep 模式:CPU 可运行,时钟可被配置。Wi-Fi/蓝牙基带和射频关闭。
– Light­sleep 模式:CPU 暂停运行。RTC 存储器和外设以及 ULP 协处理器运行。任何唤醒事件
(MAC、主机、RTC 定时器或外部中断)都会唤醒芯片。
– Deep­sleep 模式:CPU 和大部分外设都会掉电,只有 RTC 存储器和 RTC 外设处于工作状态。
Wi-Fi 和蓝牙连接数据存储在 RTC 中。ULP 协处理器可以工作。
– Hibernation 模式:内置的 8 MHz 振荡器和 ULP 协处理器均被禁用。RTC 内存恢复电源被切断。只
有 1 个位于低速时钟上的 RTC 时钟定时器和某些 RTC GPIO 在工作。RTC 时钟定时器或 RTC GPIO可以将芯片从 Hibernation 模式中唤醒。
设备在不同的功耗模式下有不同的电流消耗,详情请见下表。
在这里插入图片描述
在这里插入图片描述

  • 65
    点赞
  • 509
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值