ESP32三路串口代码详解(3)

本文详细介绍了ESP32的UART通讯接口,包括其三个可用的串口(UART0,UART1,UART2),以及如何设置通信参数、关联IO口、安装驱动器和进行UART通信。此外,还提供了串口初始化和数据收发的具体代码示例。

ESP32 一共有三个 UART 通讯接口,设备号从 0~2,即 UART0,UART1,UART2。这三个串口的管脚不 是固定的,是可以重映射到任意的 IO 口的。
ESP32 的 BOOT 程序把 UART0 用于程序下载,LOG 输出,我们的第一个实验 hello world 的 LOG 就是从 UART0 输出的。在 BOOT 程序里,把 UART0 映射到 IO1(RX0)和 IO3(TX0)上,我们板子的硬件上也是 把 IO1 和 IO3 通过拨码开关连接到 CH340G 芯片上的
在这里插入图片描述
下图为我们实验里三个串口的 IO 口映射表
在这里插入图片描述
ESP32 串口使用的基本步骤:
 设置通信参数:包括波特率、数据位、停止位等
 IO 口关联:设置 UART 和具体的物理 GPIO 引脚关联

 驱动器安装:为 UART 驱动程序分配 ESP 32 的资源
 运行 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, co

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bytechip

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值