串口通讯(Serial Communication)是一种非常常用的设备间串行通讯方式,因其简单易用而广泛应用于各种电子设备中。
文章目录
1 物理层
串口通讯的物理层有多种标准和变种,其中RS-232标准是最为广泛使用的一种。RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准,是串口通讯的基础。
1.1 RS-232 标准概述
- 信号用途: RS-232标准定义了不同信号的功能,包括发送数据、接收数据、控制信号和地线等。常见的信号包括:
- TXD: 发送数据线
- RXD: 接收数据线
- GND: 地线
- RTS: 请求发送
- CTS: 清除发送
- 通讯接口: RS-232通常使用DB9或DB25连接器,DB9连接器是最常见的形式,适用于大多数设备间的连接。
- 电平标准: RS-232标准规定了信号的电平标准,通常在-15V至+15V之间。逻辑“1”(空闲状态)通常表示为负电压(如-3V到-15V),而逻辑“0”则表示为正电压(如+3V到+15V)。这一电平标准使得RS-232能够在一定距离内进行可靠的通讯。
1.2 串口通讯结构
在使用RS-232标准的串口设备间,常见的通讯结构如下(假设为图示):

- 两个设备通过DB9接口连接,形成一条串口信号线。
- 信号线中使用RS-232标准传输数据信号,以实现设备间的通讯。
1.3 电平转换
由于RS-232的电平标准与大多数微控制器(如Arduino、STM32等)使用的TTL(Transistor-Transistor Logic)电平标准不兼容,因此需要使用电平转换芯片。电平转换的过程如下:
- RS-232信号通过电平转换芯片转换为TTL电平信号,TTL信号的电平通常为0V(逻辑0)和5V(逻辑1)。
- 转换后的TTL信号可以被控制器直接识别,从而实现数据的发送和接收。

1.4 RS-232
在传统台式计算机中,通常会有一个RS-232标准的COM口(DB9接口)。这个接口通常由公头(针式)和母头(孔式)构成。计算机一般使用公头接口,而调制解调器通常使用母头接口。通过串口线连接这两种设备,可以实现数据的传输。
1.4.1 DB9接口的引脚定义
引脚号 | 信号名称 | 说明 |
---|---|---|
1 | DCD (Data Carrier Detect) | 数据载波检测 |
2 | RXD (Receive Data) | 接收数据 |
3 | TXD (Transmit Data) | 发送数据 |
4 | DTR (Data Terminal Ready) | 数据终端准备就绪 |
5 | GND (Signal Ground) | 信号地 |
6 | DSR (Data Set Ready) | 数据设备准备就绪 |
7 | RTS (Request to Send) | 请求发送 |
8 | CTS (Clear to Send) | 清除发送 |
9 | RI (Ring Indicator) | 响铃指示 |
由于两个通讯设备之间的收发信号 (RXD 与 TXD)应交叉相连,所以调制调解器端的 DB9 母头的收发信号接法一般与公头的相反

2 协议层
串口通讯的数据包由发送设备通过其TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,数据包的内容结构明确规定,通常由以下几个部分组成:
- 启始位 (Start Bit)
- 主体数据 (有效数据)
- 校验位 (Parity Bit)
- 停止位 (Stop Bit)
为了确保通讯双方能够正常收发数据,数据包的格式必须在通讯双方之间达成一致。
2.1波特率
在本章中,主要讨论串口的异步通讯。异步通讯中,由于缺乏时钟信号(例如,在DB9接口中并没有时钟信号),因此两个通讯设备必须约定好波特率。波特率定义了每个码元的长度,以便于信号的解码。图示中用虚线分隔的每一格代表一个码元。常见的波特率包括4800、9600、115200等。
2.2 通讯的起始和停止信号
串口通讯的数据包从起始信号开始,直到停止信号结束:
- 起始信号: 数据包的起始信号由一个逻辑0的数据位表示。
- 停止信号: 数据包的停止信号可以由0.5、1、1.5或2个逻辑1的数据位表示。只要双方约定一致即可。
2.3 有效数据
在数据包的起始位之后,紧接着就是要传输的主体数据内容,称为有效数据。有效数据的长度通常被约定为5、6、7或8位长。
2.4 数据校验
在有效数据之后,可能会有一个可选的校验位。由于数据通信容易受到外部干扰,可能导致传输数据出现偏差,因此可以在传输过程中增加校验位。常见的校验方法有:
- 奇校验 (Odd Parity): 有效数据和校验位中“1”的个数为奇数。例如,一个8位的有效数据为
01101001
,此时总共有4个“1”。为了达到奇校验效果,校验位为“1”,最后传输的数据将是8位的有效数据加上1位的校验位,总共9位。 - 偶校验 (Even Parity): 要求帧数据和校验位中“1”的个数为偶数。例如,数据帧
11001010
中“1”的个数为4个,因此偶校验位为“0”。 - 0校验 (Space Parity): 无论有效数据的内容如何,校验位总为“0”。
- 1校验 (Mark Parity): 校验位总为“1”。
- 无校验 (No Parity): 在这种情况下,数据包中不包含校验位。