看下面这个图,大家已经知道今天的主角是 UART,我们通常说的串口UART 包含 TTL 电平和 RS-232 电平两种,嵌入式系统里面,单片机的串口一般都是 TTL 电平。

 

 

今天的内容关于 UART 的帧格式,比较简单,玩过单片机的小伙伴应该都知道。

 

UART 的英文全称是:Universal Asynchronous Receiver/Transmitter,意为通用异步收发传输器

 

UART 因为有两根线数据线 TX 和 RX,可以以全双工的形式进行发送和接收数据,同一时刻,两条链路的发送器和接收器可以同时传输数据。

 

 

区别于全双工的,还有另一种,是半双工,因为只有一根数据线,所以数据传输是这样。

 

 

或者是下面这样,同一时刻,只有一条链路在传输数据。

 

 

除了双工形式,还有一种是半工,只有发送器到接收器这一个链路。

 

 

说完了 UART 的工作模式,下面进入主题——UART 帧格式,也可以称之为 UART 协议,单片机与 PC 之间的通信,为了保证数据通信的可靠性,双方都必须遵从 UART 协议。

 

UART 数据帧格式

 

其中各位的含义如下:

  • 起始位:发送 1 位逻辑 0(低电平),开始传输数据。

  • 数据位:可以是 5~8 位的数据,先发低位,再发高位,一般常见的就是 8 位(1 个字节),其他的如 7 位的 ASCII 码。

  • 校验位:奇偶校验,将数据位加上校验位,1 的位数为偶数(偶校验),1 的位数 4 为奇数(奇校验)。

  • 停止位:停止位是数据传输结束的标志,可以是 1/1.5/2 位的逻辑 1(高电平)。

  • 空闲位:空闲时数据线为高电平状态,代表无数据传输。

 

如果我们传输数据 0X33(00110011),那么对应的波形就是如下这样,因为是 LSB 在前,所以 8 位数据依次是 11001100

 

发送 0X33 数据帧格式

 

如果再发其他数据,再依次循环这个过程即可。

 

UART 是异步传输,以 1 个字符为传输单位,传输 2 个字符之间的时间间隔,比如传输 0X33 后再传输 0X35,这两者时间间隔是未知的。

 

但是同一字符内相邻位间的时间间隔是确定的,比如 0X33 低两位的 1 和 1 之间的时间间隔是确定的,这涉及到 UART 传输速率的概念——波特率。

 

波特率的单位是 bps,全称是 bit per second,意为每秒钟传输的 bit 数量。

 

波特率 9600bps,代表每秒钟传输 bit 的数量为 9600,那么传输 1bit 数据的时间就是 1/9600=104us,波特率 115200bps,代表传输 1bit 数据的时间是 8us。

 

两个串口之间是如何发送和接受数据呢?

 

首先,UART1 以 9600 波特率发送 0X33,先在数据线上放 1 个 104us 脉宽的低电平(起始位),然后是连续 2 个 104us 脉宽的高电平(2bit 逻辑 1),依次类推。

 
其次,UART2 以 9600 波特率接收 0X33,通过数这些数据的脉宽,来确认数据。

 

为了确保数据传输的正确性,减少误差,一般 UART1 和 UART2 之间的波特率差别小于 10%,一次最多只能传输 1 个字节(8bit),也有效减小了累计误差。

 

今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见。