串口通信介绍
串口通信在早期是计算机与外界通信的主要手段,那时候的计算机基本上都标配有串口以实现和外部通信。而今PC上基本很少见到了,如果在某些特定领域需要使用的话,通常会买USB转串口设备来扩展使用。
串行通信比较简单,在嵌入式领域使用得非常广泛。串口通信早期定义了一套标准的串口规约,DB9(9个引脚)接口就是标准接口。此外还有不常见的DB25(25个引脚)。大家注意串口DB9是9Pin头。
DB9接口中有9根通信线,其中三根(GND、TXD、RXD)很重要必不可少,剩余6根都是和流控有关的,现代我们使用串口都是用来做调试一般都禁用流控,所以这6跟很重要。
串口通信基本原理
串口通信连线
任何通信都要有信息传输载体,或者是有线的或者是无线的。串口通信是通过串口线进行有线通信,在通信时最少需要两根线(GND何信号线)即可以实现单工通信,GPS模块就是串口单工通信实例,此外,大部分的串口通信都是使用三根线(TXD,RXD,GND)来实现半双工通信。
串口通信时序
串口通信时,收发是一个周期一个周期进行的,每个周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元由:起始位+数据位+奇偶校验位+停止位组成的。
波特率
在电子通信领域,波特Baud,即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。
串口通信是一种异步通信方式,收发双方并没有同步时钟信号来规约一个bit的数据发送电平维持多长时间,这样只能靠收发双方的速率来同步收发数据,这个速率叫做波特率BaudRate,其单位为bps(bit per second)
串口通信常用速率为115200(3G/4G/调试串口等)、9600(NB-IoT/GPRS)等、4800等。收发双方的速率必须保持一致。否则会出现乱码或完全收不到的现象。
起始位
他表示发送方要开始发送一个通信单元,起始位的定义是串口通信标准事先指定的,是由通信上的电平变化来反映的。对于串口通信而言总线没有数据传输空闲时维持高电平,一旦产生一个下降沿编程低电平则表示起始信号。
数据位
他是一个由通信单元中发送的有效信息位,是本次通信真正要发送的有效数据位,串口通信一次发送多少位数据是可以设定的,(可选的有6,7,8,9,一般都是8位数据位,因为一般通过串口发送的数据都是以字节为单位的ASCII码编码,而ASCII码中的一个字符刚好编码为8位)。
检验位
用来校验数据位,以防止数据位出错的,这里有两种校验方式,即奇校验偶校验,其中:
奇校验保证传输过程中1的个数为奇数,如8位数据传输中1的个数为奇数,则校验位为1;
偶校验保证传输过程中1的个数为偶数,如8位数据传输中1的个数为偶数,则校验位为0;
停止位
他是发送方来表示通信单元结束标志的,停止位的定义是串口通信标准事先指定的,是有通信线上的电平变化来反映的,常见的有1位停止位,1.5位停止位,2位停止位,一般使用的是一位停止位。
总结
串口通信是异步通信。所以通信双方必须事先约定好通信参数,这些参数包括波特率,数据位,校验位,停止位,这些参数中的任何一个设置错误,都会导致通信失败,譬如波特率调错了,发送方发送没问题,接收方也能接收,但是接收到的全是乱码。
串口通信基本概念
TTL电平与RS232电平
电平信号是用信号线电平减去参考线(GND)电平得到的电压线,这个电压差决定了传输值是1还是0.在电平信号中多少V代表1多少V代表0是不固定的,取决于电平标准。
TTL是MCU或芯片电平,高电平为5(51单片机)或3.3(ARM)表示1,低电平表示0;
RS232电平是用-15~3v表示1,+3~+15v表示0,注意电平的定义是反相的。
TTL是芯片上的串口直接出的电平,它适合距离近或干扰小的情况下,如开发板上芯片与芯片之间,开发板与串口模块之间的通信距离。设备与设备之间的长距离通信,因为压降和信号干扰等因素通常会使用RS232来进行通信,但他的通信距离一般小于15m。
CPU或芯片引出的串口默认都是TTL电平,如果能转成RS232电平的话一般会接一个MAX232的芯片如下图所示:
串口使用注意事项
PC基本上都没有串口了,在我们调试单片机的过程中有需要使用串口来调试,这样不可避免需要USB转串口设备,需要以下注意事项:
如果对方设备是DB9接头,需要确定是公头母头。
要根据对方设备是RS232电平还是TTL电平,选择USB转串口设备。
如果开发板上提供的是插针或者公头,则可使用杜邦线+公头来连接。
串口通信的特点
串口通信单向只有一个数据线实现通信,同时只能传输一个二进制位,所以是串行通信。
串口通信的发送方向和接收方之间没有一个统一的时钟信号,所以他是异步通信方式。
串口通信即可以实现全双工通信,也可以实现单双工通信。
串口通信出现时间早,速率较低,并且采样电平信号传输,抗干扰能力强传输的距离较近。