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


上表中的是计算机端的 DB9 公头标准接法,由于两个通讯设备之间的收发信号(RXD与 TXD)应交叉相连,所以调制调解器端的 DB9 母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用“直通型”的串口线连接起来即可,见下图:
串口线中的 RTS、 CTS、 DSR、 DTR 及 DCD 信号,使用逻辑 1 表示信号有效,逻辑 0表示信号无效。例如,当计算机端控制 DTR 信号线表示为逻辑 1 时,它是为了告知远端的调制调解器,本机已准备好接收数据, 0 则表示还没准备就绪。
在目前的其它工业控制使用的串口通讯中,一般只使用 RXD、 TXD 以及 GND 三条信号线,直接传输数据信号。而 RTS、 CTS、 DSR、 DTR 及 DCD 信号都被裁剪掉了,如果您在前面被这些信号弄得晕头转向,那就直接忽略它们吧。
(2)、电平标准
根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准、 RS-232 标准、RS485标准、RS422标准。
TTL:板级通信,距离极短。
RS-232:点对点全双工,距离中等。
RS-422:点对点/一对多全双工,距离远,抗干扰强。
RS-485:多点多主半双工,距离远,抗干扰强,是工业总线的基础。
点对点、一对多和多点多主特性:

1)点对点
定义:通信网络只在两个设备之间建立独占的、直接的连接。
工作方式:
这两个设备通常有平等的地位,都可以主动发起通信。
连接是独占的,意味着信道资源不被其他设备共享。
优点:简单、可靠、无需复杂的寻址和仲裁机制。
缺点:扩展性差,每增加一个设备都需要增加新的端口和线路,成本高。
典型协议:
UART / RS-232:最经典的点对点协议。
USB:主机和设备之间是点对点。
形象比喻:电话通话
两个人之间有一条专属的线路,双方都可以随时打给对方或接听。
2)一对多
定义:一个主设备与多个从设备连接在一条总线上,但主设备拥有绝对控制权。
工作方式:
主设备负责发起所有的通信事务。它通过寻址来选择要与哪个从设备通信。
从设备永远不能主动发起通信,必须等待主设备的召唤,然后进行响应。
从设备之间不能直接通信,必须通过主设备中转。
优点:结构简单,控制集中,避免了总线冲突。
缺点:主设备是单点故障,如果主设备故障,整个网络瘫痪。通信效率依赖于主设备,延迟可能较高。
典型协议:
I2C:一个主芯片(如MCU)控制多个从设备(如传感器、存储器)。
RS-422:一个发送器,多个接收器。
形象比喻:老师课堂提问
老师(主设备)拥有绝对话语权。老师提出问题(发起通信),并点名让某个学生(从设备)回答。学生不能随意发言,必须等老师点名。
3)多点多主
定义:多个设备连接在一条共享的总线上,任何一个设备都可以作为主设备主动发起通信。
工作方式:
所有设备在逻辑上是平等的(对等)。
由于总线是共享的,当多个设备同时想要发送数据时,需要一种机制来解决冲突。
常见的机制有:
仲裁:在冲突发生时,优先级高的设备继续发送,优先级低的自动退让(如 CAN 总线)。
冲突检测:先监听再发送,如果发生冲突就后退随机时间再重试(如早期以太网)。
优点:分布式控制,可靠性高(无单点故障),灵活性好,任意设备间可直接通信。
缺点:协议复杂,需要处理仲裁和冲突。
典型协议:
CAN:汽车、工业领域霸主,采用非破坏性仲裁。
RS-485:在硬件上支持多点多主,实际应用依赖上层软件协议实现仲裁。
以太网:经典的多点网络。
形象比喻:圆桌会议
所有参会者(设备)地位平等。任何人都可以发言(发起通信)。如果两个人同时开口,会有一套规则(如优先级、举手示意)来决定谁先说,另一个人会停下来听。

1)TTL (Transistor-Transistor Logic)
本质:这实际上是芯片引脚级别的信号,不是正式的通信标准。
电平:逻辑 1 是 +3.3V 或 +5V,逻辑 0 是 0V。电平非常低,极易受外界干扰。
使用场景:通常用于电路板内部,或者两个非常接近的电路板之间(如 Arduino 和蓝牙模块)。你常说的“UART”通信,其原始信号就是 TTL 电平。
2)RS-232 (EIA-232)
设计目的:解决 TTL 电平传输距离短、抗干扰差的问题。
电平:采用高压负逻辑。逻辑 1 是 -3V ~ -15V,逻辑 0 是 +3V ~ +15V。更高的电压和负电压使其抗干扰能力显著强于 TTL。
拓扑:严格点对点,不能连接多个设备。
注意:我们常使用 “USB转TTL串口线” 或 “USB转RS-232串口线”,就是为了在现代电脑和这些设备之间进行电平转换。
3)RS-422 (EIA-422)
重大升级:从 “单端信号” 升级为 “差分信号”。
单端信号:用一根线上的电压相对于GND的电压来表示信号。噪声会同时影响信号线和GND,导致误判。
差分信号:用一对线(A+和B-) 的电压差来表示信号。逻辑 1 = (B-) - (A+) 为负;逻辑 0 = (B-) - (A+) 为正。外部的共模噪声会同时、同等地作用于这两根线,接收器只关心差值,因此噪声被有效地抵消了。
拓扑:支持全双工,一个发送器可以驱动多个接收器(但不能有多个发送器)。
4)RS-485 (EIA-485)
RS-422的增强版:同样采用差分信号,具有同样的高抗干扰性和长距离传输能力。
核心优势:支持多个发送器(多主)可以挂接在同一条总线上。这是通过将RS-422的全双工两对线,缩减为一对共享的半双工总线来实现的。
拓扑:真正的总线式网络,可以轻松构建一个连接数十个设备的分布式系统。所有设备都并联在同一对 A/B 线上。
工作模式:需要设备通过“使能”信号来控制收发状态,以避免总线冲突。
1.2、协议层
串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见下图:

(1)、波特率
这里主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码, 图 20-6 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、 9600、 115200 等。
(2)、 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 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”。
- 在无校验的情况下,数据包中不包含校验位。

浙公网安备 33010602011771号