zoukankan      html  css  js  c++  java
  • UART协议总结

    之前一直使用UART作为单片机之间以及和计算机的简单通信,但一直没有研究过该协议的内部原理。今天刚买了一个逻辑分析仪,于是使用该分析仪对UART数据进行分析,以便更好的理解UART协议原理。

    UART协议虽然速率较低,但协议简单,实现起来很便捷。

    首先,需要了解UART协议的几个参数,解释如下:

    波特率:即每秒可以传输的码元个数

    起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。 

    数据位:可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。 

    校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。就比如传输“A”(01000001)为例。 
    1、当为奇数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为1才能满足1的个数为奇数(奇校验)。
    2、当为偶数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为0才能满足1的个数为偶数(偶校验)。 
    此位还可以去除,即不需要奇偶校验位。 

    停止位:它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。

    空闲位:没有数据传输时线路上的电平状态。为逻辑1。 

    传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。

    这里配置以下:波特率115200,数据位8位,停止位1,无校验位

    因为波特率为115200,因此码元宽度为1s/115200=8.68us

    使用逻辑分析仪测的波形图如下:

    上图中每一个白点都代表数据的一位,每8个点构成一组数据。每组数据的前面都有一个低电平位表示起始,数据的末尾都有一个高电平代表数据的结束。采用16进制的显示,可以看出获取的数据分别为“0x30”,“0x65”,"0x6E","0x64","0x0D","0x0A"。将这些数据转换为ASCII字符为:"0","e","n","d"," "," "。

  • 相关阅读:
    Python函数高级
    Python 2和3的区别
    GIL,python全局解释器锁
    Python中的 list
    python中的单例
    新式类和经典类
    整理的排序算法
    Python的双下划方法
    Python 中闭包函数和装饰器
    面向对象,特性之继承
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/8513874.html
Copyright © 2011-2022 走看看