实验简介
本设计是直接在图灵哥ESP32S3探索板上完成的,板子集成度很丰富,因此我们就不用再外接任何设备了,非常方便。本实验实现开发板与PC上位机的通信,实现接收与发送。
开发平台简介
ESP32S3是一款高性能、低功耗的Wi-Fi和蓝牙双模芯片,其串口资源丰富,非常适合用于物联网、智能家居等领域。ESP32S3拥有三个UART(通用异步收发传输器)接口,分别为UART0、UART1和UART2。
以下是ESP32S3串口资源和使用配置的简介:
- UART0:主要用于日志打印和程序下载,支持最高2Mbps的波特率。UART0默认与ESP32S3的USB-to-UART桥接器连接,方便用户进行调试和通信;
- UART1:可以作为通用串口使用,支持最高5Mbps的波特率。UART1可用于与其他设备进行通信,如传感器、蓝牙模块等;
- UART2:同样可以作为通用串口使用,支持最高5Mbps的波特率。UART2可用于扩展ESP32S3的通信接口,实现与其他设备的互联。
使用配置如下:
- 初始化串口:在代码中配置串口的波特率、数据位、停止位和校验位等参数;
- 配置GPIO:将串口的TX(发送)和RX(接收)引脚映射到ESP32S3的GPIO上;
- 开启串口中断:设置串口中断优先级,编写中断服务函数,用于处理接收到的数据;
- 发送和接收数据:通过串口发送和接收数据,实现与其他设备的通信;
ESP32S3的串口资源丰富,使用配置简单,而图灵哥探索板为开发者提供了便捷的开发平台,助力物联网和智能家居项目的开发,本次实验我们用到UART0。
硬件资源介绍
- LED灯 - IO1
- 串口0 U0TX/U0RX连接在板载USB转串口芯片CH340上面
注意事项:
- 电脑端串口调试助手波特率调节到与本程序相同的115200bps;
- 可使用Arduino自带的串口监视器或其它串口调试助手;
- 请用USB线连接在USB_UART,找到USB转串口后测试本例程;
- 排针P4的U0TX/U0RX必须通过跳线帽连接在RXD/TXD上;
实验代码
uart.ino
/**
******************************************************************************
* @file 04_uart.ino
* @author charles
* @version V1.0
* @date 2024-09-20
* @brief 串口实验
******************************************************************************
*
* 实验平台:图灵哥 TRGESP32S3核心板
* 实验目的:学习UART外设的使用,进行串口数据接收和发送
*
* 硬件资源及引脚分配:
* 1, UART0 --> ESP32S3 IO
* TXD0 --> IO43
* RXD0 --> IO44
*
* 实验现象:
* 1, 打开串口调试助手,选择好串口、波特率115200等参数,按下RST键,打印芯片参数;在串口助手上发送数据,ESP32S3串口接收后回传到串口助手显示
*
*
******************************************************************************
*/
#include "uart.h"
uint32_t chip_id = 0; /* 芯片ID */
/**
* @brief 当程序开始执行时,将调用setup()函数,通常用来初始化变量、函数等
* @param 无
* @retval 无
*/
void setup()
{
delay(1000);
uart_init(0, 115200); /* 串口0初始化 */
for(int i = 0; i < 17; i = i + 8)
{
chip_id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i; /* 获取ESP32芯片MAC地址(6Byte),该地址也可作为芯片ID */
}
Serial.printf("ESP32 Chip model = %s Rev %d \n", ESP.getChipModel(), ESP.getChipRevision()); /* 打印芯片类型和芯片版本号 */
Serial.printf("This chip has %d cores \n", ESP.getChipCores()); /* 打印芯片的内核数 */
Serial.print("Chip ID: "); Serial.println(chip_id); /* 打印芯片ID */
Serial.printf("CpuFreqMHz: %d MHz\n", ESP.getCpuFreqMHz()); /* 打印芯片主频 */
Serial.printf("SdkVersion: %s \n", ESP.getSdkVersion()); /* 打印SDK版本 */
}
/**
* @brief 循环函数,通常放程序的主体或者需要不断刷新的语句
* @param 无
* @retval 无
*/
void loop()
{
Serial.println("Waitting for Serial Data \n"); /* 等待串口助手发过来的串口数据 */
while (Serial.available() > 0) /* 当串口0接收到数据 */
{
Serial.println("Serial Data Available..."); /* 通过串口监视器通知用户 */
String serial_data; /* 存放接收到的串口数据 */
int c = Serial.read(); /* 读取一字节串口数据 */
while (c >= 0)
{
serial_data += (char)c; /* 存放到serial_data变量中 */
c = Serial.read(); /* 继续读取一字节串口数据 */
}
// serial_data = Serial.readString(); /* 将接收到的信息使用readString()存储于serial_data变量(跟前面4行代码具有同样效果) */
Serial.print("Received Serial Data: "); /* 然后通过串口监视器输出serial_data变量内容 */
Serial.println(serial_data); /* 以便查看serial_data变量的信息 */
}
delay(1000);
}
uart.cpp
/**
****************************************************************************************************
* @file uart.cpp
* @author charles
* @version V1.0
* @date 2024-09-20
* @brief UART 驱动代码
****************************************************************************************************
* @attention
*
* 实验平台:图灵哥 TRGESP32S3核心板
****************************************************************************************************
*/
#include "uart.h"
/**
* @brief 初始化UART
* @param uartx:串口x
* @param baud:波特率
* @retval 无
*/
void uart_init(uint8_t uartx, uint32_t baud)
{
if (uartx == 0)
{
Serial.begin(baud); /* 串口0初始化 */
}
else if (uartx == 1)
{
Serial1.begin(baud, SERIAL_8N1, RXD_PIN, TXD_PIN); /* 串口1初始化 */
}
else if (uartx == 2)
{
Serial2.begin(baud, SERIAL_8N1, RXD_PIN, TXD_PIN); /* 串口2初始化 */
}
}
uart.h
/**
****************************************************************************************************
* @file uart.h
* @author charles
* @version V1.0
* @date 2024-09-20
* @brief UART 驱动代码
****************************************************************************************************
* @attention
*
* 实验平台:图灵哥 TRGESP32S3核心板
*
****************************************************************************************************
*/
#ifndef __UART_H
#define __UART_H
#include "Arduino.h"
/* 引脚定义 */
/* 串口0默认已经使用了固定IO(GPIO19为U0TXD,GPIO20为U0RXD)
*/
#define TXD_PIN 19
#define RXD_PIN 20
/* 函数声明 */
void uart_init(uint8_t uartx, uint32_t baud); /* uart初始化函数 */
#endif
实验现象
打印芯片参数,打开串口调试助手,选择好串口,波特率115200等参数,在串口助手上发送数据,ESP32S3串口接收后回传到串口助手显示
注意事项:连接板子上的UART口,波特率选择115200
实验结果
实验到此结束,感谢观看。