串口通信的基本原理详解

目录

 

串口通信

串口通信的两种基本方式

异步数据的数据发送过程

异步通信的数据接收过程

9针串口(DB9)

TTL与RS232区别

TTL:

RS232:

串口通信的数据格式

通讯方式

偶校验与奇校验

停止位

波特率(波特率就是每秒钟传输的数据位数)

典型的串口通讯标准


  • 串口通信

串行接口简称串口,也称串行通信接口(通常指COM接口):是采用串行通信方式的扩展接口。

  • 串口通信的两种基本方式

1、同步通信(SYNC:synchronous data communication)(有时钟信号来做同步):

是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

同步串行通信SPI(是Serial Peripheral Interface 串行外围设备接口简称),SPI总线系统是一种同步串行的外设接口,1它可以是MCU与各种外围设备以串行方式进行通信以交换信息。

2、异步通信(ASYNC:asynchronous data communication):

是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。 异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。停止位至下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始。而根据起始位和停止位也就很容易的实现了字符的界定和同步。

异步串行通信UART(无时钟信号)(Universal Asynchronous Receiver/Transmitter),即通用异步接受/发送。

UART包含TTL和RS232电平。TTL电平是3.3V的;而RS232是负逻辑电平,它定义+3V~+15V为低电平,而-15~-3为高电平,通常PC机串口与单片机串口通信需要电平转换芯片,例如:MAX232。

显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步。

  • 异步数据的数据发送过程

发送数据的具体步骤如下:

  1. 初始化后或者没有数据需要发送时,发送端输出逻辑1,可以有任意数量的空闲位;

  2. 当需要发送数据时,发送端首先输出逻辑0,作为起始位;

  3. 接着开始输出数据位,发送端首先输出数据的最低位D0,然后是D1,最后是数据的最高位;

  4. 如果设有奇偶检验位,发送端输出检验位;

  5. 最后,发送端输出停止位(逻辑1);

  6. 如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转入步骤2;

  7. 如果是以232电平发送的,示波器上看到的发送端信号应是上述数据包取反后的结果(负逻辑)。

  • 异步通信的数据接收过程

在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明:

  1. 开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数;

  2. 接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

  3. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

  4. 检验奇偶检验位;

  5. 接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

  6. 本帧信息全部接收完,把线路上出现的高电平作为空闲位;

  7. 当信号再次变为低时,开始进入下一帧的检测。
    (PS1:接收时钟和发送时钟与波特率有如下关系:
    f = n × B 这里f 是发送时钟或接收时钟的频率; B 是数据传输的波特(Baud)率; n 称为波特率因子。设发送或接收时钟的周期为Tc,发送一个波形所需要的传输时间为Td,则: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,从而n代表发送一个波形需要几个时钟周期。 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。
    PS2:波特率与比特率的关系:
    波特率代表1秒钟发送波形的个数,而比特率代表1秒钟发送比特的个数。在采用二进制传输的情况下,发送的波形一共有两种波形,即高电平和低电平,那么一个波形代表一个比特,因此波特率和比特率相等;在采用四进制传输的情况下,发送的波形一共有4种波形,此处假设发送的最高电平为3V,发送00的波形为0V,发送01的波形为1V,发送10的波形为2V,发送11的波形为3V,那么一个波形代表两个比特,因此比特率是波特率的两倍;同理,在采用八进制传输的情况下,比特率是波特率的三倍,以此类推。)

  • 9针串口(DB9)

1:DCD 载波检测

2:RXD 接受数据(方向:始终从终端到计算机)

3:TXD 发送数据(方向:始终从计算机到终端)

4:DTR 数据终端准备好

5:GND 地线信号

6:DSR 数据准备好

7:RTS 请求发送

8: CTS 清除发送

9:RI      振铃指示

  •  TTL与RS232区别

  •  TTL:

TLL(Transistor-Transistor Logic,晶体管-晶体管逻辑),TTL电平即TTL电路输出的电平,TTL电路的工作电压是5V,它的输出可以是高电平(3.6V)或者低电平(0.3V)。由于电平是一个连续变化的电压范围,为了用这种模拟量的电压来表示数字量的逻辑1和逻辑0,TTL电平规定:

对于输出电路:电压大于等于(≥)2.4V为逻辑1;电压小于等于(≤)0.4V为逻辑0;

对于输入电路:电压大于等于(≥)2.0V为逻辑1;电压小于等于(≤)0.8V为逻辑0;

逻辑高电平==’1‘==Vcc==3.3V或5V

逻辑低电平==’0‘==0V==0V

  • RS232:

S232是美国电子工业协会于1962年发布的串行通信接口标准,RS即Recomend Standard,推荐标准,232为标示号。该标准对串行通信的物理接口及逻辑电平都做了规定。最简单的RS232通信由三条数据线组成,即TXD、RXD和GND。RS232采用负逻辑电平,即-15V~-3V代表逻辑"1",+3V~+15V代表逻辑"0"。这里的电平,是TXD线(或者RXD线)相对于GND的电压。

逻辑高电平==’0‘==负电压== -3V~-25V==常为:-13V

逻辑低电平==’1‘==正电压== 3V~25V==常为:13V

  • 串口通信的数据格式

 一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。
    每一个字符的前面都有一位起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。

 

  1. 起始位,一般为低电平;

  2. 数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位),低位(LSB)在前,高位(MSB)在后;

  3. 奇偶校验位可有可无,如果没有则表示不采用校验,有则表示加入校验;

  4. 停止位,一般位高电平。

  • 通讯方式

  1.  单工模式(Simplex Communication)的数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。

  2. 半双工模式(Half Duplex)通信使用同一根传输线,既可以发送数据又可以接收数据,但不能同时进行发送和接收。数据传输允许数据在两个方向上传输,但是,在任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工模式既可以使用一条数据线,也可以使用两条数据线。半双工通信中每端需有一个收发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以会产生时间延迟,信息传输效率低些。

  3. 全双工模式(Full Duplex)通信允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。在全双工模式中,每一端都有发送器和接收器,有两条传输线,信息传输效率高。

  4. 显然,在其它参数都一样的情况下,全双工比半双工传输速度要快,效率要高。

  • 偶校验与奇校验

在标准ASCII码中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

  • 停止位

停止位是按长度来算的。串行异步通信从计时开始,以单位时间为间隔(一个单位时间就是波特率的倒数),依次接受所规定的数据位和奇偶校验位,并拼装成一个字符的并行字节;此后应接收到规定长度的停止位“1”。所以说,停止位都是“1”,1.5是它的长度,即停止位的高电平保持1.5个单位时间长度。一般来讲,停止位有1,1.5,2个单位时间三种长度。

  • 波特率(波特率就是每秒钟传输的数据位数)

波特率的单位是每秒比特数(bps),常用的单位还有:每秒千比特数Kbps,每秒兆比特数Mbps。串口典型的传输波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps。

PLC/PC与称重仪表通讯时,最常用的波特率是9600bps,19200bps。PLC/PC或仪表与大屏幕通讯时,最常用的波特率是600bps。

  • 典型的串口通讯标准

  1. EIA RS232(通常简称“RS232”): 1962年由美国电子工业协会(EIA)制定。

  2. EIA RS485(通常简称“RS485”): 1983年由美国电子工业协会(EIA)制定。