UART协议
1.概述
UART:通用异步收发器。它是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
UART工作原理:是将数据的二进制位一位一位的进行传输。
典型的串口通信使用3根线完成,分别是:发送线(TX)、接收线(RX)和地线(GND),通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信,如下图所示:
UART1发送从数据总线(data bus)获取并行数据后,添加起始位、奇偶校验位和停止位,以创建数据包。接着,数据包在Tx引脚上逐位串行输出。
UART2接收从其Rx引脚上逐位读取数据包。然后,将串行数据转换成并行数据,并删除起始位、奇偶校验位和停止位。最后,将并行数据包传输到接收端的数据总线。
UART传输格式:(UART协议规定空闲时,信号线保持高电平) 起始位+数据位+校验位+停止位
(1)起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
(2)数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。
(3)奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
(4)停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
(5)空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
(6)波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。
当两个设备使用UART串口通讯时:
1、必须先约定好传输速率(波特率),发送和接收UART之间的波特率只能相差约10%。
2、必须将发送和接收UART配置为相同的数据包结构。
UART发送逻辑:UART发送FIFO是一个8位宽,16位深度的内存缓冲区。CPU通过APB总线接口写入的数据存储在FIFO中,UART发送逻辑读取发送FIFO中的数据,执行并行到串行转换,控制逻辑输出串行数据流,该串行数据流格式为:起始位、数据位(以LSB开始传输)、奇偶校验位、停止位。发送FIFO可以被禁用,仅当作一个单字节的保持寄存器。
UART接收逻辑:UART接收FIFO是一个12位宽,16位深度的内存缓冲区。当UART控制逻辑检测到有效启动脉冲后,接收逻辑将RX端口的串行比特流转换成并行数据,也执行奇偶校验位和帧错误检查,并将数据和它们的状态一起写入到接收FIFO中,直到被CPU通过APB接口读出。
接收FIFO也可以被禁用,仅当作一个单字节保持寄存器。
寄存器配置:
- 寄存器是用来存储通过APB接口写入或者读取的数据。
- 波特率值通过设置寄存器(UARTIBRD和UARTEBRD)来实现;
- UART数据包格式、FIFO是否使能、中断是否使能等都是通过配置相应寄存器来实现的。