ESP32引脚入门指南(六):从理论到实践(UART)

ESP32开发板具有UART0、UART1和UART2三个UART接口,支持异步通信(RS232和RS485)和IrDA速率高达5mbps。这些接口提供了丰富的串行通信选项,允许与各种设备进行全双工通信。
在这里插入图片描述

UART接口概述与引脚配置

UART 是一种全双工通信协议,允许数据同时在两个方向上传输。
在ESP32中,
UART0引脚连接到USB到串行转换器,用于烧录和调试。因此,不建议使用UART0引脚作其它用途。UART0的默认引脚是:

  • TX (发送):通常使用GPIO1(UART0_TXD)或GPIO3(UART0_TXD备用)
  • RX (接收):通常使用GPIO3(UART0_RXD)或GPIO1(UART0_RXD备用)

ESP32开发板上,UART1引脚是为集成闪存芯片保留的。并未引出,UART1的默认引脚是:

  • TX (发送):GPIO9(UART1_TXD)
  • RX (接收):GPIO10(UART1_RXD)

UART2是连接到uart设备(如GPS、指纹传感器、距离传感器等)的安全选项。UART2的默认引脚是:

  • TX (发送):GPIO16(UART2_TXD)
  • RX (接收):GPIO17(UART2_RXD)

请注意,UART0的部分功能用于串行下载和调试输出,使用时需谨慎。在初始化UART时,选择未与其他功能冲突的引脚,并确保它们已配置为UART模式。此外,某些开发板可能不会直接引出UART1的GPIO9和GPIO10,因为这些引脚是为集成闪存芯片保留的。

使用ESP32的UART

初始化UART接口涉及以下步骤:

  1. 配置参数:设置波特率、数据位数、停止位数、校验位类型。
  2. 分配引脚:选择GPIO引脚作为TX和RX。
  3. 驱动安装:分配ESP32资源给UART驱动。

应用场景与串口监视器

在Arduino环境下,mySerial.println 会将数据发送到通过指定GPIO连接的设备。要通过电脑上的串口监视器查看这些输出,你需要确保电脑通过USB与ESP32的UART0(通常是默认串口)相连,并且波特率设置与ESP32上配置的UART0匹配。这将允许你通过串口监视器查看Serial.println 的输出。

如果你的开发板支持UART2并引出了相应的GPIO引脚,你可以创建一个针对UART2的HardwareSerial实例,如下所示:

#include <HardwareSerial.h>

HardwareSerial customSerial(2);  // 创建一个名为customSerial的新实例,关联到UART2

void setup() {
  customSerial.begin(9600);  // 初始化UART2,波特率为9600
  Serial.begin(115200);  // 初始化UART0,通常用于与电脑通信
}

void loop() {
  customSerial.println("Hello, UART2!");  // 使用customSerial发送数据
}

在这个例子中,HardwareSerial customSerial(2); 创建了一个新的HardwareSerial对象,它与UART2相关联。begin 方法用于配置波特率,确保在使用customSerial.println时,数据将通过UART2发送,而不是通过默认的Serial对象(即UART0)。

如果你想查看customSerial.println 发送的内容,你需要通过串口转USB适配器将UART2连接到电脑,并使用相应的串口软件(如串口监视器或Putty)以正确的波特率查看输出。请注意,确保你的开发板支持并引出了UART2的GPIO引脚。

在大多数情况下,当你仅使用默认的UART0(通常用于与电脑进行串口通信)时,不需要导入<HardwareSerial.h>库。因为Arduino IDE已经内置了对Serial对象的支持,它是一个预定义的HardwareSerial实例,关联到UART0。这意味着你可以直接使用Serial.begin()Serial.read()Serial.write()Serial.println()等方法,而无需导入任何额外的库。

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32是一款集成了Wi-Fi和蓝牙功能的芯片,它支持多种通信接口,包括UART(通用异步收发器)。 UART是一种常见的串行通信接口,用于在芯片之间传输数据。ESP32具有多个UART端口,可以与外部设备进行串行通信。每个UART口都有自己的引脚用于数据传输和控制信号。 在ESP-IDF开发框架中,可以使用UART驱动程序来配置和控制ESP32UART端口。您可以通过设置波特率、数据位、停止位、奇偶校验等参数来配置UART。然后,您可以使用UART驱动程序的API来发送和接收数据。 以下是一个使用ESP-IDF的UART示例代码,演示如何初始化和使用UART: ```c #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/uart.h" #define UART_NUM UART_NUM_1 #define BUF_SIZE (1024) void uart_task(void *pvParameters) { uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE }; uart_param_config(UART_NUM, &uart_config); uart_set_pin(UART_NUM, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_driver_install(UART_NUM, BUF_SIZE, 0, 0, NULL, 0); uint8_t *data = (uint8_t *) malloc(BUF_SIZE); while (1) { int len = uart_read_bytes(UART_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS); if (len > 0) { uart_write_bytes(UART_NUM, (const char *) data, len); } } free(data); vTaskDelete(NULL); } void app_main() { xTaskCreate(uart_task, "uart_task", 2048, NULL, 10, NULL); } ``` 这段代码创建了一个FreeRTOS任务,该任务初始化了UART并在一个循环中读取数据并将其发送回去。您可以根据自己的需求修改代码中的参数和逻辑。 请注意,以上示例仅供参考,具体的UART配置和使用方法可能因开发环境和需求而异。在您的具体应用中,可能需要根据芯片厂商提供的文档和SDK进行更详细的配置和使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值