ESP32S3串口通信实验教程

ESP32S3 一共有三个 UART 通讯接口,设备号从 0~2,即 UART0,UART1,UART2。这三个串口的管脚不 是固定的,是可以重映射到任意的 IO 口的。

ESP32S3 的 BOOT 程序把 UART0 用于程序下载,LOG 输出,我们的第一个实验 hello world 的 LOG 就是从 UART0 输出的。这个实验的 UART1 和 UART2 没有外接 USB 转串口芯片,需要验证这两个串口的时候,需要用到一个USB 转 TLL 的设备。

函数介绍

ESP32S3 的 ESP-IDF 编程指南可以从官网上查询:

ESP-IDF 编程指南 – ESP32 – — ESP-IDF 编程指南 latest 文档

ESP32S3 串口使用的基本步骤:

l 设置通信参数:包括波特率、数据位、停止位等

l IO 口关联:设置 UART 和具体的物理 GPIO 引脚关联

l 驱动器安装:为 UART 驱动程序分配 ESP 32 的资源

l 运行 UART 通信:开始发送/接收数据,接收数据一般是写在任务函数里。

(1) 设置通信参数

设置串口参数结构定义如下: 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_CTS_RTS, //流控位

.rx_flow_ctrl_thresh = UART_HW_FLOWCTRL_DISABLE,//控制模式

};

设置参数的函数定义如下:

        esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_config);   

参数说明:

uart_port_t uart_num:串口号,支持 UART_NUM_0,UART_NUM_1,UART_NUM_2 const uart_config_t *uart_config:要设置的参数

(2) IO 口关联

设置串口和具体的 IO 引脚关联,通过函数 uart_set_pin 实现,函数定义如下:

      esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int rts_io_num, int cts_io_num) 参数说明:

uart_port_t uart_num:串口号,支持 UART_NUM_0,UART_NUM_1,UART_NUM_2 int tx_io_num:串口接收管脚

int rx_io_num:串口发送管脚 int rts_io_num:串口流控脚 int cts_io_num:串口流控脚

如下,表示把串口 1 映射到 IO4 和 IO5 上:

        uart_set_pin(UART_NUM_1, GPIO_NUM_5, GPIO_NUM_4, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);                                                        

(3) 驱动器安装

分配接收发送空间及函数调用参数,使用到函数为 uart_driver_install,这个函数定义如下: esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, QueueHandle_t *uart_queue, int intr_alloc_flags)

参数说明:

uart_port_t uart_num:串口号,支持 UART_NUM_0,UART_NUM_1,UART_NUM_2 int rx_buffer_size:接收缓存大小

int tx_buffer_size:发送缓存大小 int queue_size:队列大小

QueueHandle_t *uart_queue:串口队列指针 int intr_alloc_flags:分配中断标记

(4) UART 通信

串口通信分为两部分:接收和发送。

1  串口数据接收使用函数 uart_read_bytes,一般接收函数是写在任务里,这个函数定义:

                                                                                                                            int uart_read_bytes(uart_port_t uart_num, uint8_t* buf, uint32_t length, TickType_t ticks_to_wait)                                                          

参数说明:

uart_port_t uart_num:串口号,支持 UART_NUM_0

UART_NUM_1,UART_NUM_2 uint8_t* buf:接收数据缓冲地址

uint32_t length:接收缓冲区长度 TickType_t ticks_to_wait:等待时间

2  串口数据发送使用函数 uart_write_bytes,这个函数定义:                                                                                                                     int uart_write_bytes(uart_port_t uart_num, const char* src, size_t size)                                                                   

参数说明:

uart_port_t uart_num:串口号,支持 UART_NUM_0,UART_NUM_1,UART_NUM_2 const char* src:待发送数据

size_t size:发送数据大小

(5) 任务的创建和删除

第 4 点在讲到 UART 通信的时候,说到串口的接收数据要运行在任务里。关于创建任务是使用函数 xTaskCreate 实现,要使用这个函数,首先要包括头文件:task.h。

2 删除任务函数:

        void vTaskDelete( xTaskHandle pxTask );                                                                   

 实验结果

按下开发板的复位键,可以看到串口工具有数据输出,输入到串口工具点发送后,观察串口工具 的输出。

禾木科技自营店 (yuewei.online)

物联沃分享整理
物联沃-IOTWORD物联网 » ESP32S3串口通信实验教程

发表评论