串口协议概述

串口通信协议最广泛的分为三种,分别是:

  • RS-232

  • RS-422

  • RS-485

更准确的来说,这三种应该被称作“标准”。本节内容,将对这三种标准进行详细的阐述。

标准由来

最基本的串口通信

最最基本的UART协议帧由3个部分构成:

起始位(1bit) + 数据位(8bit) + 终止位(1bit)

当不传输数据的时候,UART数据传输线通常保持高电平电压。当要开始传输数据的时候,发送 TX UART 会将高电平拉到低电平并保持一个周期。当接收 RX UART 检测到从高到低的电平跃迁的时候,便开始以波特率对应的频率,读取数据帧中的位。同理,当结束的时候,TX UART 会将低电平拉高,意味着一个帧串口数据结束。

image.png

面临的问题

由于串口采用的是TTL逻辑,输出的高电平最低为2.4V,输出的低电平最高位0.4V。而一般来说,我们的串口通信使用TTL的高电平位5V(STM32中是3.3V),低电平位0V。这意味着,但凡遇到一些影响,就会造成很大的干扰,导致数据传输不准确。

这种影响,可以理解为有一个静电发生,就会导致某一个低电平很容易的就变成了高电平,从而被误读为高电平,改变了原有的数据内容。

越是远距离的传输,这种不稳定就越显著。那么应该如何解决这个问题呢?

所谓的RS-232, RS385, RS-422就是为了解决这些问题而存在的。

换句话说,这些协议的设定是为了弥补TTL逻辑造成的缺陷,提高数据传输的准确性。

解决问题的方案

这些问题该出现了,那么我们需要如何解决呢?

从源头上来说,是TTL逻辑的高低电平设置,和串口传输的5V和0V过于接近,导致了数据传输的不准确。因此,我们就需要通过硬件层,迫使其对高电平和低电平的分辨能力增强。用术语来说,就是提高噪声容限

RS-232标准

RS(Recommeded Standard),意思就是推荐标准,是美国电子工业联盟制定的标准。232是为接口标准分配的编号。

RS-232接口长这样:

image.png

这种接口被成为DB-9连接器。现在这种东西已经很难再见到了,但是在一些大型的电子设备上仍然可见。我还记得小时候的老式笔记本电脑有这种接口,在更老的台式电脑的主机上也有这种接口。所以,越是老电控,越有可能接触这种接口。

连接器引脚

这种连接器的引脚如下图所示:

image.png

作为一个实际应用的连接器,它的9个引脚有很多不同的功能。而作为我们电控所要了解的,就是它最主要的三个引脚:2号引脚,3号引脚,5号引脚。即TXD, RXD, GND。

这三者,就是我们所熟知的串口所用到的三根线,用来实现全双工通信。

电脑通过这三根线发送出来的信号,都是TTL电平。那么,现在我们就需要一个专门的元器件来将TTL电平转换为232电平。

TTL电平与232电平的相互转化

有一类元器件可以实现这个功能。例如MAX232

image.png

它的功能,就是将TTL电平转换为232电平。

首先,何谓之232电平?

232电平的高电平范围为3V~15V,低电平范围为-3V~-15V。如果能将原来的TTL标准的5V高电平和0V低电平转换到这样的高低电平的区间,那么在轻微的扰动下,将不会对高低电平判断的逻辑造成影响。

image.png

所以,TTL转RS232的逻辑电路,如下原理图所示:

image.png

其逻辑电路图如下图所示:

image.png

在右边的图中,为了现实TTL的IO和232的IO,把引脚的位置稍微换了一下,以更好的绘图。我们可以看见,信号是通过一个400kΩ的电阻+5V拉高,一个5kΩ的电阻+接地拉低的。同时,所有信号都会经过一个非门的转换。这意味着,RS232是负逻辑。

所谓负逻辑,在这里具体是指,当MAX232接收到5,输出的是-12V;当MAX232接收到的是0V,输出的是12V。

简而言之,下面这张图就是它所实现的效果:

image.png

如此这般,RS-232的抗干扰能力增强,传输距离能达到15m。但是速度却只有20k,即19200的波特率。面对更远的距离和更复杂的环境,它依然不满足需求。

RS-485标准

由此,由制定了RS-485标准。和RS-232的原理差不多,它就是在原来串口通信的基础上增加了485转换芯片。485转换芯片可以将原来的串口信号转化为差分信号,差分信号只需要两根线,不需要地线。

image.png

那么,差分信号是如何实现串口信号的转换的呢?高低电平所表示的0和1是如何表示的呢?

高低电平与差分信号的转换

这里假设信号A和信号B,规定当信号A大于信号B的时候为逻辑0,当信号B大于信号A的时候为逻辑1。如此一来,就能够通过差分信号来表示原来的TTL高低电平。

image.png

连接器引脚

image.png

和RS-232略有不同,RS-485的引脚如上图所示。

TTL电平与485电平的相互转换

同理,我们也有MAX485作为TTL电平和485电平的转换器。MAX485芯片如下所示:

image.png

利用MAX485的通信转换电路逻辑图如下图所示:

image.png

可以看见,连线图中,左边的器件就是MAX485的发送器。其中,RO为RX,DI为TX。RE为RO的使能,DE为TX的使能。而A和B,就是差分信号的发送口。

通过逻辑电路图,可以看出RS-485是半双工通信,不能同时收发:

  • 当ENABLE为高电平时,DE为1,发送使能。

  • 当ENABEL为低电平时,RE‘为1,接收使能。

在发送的逻辑电路中,可以看到一路输入,两路输出。其中一路输出不变,给A端;另外一路输出为逆,给B端。以 $U = A - B$ 的电压值来判定其高低电平。在输出的逻辑电路中同理。

这样,就制造了一个差分电路,并且表示了高低电平。

双绞线

在电控的实践过程中,我们经常能看到很多信号线是缠绕在一起的。有些同志会觉得这不过是线弄在一起缠乱了,或者是做线的时候做的不够好造成的。还有的同志会觉得,实际上就是为了害怕直的几根线太松散,容易和别的线绕在一起,于是把他们缠起来看成像是一捆,来解决这个问题。

image.png

实际上,前者的想法可以说是完全不正确;后者的想法有一定的道理,但只能说是因为正确的利处实现后附加实现的小利处。

而正确的利处是,当线路在同一位置受到干扰的时候,是同一位置受到了干扰。对于差分信号而言,就是彼此相反的差分信号同时增大或减小,它们之间的差值是不会变化的,因此不会影响到对于高低电平的判断。

image.png

不仅仅是用在RS-485上的双绞线,我们还能发现几乎所有的PWM线,尤其是在航模上,都是绞在一起的。原理是相同的。

RS-422标准

RS-422和RS-485的原理可以说是完全一样,没有任何区别。但是,RS-422却弥补了RS-485的一个最致命的缺陷:RS-485只能半双工通信,通信效率很低。

具体的RS-422是如何实现的呢?

RS-422可以看作是两个RS-485合并在一起,需要两条双绞线。

image.png

其标准解析和RS-485非常类似,在此我不再多做解析。

我们所用的串口模块

在没有理解串口的各种标准之前,我们似乎从来没有彻底的学习过这些内容。因为,这些标准都是在底层中已经实现了的。无论是哪一种标准,哪一种协议,在代码层都是没有区别的。

作为嵌入式工作者,电控要负责的工作是写代码,配置好UART所要的各种参数,调用相应的函数,结合GUI,实现上位机与开发板之间的信息传输。

但是,当现在已经学习了这些硬件层的标准,再回过头来看UART通信,会有一种醍醐灌顶的通透感。

我们俗称的串口模块

用通俗的话来说,串口模块就是一块USB。平时也常常会说,“把串口给我”,或者“把串口模块给我“,或者”把串口的USB给我”。但这个小东西究竟是什么呢?

6a00403a5574d12fa443f94f403811f.jpg

可以发现,这个小东西上面写着一行字:USB TO TTL。因此,它的真正名称是USB转TTL模块。

具体的,在TTL端,是一个4pin的GH1.25接头,连接的是开发板的UART接口。而USB端,则是连接上位机接口。

所以,这个串口通信的协议或者标准,运用的是TTL。而非任何一个RS232, RS485, RS422。

在网络上,有看到大佬自己做了USB转双标准的模块,可以做到USB转TTL,和USB转RS232。如图所示。

image.png

来源:USB转TTL/RS232工具硬件设计_usb转ttl原理图-CSDN博客

现在我们拥有了串口模块,但是要做到和上位机通信,还有一个重要的步骤,就是下载电脑的串口驱动。

我们俗称的串口驱动

首先要知道驱动是什么。所谓驱动,就是在操作系统中如Windows,下载一个特殊的程序。这个程序包含插入的硬件设备的所有信息。这个程序可以连接插入的硬件和操作系统与电脑硬盘,实现让操作系统控制插入的硬件。

在这个串口模块中,有一块芯片。不同的厂商选择不同的芯片生产串口模块,熟知的芯片有诸如CH340之类。

通过下载对应的串口驱动,让电脑可以控制这块芯片,就可以通过串口模块和下位机进行收发数据了。

总结

说了这么多,发现我们使用的串口还是USB转TTL的,和那几个RS一点关系都没有啊?

要这么想,就说明没有进行足够多的实践。在实验室中,也有USB转RS·232的模块。因为它确实很有用。在一些工程实践当中,电脑和下位机不可能时刻都保持着仅仅1米的距离。(TTL只能传输1米,而RS232可以传输15米)。尤其是电控在调车的时候,不可能无时无刻都坐在车的旁边来接收数据。这个时候,就可以考虑用一条长的4pin转杜邦的线,利用USB转RS-232,来更轻松,更准确地调参。


有很多内容来自以下几个地方,注明出处以示尊重和敬仰,也方便大家自行查阅。

RS-232/RS-485/RS-422通信协议介绍_rs422-CSDN博客

5分钟看懂!串口RS232 RS485最本质的区别!_哔哩哔哩_bilibili