串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。 串口按电气标准及协议来划分,包括RS-232、RS-422、RS485等。其中最常用的就是RS-232接口。
RS-232接口有以下三个特性:
1、用了一个9针的连接器"DB-9"(早期的电脑有用25针的连接器"DB-25")
2、允许全双工通信(即通过串口发送数据和接收数据可以同时进行)
3、通信的最大速率大约在10KBytes/s左右
DB-9接口的实物图如下图所示(早期电脑主机后面可以看到这个接口,现在一般都用USB转串口线进行串口通信):
虽然DB-9接头一共有9根线,但是实现串口通信只需要其中的3根线就可以了,分别是:
1、pin-2:RXD(receive data),接收串行数据
2、pin-3:TXD(transmit data),发送串行数据
3、pin-5:GND(ground),地线
在串口通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送,这个过程称为数据的"串行化(serialized)"过程。由于串口通信是一种异步通信协议,并没有时钟信号随着数据一起传输,而且空闲状态(没有数据传输的状态)的时候,串行传输线为高电平1,所以发送方发送一个字节数据之前会先发送一个低电平0,接收方收到这个低电平0以后就知道有数据要来了,准备开始接收数据从而实现一次通信。串口通信的时序如下图所示:
串口通信的规范如下:
1、空闲状态(没有数据传输的状态)下,串行传输线上为高电平1
2、发送方发送低电平0表示数据传输开始,这个低电平表示传输的起始位
3、8-bit的数据位(1 Byte)是从最低位开始发送,最高位最后发送
4、数据位的最高位发送完毕以后的下一位是奇偶校验位,这一位可以省略不要,同时,当不发送奇偶校验位的时候接收方也相应的不接收校验位
5、最后一位是停止位,用高电平1表示停止位
下面以发送字节0x55为例来说明整个的发送过程:
先把0x55转化成二进制为:01010101。显然0x55的最低位bit 0是1,次低位bit 1是0,………,最高位bit 7是0,由于串口是从最低位开始发送一个字节,所以0x55各个位的发送顺序是1-0-1-0-1-0-1-0,波形如下图所示
下面在给出一个波形,根据上面的规则也可以很容易判断这是发送字节0x13的波形
接下来的最后一个问题是:串口传输的速度是多少?
实际上,串口传输的速度用波特率(baudrate)来指定。波特率表示的是每秒发送的比特数,单位是bps(bits-per-seconds),例如,1000 bauds表示1秒钟发送了1000个比特,或者说每个比特持续的时间是1ms。关于串口发送的波特率是有一组标准的规定的,并不是随便一个数字。常用的波特率标准有:
1、1200 bps
2、9600 bps (常用)
3、38400 bps
4、115200 bps (常用,而且通常情况下是我们能用的最快的波特率)
波特率为115200 bps时,每个比特持续的时间为(1/115200)=8.7us,所以发送8个bit(1 Byte)需要的时间是88.7us=69us。在不考虑奇偶校验位的情况下,发送一个字节还需要发送额外的1个起始位和1个停止位,所以发送1个字节实际所需要的最少时间是108.7us=87us,这意味着1s(1000000us)中能发送的字节数为(1000000/87) = 11494,所以在波特率为115200bps的情况下,串口传输数据的速率约为11.5KB/s。而有些电脑的串口有时候需要一个更长的停止位,比如1.5位或2位的停止位,那么发送一个字节所需要的时间比只有一个比特停止位的情况所耗费的时间更长,在这种情况下,串口的传输速率会低于10.5KB/s。