目录
一、UART简介:
UART:
Universal Asynchronous Receiver Transmitter即通用异步收发器,是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接受,在嵌入式系统中常用于主机与辅助设备之间的通信。
通信基础:并行和串行
(1)并行通信:比如一个char类型0x55,二进制为01010101,他们的二进制同时进行传输。
(2)串行通信:数据一位一位的传过去
两者比较:
(1)并行通信速度快,使用总线条数多,浪费资源,不同总线在进行数据传输的时候,线与线之间会有信号干扰。真正工程做项目都是用的串行总线,比如串口、IIC、SPI。
通信基础:单工和双工
(1)单工通信:只能发送方向接收方发送数据,数据传送方向是单向的。
(2)双工通信:包含半双工和全双工,A和B之间可以互相发送和接收数据,但是半双工不同同时发送和接收。
一般看总线的条数来判断半双工还是全双工。只有一根数据线一般为半双工,比如IIC。
通信基础:波特率
波特率用于描述UART通信时的通信速度,其单位是bps(bit per second)即每秒传送的bit(二进制位)的数量。
UART帧格式:
空闲位必须是高电平,起始位必须是低电平,数据位一般是5-8位,并且先发二进制的低位,再发二进制的高位。
校验位分为奇校验和偶校验,如果为偶校验,发送方会计算数据位中的高电平1是否为偶数个,若为偶数个,则校验位为1;接收方也设置为偶校验,会计算接收到的所有数据位中高电平1是否为偶数个,若是则校验位为1,若不是会通知发送方重新发送。停止位为1位、1.5位或者2位。
若发送10位,则先发送八位,然后发送停止位,之后再发送两位。
在发送二进制数据01和0011时,都是先低电平再高电平,但是怎么区分发了几个0和几个1呢,这是就需要波特率起作用,假设波特率为1bps,则掐时间,经过1秒发送一个二进制,比如在低电平持续了两秒,则发送了两个0。
由于串口通信的发送方和接收方时间基准不一样(比如发送方以自己的时间基准发送1位是1秒,但是接收方以自己的时间基准是0.9秒),所以串口通信不允许连续发送,每次最多发送一个字节,即8位,是因为要防止累积误差的出现。然后第二个字符就重新开始掐时间,以前的累积误差就会消除,因为发8位的累积时间误差较小,所以发送的数据基本无误差。此时就是异步通信的概念,发送方和接收方使用的是不同的时钟基准。
SPI和IIC都是同步通信,发送方和接收方使用的是同一个时钟基准,这样不会出现累计误差,比如IIC可以发送任意多个字节。
UART硬件连接:
TXD用于发送数据,RXD用于接收数据。
UART控制器:
在芯片内部一般都有串口的控制器,本质就是硬件电路,里面包含发送器和接收器。真正使用串口只需要设置一些寄存器,比如波特率,数据位,停止位,奇偶校验位。而uart的帧格式是由控制器完成。
二、RS485和RS232
这两种协议只是物理层或者电气层的协议。依赖于串口,编程时还是用的UART,只是在电气层面做了一些处理,这样可以让他抗干扰能力更强,传输距离更远,提升传输速度。
UART存在的问题:
(1)电气接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性;
UART通信时一般直接使用处理器(CPU)使用的电平,即TTL电平(3.3V和5V),但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连;(比如51单片机的高低电平是5V和0V,stm32单片机的高低电平是3.3V和0V,两个处理器不能直接相连)。
UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便。
(2)抗干扰能力差
UART一般直接使用TTL信号来表示0和1,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错。
(3)通信距离极短
因为TTL信号抗干扰能力差,所以其通信距离也很短,一般只能用于一个电路板上的两个不同芯片之间的通信。
RS232协议:
RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准;
该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定;
接口:
该标准规定采用一个25引脚的DS-25连接器,标准中对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定;后来IBM的PC机将RS232简化成了DB-9连接器,后来成为事实标准;现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线;
信号:
该标准规定逻辑“1”的电平为-5V到-15V,逻辑“0”的电平为+5V到+15V,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传送距离一般可达15m;
电平转换:
一般使用max232芯片 ,使TTL电平和232信号相互转换。
RS232存在的问题:
(1)接口的信号电平值较高,易损坏接口电路的芯片,又因为TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
(2)通信速度较低
(3)易产生共模干扰,抗噪声干扰性弱
(4)传输距离较短(15m)
RS485协议:
该标准由电信行业协会和电子工业联盟定义;使用该标准的通信网络能在远距离条件下(1500m)以及电子噪声大的环境下有效传输信号;该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立起一个设备网络。
信号:
RS485标准规定采用差分信号进行数据传输,两线间的电压差为+2V到+6V表示逻辑“1”,两线间的电压差为-2V到-6V表示逻辑“0”;使用差分信号(即用两根线描述电平的高低,以前都是一根线)能有效减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接。
RS232开始输出的是15V,随着传输距离增加输出电压可能衰减,导致协议错乱。而RS485 信号两根线受到同样的干扰(因为两根线用的是双绞线),两根线之间的差值依然不变,抗干扰能力强。
接口:
RS485采用两线制,这种接线方式为总线式拓扑结构,在同一总线上可以同时存在多个节点;
因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作(串口和232是全双工的),编程时也需要加以处理。
电平转换:
RS485的优势:
(1)接口的信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路连接。
(2)通信速度快
(3)抗噪声干扰性强
(4)输出距离较远(1500m)
(5)可实现多节点组网