UART (Universal Asynchronous Receiver/Transmitter) 即通用异步接收器/发送器,是一种常用的串行、异步、全双工通信协议,用于在计算机或嵌入式系统中实现数据的异步串行传输。UART在许多设备中得到了广泛的应用,尤其是低速、点对点通信场景。
1.工作原理
UART是一种 异步 串行通信协议,即数据的发送和接收不需要时钟同步信号。其工作流程包括:
- 发送端:将并行数据转换为串行数据,并通过一根数据线逐位传输。(Tx)
- 接收端:将接收到的串行数据转换为并行数据,供上层应用使用。(Rx)
2.通信流程
在UART中,传输模式为数据包形式。连接发送器和接收器的机制包括串行数据包的创建和物理硬件线路的控制。数据包由起始位、数据帧、奇偶校验位和停止位组成。数据包格式如下图:
- 数据传输:数据从发送端逐位传输到接收端。每一位数据在传输过程中都会先被发送端按一定的速率进行编码(通常是8位一组),接收端再进行解码。
- 开始位:在数据传输的开始,发送端会发送一个 低电平 的开始位,告诉接收端数据开始传输。
- 数据位:数据位通常是8位(5~9位),每个数据位分别表示数据的二进制值。按照低位在前、高位在后的顺序依次发送,每个数据位的持续时间也是一个波特周期。
- 停止位:在数据传输完成后,发送端会发送一个或多个 高电平 的停止位,标志着数据传输的结束,可选择1~2位。
- 校验位:为确保数据传输的正确性,通常会有一个 校验位(可选),它检查接收到的数据是否与发送的数据一致。
从空闲开始一般空闲状态为高电平,起始位发送低电平代表开始,跟着数据位,再到发送停止位,校验位再回到空闲。起始位与空闲状态不同来接受发送信号。
3. UART通信的主要参数
- 波特率 (Baud Rate):表示数据传输的速率,即每秒钟传输的比特数(bps)。常见的波特率有 9600, 115200 等。发送端和接收端必须设置相同的波特率才能正确通信。因为UART为异步通信,不需要外部时钟信号,靠波特率发生器生成时钟,一样的波特率才能区分每一位数据,两边的时钟会存在一点偏差,不大的情况下,发送下一轮数据会清除上一轮数据累计的时间误差。
- 数据位 (Data Bits):指定每个字符的位数,通常为8位(1字节),也可以设置为5、6、7位。
- 停止位 (Stop Bits):表示数据传输结束的标志,通常为1位,也可以为1.5位或2位。
- 校验位 (Parity Bit):用于检测数据传输中的错误,通常有三种模式:
- 无校验 (None):不使用校验位。
- 偶校验 (Even Parity):保证数据位的1的个数为偶数。
- 奇校验 (Odd Parity):保证数据位的1的个数为奇数。
奇偶校验是一种在数据通信中使用的错误检测方法,其中在数据中增加一个额外的比特,称为校验位。校验位的目的是使数据位的总数(包括校验位)中的"1"的个数是奇数或偶数,从而使特定的校验条件成立。
有两种主要的奇偶校验:
-
奇校验(Odd Parity):
-
规则: 在奇校验中,校验位被设置为确保数据位中的总“1”数是奇数。如果数据位中的“1”数为偶数,那么校验位被设置为使总数成为奇数,反之亦然。
-
示例: 假设有一个奇校验的系统,数据位为1101,则校验位将被设置为0,以确保总“1”数是奇数(1+1+0+1=3,奇数)。
-
-
偶校验(Even Parity):
-
规则: 在偶校验中,校验位被设置为确保数据位中的总“1”数是偶数。如果数据位中的“1”数为奇数,那么校验位被设置为使总数成为偶数,反之亦然。
-
示例: 假设有一个偶校验的系统,数据位为1101,则校验位将被设置为1,以确保总“1”数是偶数(1+1+0+1=3,奇数,所以校验位设置为1)。
-
- 流控制:用于协调数据发送方和接收方的速率,有硬件流控制(RTS/CTS)和软件流控制(XON/XOFF)。硬件流控制通过RTS、CTS信号控制数据传输;软件流控制用特定字符(如XON、XOFF)通知对方暂停或继续发送数据,防止数据丢失。
4. UART的硬件组成
-
简单双向串口通信有两根通信线(发送端TX和接收端RX)
-
TX与RX要交叉连接
-
当只需单向的数据传输时,可以只接一根通信线当电平标准不一致时,需要加电平转换芯片
TX、RX、GND必接
电平标准
相同电平标准才能互相通信
-
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
-
TTL电平:+3.3V或+5V表示1,0V表示0
-
RS232电平:-3~-15V表示1,+3~+15V表示0
-
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)
5. 优缺点
- 优点:
- 简单易用,硬件实现较为简单。
- 只需要两根信号线:TX(发送)和RX(接收)。
- 广泛支持,几乎所有的嵌入式系统都有UART接口。
- 缺点:
- 传输距离有限,通常适用于短距离通信(如几米内)。
- 速度较低,通常适合低速通信(如9600bps至115200bps)。
- 不支持多设备通信,是一种点对点的通信方式。
6. UART的应用
- 嵌入式系统调试:许多嵌入式开发板通过UART接口与电脑进行调试信息的传输,常用的工具有串口终端软件(如PuTTY、Tera Term等)。
- 传感器与主控通信:在传感器、外设与主控芯片之间进行简单的串行数据传输。
- 微控制器之间的通信:多个微控制器之间的点对点通信,常见于通信模块如GPS模块、蓝牙模块、Wi-Fi模块等。
学习链接:一文搞懂UART通信协议