这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 通俗易懂的UART协议帧格式

共3条 1/1 1 跳转至

通俗易懂的UART协议帧格式

高工
2023-08-25 09:05:32     打赏

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


image.png


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


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


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


image.png


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


image.png


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


image.png


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


image.png


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


image.png

▲UART数据帧格式


其中各位的含义如下:


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

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

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

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

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


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


image.png

▲发送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),也有效减小了累计误差。





关键词: UART     协议    

专家
2023-08-25 11:25:53     打赏
2楼

串口通讯也有同步和异步两种方式。同步场合,一样需要提供同步用的时钟信号,根据时钟周期解析数据。这个就有点像IIC中的SCL信号。异步通讯场合,就得完全依靠波特率这个参数了。


院士
2023-08-25 20:59:10     打赏
3楼

学习了,谢谢分享。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]