一、UART简介
1.1定义
UART是一种采用异步串行、全双工通信方式的通用异步收发传输器功能。
1.2功能
它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。
发送:并→串,接收:串→并。
1.3协议层
1.3.1数据格式

(1)空闲
在没有数据传输的时候,数据线处于空闲状态,保持为高电平。
(2)起始位
在空闲状态下一旦检测到数据由高到低的一个跳变,则认为低电平为起始位。起始位标志着一帧数据的开始,也就是在接收方检测到起始位时,就准备开始接收数据。
(3)数据位
图中在起始位后面是一帧数据的7位有效数据位,对于UART来讲,其有效数据位可以是5、6、7、8位,其中8位是最常用的。
(4)校验位
在数据位后是校验位,用来检验数据在传输过程中是否出错。校验位分为两种,分别是奇校验和偶校验。
- 奇校验:发送方在发送数据时,保证数据位和校验位中“1”的个数和为奇数。如发送数据位:0101101(4个1),则校验位补1。
- 偶校验:发送方在发送数据时,保证数据位和校验位中“1”的个数和为偶数。如发送数据位:0101101(4个1),则校验位补0。
- 接收方在接收数据时,同样检验“1”的个数。如果在奇校验时检验到“1”的个数不为奇数,或者在偶校验时检验到“1”的个数不为偶数,那么就接收方就认为数据传输过程中出错。
(5)停止位
停止位标志着一帧数据的结束。在下图中停止位是一个周期的高电平。实际上,停止位可以为1.5个周期或2个周期。
(6)回到空闲
停止位之后数据线回到空闲状态,如果此时再次检测到起始位就标志着下一帧数据的开始。
1.3.2传输速率
串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是bps(位/秒)常用的波特率有9600、19200、38400、57600以及115200等。
(9600:每秒钟串口可以传输9600bit的数据。)
1.4物理层
1.4.1物理连接
UART串口通信主要需要两根信号线来实现,一根用于串口发送(TXD),另外一根负责串口接收(RXD)。
上图中,GND 表示单片机系统电源的参考地。两个单片机之间要通信,首先电源基准得一样,所以我们要把两个单片机的 GND 相互连接起来。
TXD 是串行发送引脚,RXD 是串行接收引 脚。单片机 1 的 TXD 引脚接到单片机 2 的 RXD 引脚上,即此路为单片机 1 发送 而单片机 2 接收的通道,单片机 1 的 RXD 引脚接到单片机 2 的 TXD 引脚上,即此路为单片 机 2 发送而单片机 1 接收的通道。
二、RS232、RS422、RS485总览
针对串行通信的接口标准有RS232、RS422、RS485等。
RS232、RS422、RS485通信协议实际是一种标准,我们可以直接使用这种标准进行通信,完全没有任何问题。
我们还可以自定义通信协议,自定义通信协议是基于需求编写的,符合RS232等标准的协议就可以通信了。
接口标准 | 逻辑1 | 逻辑0 | 说明 | 优缺点 |
RS232 | -15V | +15V | 负逻辑电平① 3线全双工② 点对点双向通信③ | 传输速度相对较低 传输距离短(15m) |
RS422 | 差值电压 +(2~6)V | 差值电压 -(2~6)V | 差分传输④ 4线全双工⑤ 点对多,主从通信⑥ | 抗干扰能力强 传输速度高 传输距离远(1200m) |
RS485 | 差值电压 +(2~6)V | 差值电压 -(2~6)V | 差分传输 2线半双工 多点双向通信⑦ | 能够实现多个发送 接收设备双向通信(1200m) |
①负逻辑电平:用﹣15V表示逻辑1;用+15V表示逻辑0
②3线:发送线、接收线、公共的地线
③点对点:只能两个设备进行双向通信,如:RS232只用于A、B之间点对点双向通信。
④差分传输:差分传输是相对于单端传输而言的,RS232就是是单端传输。
- 单端传输:使用 一根信号线 + 地线 去传输信号。采用信号线与地线的电平差值。
- 差分传输:使用 两路信号线 去传输信号。两路信号线幅值相等,极性相反。
- 区别:
单端传输受到干扰,那么接收方会接收到这个干扰信号。
差分传输受到干扰,两条线受到干扰的幅值和相位都是一样的,即共模干扰。在做减法运算的时候,干扰被抵消。因此,差分传输的抗干扰能力很强
⑤4线全双工:由于RS422是差分传输,为实现全双工通信协议,需要4根数据线,其中两根用于发送,两根用于接受。
⑥RS422可用于A(主机)与B(从机)、C(从机)等从机之间的双向通信,但是B、C之间不能通信。
⑦RS485可用于A(主机)与B(从机)、C(从机)等从机之间的双向通信,并且B、C之间也可以双向通信。
三、RS232
3.1RS232简介
RS232标准主要规定了信号的用途、通讯接口以及信号的电平标准。
最高传输速率 20kbps。
3.1.1实物图
RS232标准的串口常见的接口类型:DB9接口,如图1。
可以是公对母,也可以是公对公、母对母,如图2。
USB转串口线,将USB→串口,如图3。
3.1.2DB9接口定义
引脚编号 | 引脚名称 | 功能说明 |
Pin 1 | DCD | 敷据载波检测 |
Pin 2 | RXD | 接受数据 |
Pin 3 | TXD | 发送数据 |
Pin 4 | DTR | 敷据终端准备 |
Pin 5 | GND | 地线 |
Pin 6 | DSR | 数据准备就绪 |
Pin 7 | RTS | 请求发送 |
Pin 8 | CTS | 清除发送 |
Pin 9 | RI | 振铃提示 |
最常用:Pin 2,Pin 3,Pin 5
3.2RS232串口通信协议
由于RS232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。
那么为什么DP9接口上三个引脚的名字和单片机上的串口名字一样,但是却不能直接和单片机对连通信呢?
因为不是所有的电路都是5V代表高电平而0V代表低电平的。对于 RS232 标准来说,它是个反逻辑,也叫做负逻辑。它的 TXD 和 RXD 的电压,-3V~-15V 电压代表是 1,+3~+15V 电压代 表是 0。低电平代表的是 1,而高电平代表的是 0,所以称之为负逻辑。
因此电脑的 9 针 RS232 串口是不能和单片机直接连接的,需要用一个电平转换芯片 MAX232 来完成,如图下图所示。
这个芯片就可以实现把标准 RS232 串口电平转换成我们单片机能够识别和承受的UART 0V/5V 电平。
其实 RS232 串口和 UART 串口,它们的协议类型是一样的,只是电平标准不同而已,而 MAX232 这个芯片起到的就是中间人的作用,它 把 UART 电平转换成 RS232 电平,也把 RS232 电平转换成 UART 电平,从而实现标准 RS232 接口和单片机 UART 之间的通信连接。
3.3与UART异同点
逻辑电平不同:UART是TTL电平,RS232是RS232电平,不能直接相连,需要电平转换芯片
协议层完全相同:UART和RS232的协议层可以共享,没有较大区别。
3.4缺点
-
接口电平值较高,易损坏接口电路的芯片;又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
-
传输速率较低,大约为20Kbps;传输距离较短,大约为15米左右。
-
接口由三根线TX、RX、GND组成,没有构成差分线形式,容易产生共地共模干扰,抗干扰能力弱。
四、RS485
4.1简介
RS485 接口是串口的一种,常常用在一些工业控制中。
485 通信是一种半双工的通信,一条总线上最多可连接 256 个 485 设备,信号速率最高可达 10 兆 BPS,传输距离最远能到 1,200 米。
4.2差分信号
485 接口包含一对差分信号A 和 B 。
4.2.1发送信号
发送逻辑一时:总线上 A 的电压大于 B 的电压,且压差在 2- 6 伏之间;
发送逻辑零时:总线上 A 的电压小于 B 的电压,且压差在- 6 伏到- 2 伏之间。
4.2.2接受信号
接收到逻辑一:当总线上A 的电压大于 B 的电压且压差大于 200 毫伏。
接收到逻辑零:当总线上 A 的电压小于 B 的电压且压差小于- 200 毫伏。
4.3 SP3485芯片
常用的 485 收发器芯片有 SP3485,它可以将 3.3 伏数字电平信号转换成 485 信号。
SP3485 的引角信号定义如下图:
引脚具体函数如下表:
序号 | 引脚名称 | 功能介绍 |
1 | RO | 接收器输出 当 |
2 | 接收器输出使能控制 当 | |
3 | DE | 驱动器输出使能控制 当DE为高电平时,驱动器输出可用。 当DE为低电平时,输出处于高阻抗状态。 |
4 | DI | 驱动器输入 当DE为高电平时, DI低电平迫使非反相驱动器输出A为低电平,反相驱动器输出B为高电平; Dl高电平迫使非反相驱动器输出A为高电平,反相驱动器输出B为低电平。 |
5 | GND | 地面 |
6 | A | 非反相接收器输入和非反相驱动器输出 |
7 | B | 反相接收器输入和反相驱动器输出 |
8 | VCC | 电源供应 |
下表为 SP3485 发送端的增值表:
下表是接收端的增值表:
4.4 SP3485芯片电路
下图是 SP3485 的典型电路, 和 DE 是接到一起的,UART_RX 和 UART_TX 为 MCU 的串口信号,分别接到 SP 3485 的 RO 和DI。
4.4.1MCU通过SP3485输出
当控制信号为高电平时,为发射使能。
- 当 UART_TX 为高电平时,输出端 A 的电压大于 B 的电压,也就是输出了 485 的逻辑一。
- 当 UART_TX 为低电平时,输出端 A 的电压小于 B 的电压,也就是输出了 485 的逻辑零。

4.4.2外部通过SP3485输入
当控制信号为低电平时,接收使能 。
UART_TX 的电平不会对 A 和 B 造成影响, TX 一般是一个高电平。
当 485 总线上:
- A 的电压减 B 的电压大于 200mV 时, RX 为高电平。
- A 的电压减 B 的电压小于- 200mV 时, RX 为低电平。

4.4.3电路其他说明
当总线空弦时,控制信号应该为低电平,使 485 收发器芯片处于接收状态。
如果 A 和 B 都处于高阻,其状态是不确定的,可能会导致 RX 上接收到错误的随机数。
所以这个电路中 A 信号一般加上拉电阻,B 信号一般加下拉电阻。
A 和 B 之间的 120 欧电阻的作用是消除 485 总线上的信号反射,一般在 485 总线的两端加就可以了,不用每个设备节点都加。
4.4.4改进电路
上面的电路,除了需要 UART 的串口的 TX 和 RX 信号外,还需要一个额外的控制信号,下图电路是在上面电路的基础上进行改进的一个电路是 485 的自动收发电路,不需要控制信号就可以完成 485 信号的发送和接收。
与上面电路有所不同的是DI 是接到一个固定的低电平, 和 DE 信号接到一起,由 TX 控制其电平。
- TX 为高电平时,
和 DE 为低电平。
- TX 为低电平时,
和 DE 为高电平。
详细过程如下:
(1)TX 发送数据
- 当 TX 为低电平,
和 DE 就为高电平,发射使能。
RX 为一个高阻状态, RX 的电平由外部上下拉电阻决定,一般 RX 为高电平。
发送输入引角 DI 是接到一个低电平的,所以输出端 A 的电压小于 B 的电压,也就是输出了 485 的逻辑0。 - 当 TX 为高电平,
和 DE 就为低电平,接收使能。
RX 是高电平,A 和 B 本来应该是高阻的状态,又因为 A 有上拉电阻, B 有下拉电阻,所以 A 的电压大于 B 的电压,也就是输出了 485 的逻辑一。
(2)TX 接收数据
TX 不发送数据时会默认为高电平, 和 DE 就为低电平,接收使能。
- 当 485 总线上 A 的电压减B 的电压大于 200 mV时, RX 为高电平。
- 当 485 总线上 A 的电压减 B的电压小于- 200 mV时,RX 为低电平。
4.4.5电路其他说明
对于 485 接口的 ESD 和浪涌防护,一般会在信号线上加 TVS 管,然后也可以在信号线上加自恢复保险丝。
五、陈氏总结(H冠名)
疑问:为什么两个需要相互通信的单片机都有分别对应的RX,TX管脚,不能直接像下图那样连接,却还是要通过IIC、SPI、RS232、RS485等通信协议来进行通信?
回答:在现实中单片机之间的通信距离需要很远,如果直接用线连接两个单片机,由单片机1 输出的3.3v经过长长的导线到单片机到单片机2可能就只剩1.2v,恰好单片机2的电平判断为:1.3V以下的电平为低电平,那么在信息传输过程中就出现错误。并且两根导线中的一根受到干扰后,信号也会产生错误,
但是使用IIC、SPI、RS232、RS485等通信协议,有的添加了应答机制,有的高低信号差距很大,有的采用差分走线,提高了抗干扰能力,增加通信距离。
六、USB转串口通信
现在可使用 USB 转 UART 技术取代了 RS232 串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?
只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准 UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T 这个芯片,如图下图所示。
右侧的 CH340T 这个电路很简单,把电源、晶振接好后,6 脚和 7 脚的 DP 和 DM 分别接 USB 口的 2 个数据引脚上去,3 脚和 4 脚通过跳线接到了我们单片机的 TXD 和 RXD 上去。
本文参考: