UART定义
UART,即通用异步收发器,是一种串行、异步的通信总线。该总线有两条数据线,可以实现全双工的发送和接收。
- 嵌入式中使用最多的一种协议。
通信基础
-
并行通信
同时发送8位数据(一个字节)。
使用总线数量多,浪费资源;在传输时,线与线之间有干扰。 -
串行通信
由低位到高位依次发送8位数据。 -
单工通信
数据传送方向为单向,只能由发送器发送给接收器。 -
双工通信
数据传送方向为双向,区分半双工、全双工。
半双工为两设备之间能够相互发送和接收,但一次只能一个方向进行(一根总线);
全双工为两设备之间的发送和接收,能够同时进行(两根总线)。 -
波特率
用于描述UART通信的通信速度,单位为bps,每秒传送的bit的数量。
UART帧格式
- 空闲位 规定空闲时必须为高电平。
- 起始位(1位)低电平,表示通信的开始。
- 数据位(5~8位,先发低位、后发高位)通常为一个字节,8位。
- 校验位(可有可无)校验数据的准确性。奇偶校验、和校验。
- 停止位(1、1.5、2位)高电平,表示这次通信的结束。
串口只能一个一个字节发送。
波特率
- 波特率用于对传输数据高低电平个数的识别,例如:
在未规定波特率的情况下,发送的两次数据分别为“01”和“0011”,均为低电平变为高电平,接收器通过波特率的大小来识别发送器发送的是“01”还是“0011”。 - 异步:发送、接收双方的时钟不同步,因此会导致在相同波特率的情况下,发送和接收时的时钟不同,逐渐产生累积误差。
- 串口通信不允许连续发送,只能发送一个字节:为了避免传输时间的累计误差。
- 发送字节数时间计算:
假设传输波特率为9600,传输一个字符的帧格式为10bit,传输一个字符所需的时间为:
t = 10 / 9600 = 1ms
UART控制器
嵌入式处理器中有串口控制器,在使用时只需要对其内部的相关寄存器进行设置。