USART/UART串口协议

1、 串行通信和并行通信

  按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式,它们的通讯传输对比说明见下图:
在这里插入图片描述
  很明显,因为一次可传输多个数据位的数据 ,在数据传输速率相同的情况下,并行通讯传输的数据量要大得多,而串行通讯则可以节省数据线的硬件成本(特别是远距离时)以及 PCB 的布线面积,串行通讯与并行通讯的特性对比见下表:
在这里插入图片描述不过不过由于并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能,现在随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。

2、 全双工、半双工及单工通讯

  根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯,它们主要以信道的方向来区分,见下图:

在这里插入图片描述在这里插入图片描述

3、 同步通讯与异步通讯

  根据通讯的数据同步方式,又分为同步和异步两种,可以根据通讯过程中是否有使用到时钟信号进行简单的区分。
  在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。

在这里插入图片描述   在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,见下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步 。

在这里插入图片描述
  在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。

4、 通讯速率

  衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元。而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。如常见的通讯传输中,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有 0V、2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率,虽然严格来说没什么错误,但希望您能了解它们的区别。

5、串口通讯协议简介

  串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。  
  串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
  在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设; STM32 标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
  串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为 CPU 和串行设备间的编码转换器。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。典型地,串口用于 ASCII 码字符的传输。通信使用3根线完成:(1)地线,(2)发送数据线,(3)接收数据线。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:波特率是一个衡量通信速度的参数,它表示每秒钟传送的 bit 的个数;数据位是衡量通信中实际数据位的参数,当计算机发送一个信息包,标准的值是 5,6,7 和 8 位。如何设置取决于你的需求;停止位用于表示单个包的最后一位,典型的值为 1,1.5和 2 位,停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会;奇偶校验位是串口通信中一种简单的检错方式,有四种检错方式——偶、奇、高和低,也可以没有校验位。

5.1、物理层

  串口通讯的物理层有很多标准及变种,我们主要讲解 RS-232 、RS485、RS422标准 , 这些标准主要规定了信号的用途、通讯接口以及信号的电平标准。

(1)、通讯接口

在这里插入图片描述
  
  在最初的应用中, RS-232 串口标准常用于计算机、路由与调制调解器(MODEN,俗称“猫” )之间的通讯 ,在这种通讯系统中,设备被分为数据终端设备 DTE(计算机、路由)和数据通讯设备 DCE(调制调解器)。我们以这种通讯模型讲解它们的信号线连接方式及各个信号线的作用。
  在旧式的台式计算机中一般会有 RS-232 标准的 COM 口(也称 DB9 接口), 其中接线口以针式引出信号线的称为公头,以孔式引出信号线的称为母头。在计算机中一般引出公头接口,而在调制调解器设备中引出的一般为母头,使用上图中的串口线即可把它与计算机连接起来。通讯时,串口线中传输的信号就是使用前面讲解的 RS-232 标准调制的。

  在这种应用场合下, DB9 接口中的公头及母头的各个引脚的标准信号线接法见下图:
在这里插入图片描述在这里插入图片描述
  上表中的是计算机端的 DB9 公头标准接法,在目前的其它工业控制使用的串口通讯中,一般只使用 RXD、 TXD 以及 GND 三条信号线,直接传输数据信号。而 RTS、 CTS、 DSR、 DTR RI及 DCD 信号都被裁剪掉了,如果您在前面被这些信号弄得晕头转向,那就直接忽略它们吧。

(2)、电平标准

  根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准、 RS-232 标准、RS485标准、RS422标准。
 在这里插入图片描述
  USART/UART只是对信号的时序进行了定义,而未定义接口的电气特性;USART/UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异, 所以不同的处理器使用USART/UART通信时一般不能直接相连;USART/UART没有规定不同器件连接时连接器的标准, 所以不同器件之间通过UART通信时连接很不方便。
  RS-232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑0,将低到-3V的信号作为逻辑1。所以有时可以看到RS-232的逻辑1:-15V~-3V, 逻辑0:3V~-15V,这两种说法都没有问题。
  RS485电平和RS422电平由于两者均采用差分传输(平衡传输)的方式,所以它们的电平方式,一般有A、B两个引脚。发送端AB间的电压差:+2V~+6V 逻辑1,-2V~-6V 逻辑0。接收端AB间的电压差:大于 +200mV 逻辑1,小于 -200mV 逻辑0。
  RS232、RS485、RS422的区别如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/35a07437c1234fd18e8542a8514215a4.png在这里插入图片描述

  RS485传输距离补充:RS485的传输速率与传输距离成反比,在100Kb/s速率下,才能达到最大传输距离。请注意,实际的传输距离和速率可能还会受到其它因素的影响,如电缆质量、环境干扰等。因此,如果你需要在1200米的距离上实现可靠的通信,可以考虑降低传输速率,例如使用较低的波特率(如9600)。
  RS-422传输距离补充:平衡双绞线的长度和传输距离成反比,在100Kb/s速率下,才能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所获得的最大传输速率仅为1Mb/s。

5.2、协议层

串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见下图:在这里插入图片描述

在这里插入图片描述

(1)、波特率

  这里主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码, 图 20-6 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、 9600、 115200 等。

(2)、 通讯的起始和停止信号

  串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。

(3)、有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。

(4)、 数据校验

  在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity),它们介绍如下:
  奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。
  偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧: 11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
  0 校验是不管有效数据中的内容是什么,校验位总为“0”, 1 校验是校验位总为“1”。
  在无校验的情况下,数据包中不包含校验位。

6、USART/UART,RS232,RS485,RS422应用电路

6.1、USART/UART应用电路

在这里插入图片描述
  芯片1与芯片2之所以直接连接,是因为它们的电平标准兼容,如果两个芯片的电平标准不兼容,中间可能要加连接器或者连接电路。

6.2、RS232应用电路

  基础的设计可以参考芯片手册中提供的参考电路,因为这个是厂家经过大量的试验所得出的,有问题可以追溯,我们先来看一下芯片手册中的设计。在这里插入图片描述
  但是出于对性能的考虑,我们需要增加一些保护电路及抗干扰电路,最后就成为一个完整的成品电路。在这里插入图片描述
  涉及到TVS管的选型,通过查阅芯片手册输出电压的典型值是±5.4V,最大值 ±13.2V,而所选期间SMBJ8.0CA峰值反向工作电压为 8V,最大钳位电压为 13.6V。(要想达到最大钳位电压,首先要达到脉冲峰值电流,条件比较苛刻,所以0.4V的误差综合考虑是可以接受的)

6.3、RS485应用电路

  SP3485 芯片是一款非常经典的+3.3V低功耗半双工RS485收发器,SP3485 芯片的引脚图如下所示:
在这里插入图片描述  RS485 电路图----普通收发,RS485 电路图如下图所示:
在这里插入图片描述
  RS485 电路图----自动收发,RS485 电路图如下图所示:
在这里插入图片描述
这时候要注意,要保持三极管工作在饱和或者截止状态(开关)。
   485电路在设计时,要注意3个点:
   ① 485总线是否需要在A和B两条线上加上下拉电阻,以及加多大的电阻合适?
  首先,我们需要了解485总线的工作原理和信号特性。根据RS-485标准,485总线是通过两条线(A和B)来传输差分信号的,根据两条线之间的电压差来判断的当前数据位是0还是1。485传输时的数据有三种状态:
  1.当A和B之间的电压差VAB=UA-UB大于+200mV时,485收发器输出的逻辑为1;
  2.当A和B之间的电压差VAB=UA-UB小于-200mV时,485收发器输出逻辑为0;
  3.当A和B之间的电压差VAB=UA-UB在-200mV~+200mV之间时,485收发器可能输出高电平也可能输 出低电平,是一个不确定的状态。
  在正常情况下,我们希望接收器收到的数据只能是0或1,对于不确定的状态是不能出现在485总线上的。那么,什么情况下会出现不确定的状态呢?主要有以下两种情况:
  1.当485总线处于空闲状态时,所有的485收发器都处于接收状态,没有任何一个收发器在驱动总线时。此时,由于没有任何信号源在总线上产生差分电压,A和B两条线上的电压基本相等,也就是说,差分电压基本为0。
  2.当485总线处于开路状态时,也就是说,某个485收发器与总线断开连接时。此时,由于断开连接的收发器不再对总线产生影响,其余收发器之间的差分电压也基本为0。
  当485驱动器输出不足以使A、B产生绝对值大于200mV压差时,此时485总线信号状态已经不能反映驱动器状态,接收器也无法识别正确信号。
  当485总线出现不确定的状态时,会导致通信错误或失效。例如,如果某个485收发器在不确定状态下认为收到数据0信号,向串口输出低电平,那么对于UART通信来说,这就相当于一个起始位(Start Bit),会引起误判或误码;如果某个485收发器在不确定状态下输出高低电平交替变化,那么对于UART通信来说,就会干扰正常数据,导致UART接收器收到异常数据。
  为了防止485总线出现不确定的状态,我们根据这两种异常分析,导致这两种异常的原因都是当收发器处于接收状态时,AB线上无法保持正常电压差。要保持空闲或断线的状态下也能有正确的压差,我们需要在A和B两条线上加上下拉电阻(通常A接上拉电阻,B接下拉电阻),以保证总线在空闲或开路状态下有一个固定的差分电压。

  首先我们来看一下只有两个节点的RS485网络,如下图所示:
在这里插入图片描述
  在上图的两个节点的网络中,我们规定两端都有终端电阻,两个节点所采用的收发器的输入电阻相同,在总线中只有一个节点配置有上拉下拉电阻。我们根据电路中流入流出同一节点的电流是相同的原理,可以得到如下的两个等式:在这里插入图片描述在我们  设计RS485总线电路时,如果添加有上拉和下拉电阻,我们一般会选择相同的阻值,我们记为R。那么我们根据上面两个等式可以推导出下的算式:在这里插入图片描述
  有了这个式子我们可以计算出上拉下拉电阻的大小。因为我们加上拉下拉电阻的目的就是保证总线A端和B端的电压差能够符合不小于200mA的要求。所以我们以总线A、B的电压差200mA来计算就可以得到上拉下拉电阻的值。
  上面我们推导了两个节点的计算公式,但两个节点只是最简单的情况,而总线上往往存在多个节点。所以接下来我们来讨论总线上存在n个节点,总线两端存在终端电阻,每一个节点都拥有相同的输入电阻,只有主节点存在上拉下拉电阻,如下图所示:
在这里插入图片描述  我们根据前面的推导过程可知,不同的只是因为增加节点而增加的输入电阻,所以我们根据上述电路可以推导出如下的公式:在这里插入图片描述
  这一公式与两个节点的公式相比仅仅只是输入电阻部分并联引起的变化。同样的,我们可以依据总线A端和B端的电压差不小于200mA的要求来计算上拉下拉电阻的阻值。这样我们就可以将这个公式简化为:(批注:符合RS-485标准的驱动器能够提供不小于1.5V的差分输出(在54Ω负载下),符合RS-485标准的接收器能检测小到200mV的差分信号输入。 即便是在线缆和连接器严重降级的情况下,这两个值仍能为高可靠性的数据传输提供充足的余量。)
在这里插入图片描述
  我们虽然推导了总线上有多个节点的计算公式,但我们只考虑了一个节点拥有上拉下拉电阻的情况。实际应用中,可能存在总线上有多个节点存在上拉下拉电阻的情况,所以我们来讨论一下所有节点均存在上拉下拉电阻的极限情况,如下图所示:在这里插入图片描述
  从上图,我们不难看出与前一种多节点通讯的区别只是上拉下拉电阻的数量出现了变化。为了简化推导过程,我们同样假设每个节点拥有相同的上拉下拉电阻,以及同样的上拉电源和地。采用相同的电路原理我们可得到如下的计算公式:在这里插入图片描述
  在这个公式中,m为带上下拉电阻的节点数量,n为节点数量。总线A端和B端的差值我们定义为最小的200mA,这样我们就可以将这个公式简化为:在这里插入图片描述
  有了这个公式就可以根据实际的节点数量来确定上下拉电阻的值。
  然而根据这个公式计算出来的结果仅仅只是一个理想值,在实际使用中上下拉电阻一般都是在节点内部确定了的。不同的节点设备,其内部的上下拉电阻可能不同,我们需要考量节点的数量来考量这个电阻的值。要确定上下拉电阻的值还需要考虑驱动芯片的带载能力。不能将上下拉电阻设置得很小。
  总之,485总线要在AB线上加上下拉电阻,主要是为了保证总线在空闲或开路状态下有一个固定的差分电压,从而避免不确定状态导致的通信错误或失效。在选择下拉电阻的大小时,需要综合考虑功耗、驱动能力、阻抗匹配等因素,以保证通信的稳定性和可靠性。
   ② RS485推荐使用什么网络
  RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。
在这里插入图片描述
   ③ 为什么要增加120欧的终端电阻
  高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。对于低频信号则不用。在长线信号传输时,一般为了避免信号的反射和回波,需要在接收端接入终端匹配电阻。
  关于信号反射这里做一个形象的比喻,在电子设计中一般习惯假设信号为水波,电信号的反射就好比水波遇到河岸或者一堵墙水波会反弹回去,与原来的水波进行叠加,形成无规律的水波。
  485设备的接收器的输入阻抗为12KΩ,相对传输线的阻抗来说,输入阻抗已经很大了,这时候输入阻抗就相当于一堵墙,水波传输到墙面的时候会发送反射,又会原路返回去。
  既然都是波,我们假设电波和水波一样也有这样的特性,那么就会产生信号反射的情况。如果产生信号反射,那么反射回去的波可能会干扰到后面继续传输的波,也就是会发送波与波的叠加,这要是正好被某一个设备接收到这个叠加信号的话,数据就容易出现错误。
  终端电阻怎么加 ,如下图所示:在这里插入图片描述
什么情况下需要加终端电阻 这里和网上说的有点不一样。
  首先,当485信号受到干扰时可以尝试增加终端电阻,因为终端电阻相当于减小了两线之间的电阻,也就是可以消除一部分干扰,是通讯正常。
  其次,距离超过100米时一般建议增加终端电阻,至于网上说的什么根据波长计算之类的,那个指的是没有外界杂波干扰的情况下,是理想状态,但是理想状态几乎不存在。

6.4、RS422应用电路

  暂时没有使用过这个电路,后续更新

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值