简介
ESP32-S3 芯片中有三个 UART 控制器可供使用,并且兼容不同的 UART 设备。此外,UART还可以用作红外数据交换(IrDA)或 RS485 调制解调器。三个 UART 控制器分别有一组功能相同的寄存器,分别为 UART0、UART1、UART2。
SP32芯片有三个UART控制器(UART0, UART1和UART2),其中UART0(GPIO3用于U0RXD,GPIO1用于U0TXD)用作下载、调试串口,引脚不可改变;
UART1和UART2的引脚是可以重新定义的。UART1的默认引脚是GPIO9(UART1_TXD)和GPIO10(UART1_RXD),而UART2的默认引脚是GPIO16(UART2_TXD)和GPIO17(UART2_RXD),UART1默认引脚是GPIO9用作U1RXD,GPIO10用作U1TXD,但是这两个引脚也是用于外接flash的,因此在使用UART1的时候需要设置其他引脚;
接口
配置
调用函数uart_param_config()
设置通信引脚
ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2, 4, 5, 18, 19));
驱动程序安装
引脚设置完毕,通过调用uart_driver_install()
Tx缓冲区的大小
Rx缓冲区的大小
事件队列句柄和大小
用于分配中断的标志
// 设置带有事件队列的UART缓冲IO。
const int uart_buffer_size = (1024 * 2);
QueueHandle_t uart_queue;
// 在此使用事件队列安装UART驱动程序
ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2, uart_buffer_size, \
uart_buffer_size, 10, &uart_queue, 0));
运行UART通信
串行通信由每个UART控制器的有限状态机(FSM)控制。
发送数据的过程包括以下步骤:
将数据写入Tx FIFO缓冲器中。
FSM将数据序列化。
FSM将数据发送出去。
接收数据的过程是类似的,但步骤是相反的:
FSM处理一个输入的串行流并进行并行处理。
FSM将数据写入Rx FIFO缓冲器中。
从Rx FIFO缓冲区读取数据。
因此,应用程序将被限制在使用uart_write_bytes()和uart_read_bytes()分别从各自的缓冲区写入和读取数据,FSM将完成其他工作
发送
在准备好传输的数据后,调用函数uart_write_bytes(),并将数据缓冲区的地址和数据长度传给它。该函数将把数据复制到Tx环形缓冲区(立即或在有足够空间后),然后退出。当Tx FIFO缓冲区有空闲空间时,一个中断服务例程(ISR)在后台将数据从Tx环形缓冲区移到Tx FIFO缓冲区。下面的代码演示了这个函数的使用。
// 写数据到UART。
c

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



