esp32系列(3):GPIO信号传输(以简单GPIO输入输出、ADC、DAC为例)

本文介绍了ESP32 GPIO的基本概念,包括外设输入输出、GPIO交换矩阵、RTCIO_MUX,以及通过代码实现简单GPIO和RTCIO GPIO操作的教程。涵盖了GPIO配置、模式设置、外设映射与驱动,适合初学者理解并实践ESP32的I/O控制。

ESP32学习记录:

  1. esp32系列(1):Hello world, 初识esp32
    搭建VScode下的esp32开发环境,hello esp32。
  2. esp32系列(2):工程结构学习,从新建工程到烧写程序
    熟悉工程的文件结构,各文件的含义,编译流程。以及VScode的具体操作。
  3. esp32系列(3):GPIOGPIO信号传输(以简单GPIO输入输出、ADC、DAC为例)
    学习ESP32 GPIO与外设的几种输入输出方式,通过两个简单的例子学习简单GPIO与RTC GPIO输入输出的代码实现。

1 ESP32 GPIO基本概念

ESP32 芯片有 34 个物理 GPIO pad(GPIO PAD号:0­-19, 21-­23, 25­-27, 32­-39。其中 GPIO 34­-39 仅用作输入管脚,其他的既可以作为输入又可以作为输出管脚。)。每个 pad 都可用作一个通用 IO,或连接一个内部的外设信号。

IO_MUX、RTC IO_MUX 和 GPIO 交换矩阵用于将信号从外设传输至 GPIO pad。这些模块共同组成了芯片的 IO 控
制。

在这里插入图片描述

  1. IO_MUX 选择GPIO pad配置为GPIO(与交换矩阵连接)或者直连(更好的高频数字特性,用于高速信号)
  2. GPIO 交换矩阵 进行【外设输入输出】与【pad信号】之间的全交换。其实就是完pad的输入与输出信号的选择。
  3. RTC IO_MUX 控制GPIO pad的低功耗和模拟功能。

1.1 通过 GPIO 交换矩阵的外设输入

34个GPIO(X: 0-19,21-23,25-27,32-39)
获取
外设输入信号的索引号(Y: 0-18,23-36,39-58,61-90,95-124,140-155,164-181,190-195,198-206)

在这里插入图片描述

重点:把某个外设信号 Y 绑定到某个 GPIO pad X 的配置过程为:

  1. 在 GPIO 交换矩阵中配置外设信号YGPIO_FUNCy_IN_SEL_CFG 寄存器:
    • 设置 GPIO_FUNCy_IN_SEL 字段为要读取的 GPIO pad X 的值。清零其他 GPIO pad 的其他字段。
  2. 在 GPIO 交换矩阵中配置 GPIO pad XGPIO_FUNCx_OUT_SEL_CFG 寄存器、清零 GPIO_ENABLE_DATA[x] 字段:
    • 要强制管脚的输出状态始终由 GPIO_ENABLE_DATA[x] 字段决定,则将 GPIO_FUNCx_OUT_SEL_CFG 寄存器的 GPIO_FUNCx_OEN_SEL 字段位置为 1。
    • GPIO_ENABLE_DATA[x] 字段在 GPIO_ENABLE_REG (GPIOs 0-31) 或 GPIO_ENABLE1_REG (GPIOs 32-39) 中,清零此位可以关闭 GPIO pad 的输出
  3. 配置 IO_MUX 寄存器来选择 GPIO 交换矩阵。配置 GPIO pad X 的 IO_MUX_x_REG 的过程如下:
    • 设置功能字段 (MCU_SEL) 为 GPIO X 的 IO_MUX 功能(所有管脚的 Function 2,数值为 2)。
    • 置位 FUN_IE 使能输入。
    • 置位或清零 FUN_WPU 和 FUN_WPD 位,使能或关闭内部上拉/下拉电阻器。
      说明:
  • 同一个输入 pad 上可以同时绑定多个内部 input_signals。
  • 置位 GPIO_FUNCy_IN_INV_SEL 可以把输入的信号取反。
  • 无需将输入信号绑定到一个 pad 也可以使外设读取恒低或恒高电平的输入值。实现方式为选择特定的
    GPIO_FUNCy_IN_SEL 输入值而不是一个 GPIO 序号:
    • 当 GPIO_FUNCy_IN_SEL 是 0x30 时, input_signal_x 始终为 0。
    • 当 GPIO_FUNCy_IN_SEL 是 0x38 时, input_signal_x 始终为 1。
      例子:把 RMT 外设通道 0 的输入信号 RMT_SIG_IN0_IDX(信号索引号 83)绑定到 GPIO15,请按照以下步骤操作(请注意 GPIO15 也叫做 MTDO 管脚):
  1. 将 GPIO_FUNC83_IN_SEL_CFG 寄存器的 GPIO_FUNC83_IN_SEL 字段设置为 15。
  2. 因为此信号是纯输入信号,置位 GPIO_FUNC15_OUT_SEL_CFG_REG 寄存器中的 GPIO_FUNC15_OEN_SEL 位。
  3. 清零 GPIO_ENABLE_REG 寄存器的 bit 15(GPIO_ENABLE_DATA[15] 字段)。
  4. 配置 IO_MUX_GPIO15 寄存器的 MCU_SEL 字段为 2 (GPIO function),同时置位 FUN_IE(使能输入模式)。
  5. </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChipWeaver

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值