UART全称universal asynchronous receiver transmitter,翻译过来就是通用异步
收发器。UART的应用场景非常广泛,比如上位机与下位机之间的通信,各种外接模块,比如GPS和蓝牙模块等等。UART作为串行通信,利用一条传输线将数据按bit进行顺序传送,特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。
UART通用异步收发器
UART口指的是一种物理接口形式(硬件)。
UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。
UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置,STM32相关实例:按下按键,通过串口发送数据实例。
UART工作原理:
和其它串口一样,数据按照二进制从低位到高位一位一位的传输,能将要传输的数据在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。例如要传输一个字节的数据10001110,它是从低位0开始,一位一位的传输过去。
在 UART 通信中,两个 UART 直接相互通信。发送端将来自控制设备(如 CPU)的并行数据转换为串行形式,接着将其串行传输到接收端,然后接收端将串行数据转换回并行数据以供接收设备使用。
数据从一个UART的发送引脚(Tx) 流向另一个UART的接收(Rx) 引脚:
UART通讯分类:
单工:UART只用Tx或Rx其中一根线进行通讯,也就是只作接收或发送;
半双工:UART在同一时间,只用作发送或接收;
全双工:UART在发送的同时,也可以接收;
UART波特率:
UART的波特率是指每秒传输的二进制位数(单位bps),比如9600bps,意思就是每秒钟可以传输9600个位(bit)。
例如:设字符传输的速率为120字符/秒,而每1个字符为10位(bit),那么传送的波特率为:10位/字符 * 120 字符/秒 = 1200 /秒 = 1200bps。那么每1位二进制位(bit)的传送时间:
T = 1/1200 = 0.833ms
UART要求发送与接收两个UART的波特率配置相同。如果发送与接收波特率不同,相差很大,接收端采样点跨过多个电平,造成接收丢失,或者造成波特率不匹配,接收失败,如下图:
常见的波特率有9600、115200、128000、256000等。
通讯过程:
UART属于异步传输数据,这意味着没有时钟信号将发送的位输出与接收的位采样同步,也就是发送与接收使用各自的时钟。发送端将开始和停止位添加到传输的数据帧中,通过数据帧中定义的开始位和结束位,接收端知道何时开始读取这些位。
每个数据帧包含 1 个起始位、5 到 9 个数据位(取决于 UART的设置,如果有奇偶校验位是5到8,没有则是5到9)、一个可选的奇偶校验位和 1 个或 2 个停止位:
起始位:UART 数据传输线在不传输数据时通常保持在高电平。要开始发送数据时,发送端UART先在一个时钟周期内将传输线从高电平拉到低电平。当接收端UART 检测到从高到低的电压转换时,它开始以设置好的波特率的频率读取数据帧中的位。
数据:数据帧包含正在传输的实际数据。如果使用奇偶校验位,它可以是 5 位到 8 位。如果不使用奇偶校验位,则数据帧可以是 9 位。在大多数情况下,首先发送的数据是最低有效位。
校验:奇偶校验位是接收端UART 判断数据在传输过程中是否发生变化的一种方式。位会因电磁辐射、不匹配的波特率或长距离数据传输而发生改变。接收端 UART 读取数据帧后,检查数据部分值为1的个数是奇数还是偶数。当奇偶校验位与数据匹配时,UART 知道传输没有错误。
停止:发送端UART 将数据传输线从低电平拉到高电平持续至少两个位的时间来表示整个数据包的传输已经结束。
发送接收过程:
1.UART 从数据总线并行接收数据
2.发送 UART 将起始位、奇偶校验位和停止位添加到数据帧
3.整个数据包从发送 UART 串行发送到接收 UART。接收 UART 以预配置的波特率对数据线进行采样
4.接收 UART 丢弃数据帧中的起始位、奇偶校验位和停止位
5.接收端 UART 将串行数据转换回并行,并将其传输到接收端的数据总线