查看: 917|回复: 0

[经验] 深度刨析:UART协议帧格式干货内容

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-8-11 09:45:18 | 显示全部楼层 |阅读模式
    分享到:
    看下面这个图,大家已经知道今天的主角是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数据帧格式
    如果再发其他数据,再依次循环这个过程即可。
    UART是异步传输,以1个字符为传输单位,传输2个字符之间的时间间隔,比如传输0X33后再传输0X35,这两者时间间隔是未知的。
    但是同一字符内相邻位间的时间间隔是确定的,比如0X33低两位的1和1之间的时间间隔是确定的,这涉及到UART传输速率的概念—— 波特率。
    波特率的单位是bps,全称是bit per second,意为每秒钟传输的bit数量。
    两个串口之间是如何发送和接受数据呢?
    首先,UART1以9600波特率发送0X33,先在数据线上放1个104us脉宽的低电平(起始位),然后是连续2个104us脉宽的高电平(2bit逻辑1),依次类推。
    其次,UART2以9600波特率接收0X33,通过数这些数据的脉宽,来确认数据。
    为了确保数据传输的正确性,减少误差,一般UART1和UART2之间的波特率差别小于10%,一次最多只能传输1个字节(8bit),也有效减小了累计误差。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 17:52 , Processed in 0.121435 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.