深入理解通信协议----串口(uart)

一:简介
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。常见的单片机上(stm32,51)串口有两根引脚,分别是RXD(接收),TXD(发送),通信示意图如下:
深入理解通信协议----串口(uart)_第1张图片
一个单片机的TXD接另一个单片机的RXD;
二:通信小知识
并行:是指每次发送多位数据;
深入理解通信协议----串口(uart)_第2张图片
串行:一次只发送一位数据;
单工:通信只能从发送方到接收方,不能从接收方发送数据,也就是数据只能单向发送;
半双工:数据可以双向通信,但不能同时双向通信,一个时刻只能有一个方向上通信;
双工:数据可以同时,双向通信;
波特率:用于描述串口通信时的通信速度,指每秒可以发送的bit(位)的数量;
根据以上,我们得知,串口是一种串行的,全双工的通信总线;
三:串口帧结构
起始位+数据位+校验位+停止位;
深入理解通信协议----串口(uart)_第3张图片
串口协议规定,在串口空闲的时候,串口必须为高电平;当高电平被拉低,表明准备开始数据传输了,这就是起始位的作用,可以把它理解为一个握手信号;
随后,开始进行数据发送,数据位每次可以发送5-8位的数据(不是字节,是位),一般情况下,我们都设置为8位,发送的数据是低位在前,高位在后,随后就是发送校验位(又称奇偶校验位(英语:parity bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。),可以对数据进行最简单的检测,可有可无。最后就是1-2位的停止位了,表示该次数据传输完毕;
比如说,我们现在传输0x55这个数据,那么首先拉低数据线上的高电平,表示准备开始数据发送,随后将0x55(二进制就是01010101),低位在前,高位在后发送出去,发送顺序是10101010,然后是校验位,最后发送停止位表明数据发送完成。
那么,到这我们就有各种各样的问题了,别着急,咋们一步一步来;
(1)串口的高电平到底是多高,5V,3.3V或者其他?
这里的高电平一般指主控芯片的高电平,他的电压多高,这里的高电平就是多高;
(2)加入发送的二进制位里面有0011和01,那么改 如何区别发送的二进制位?
这里,我们的波特率的作用就体现出来了,他代表一秒钟我们数据传输的bit数,那么根据这个,我们就可以计算出,每个二进制位所持续的时间了,进而就可以区别了。
(3)为什么数据要不停的发送起始位,接受位,最多才只有一个字节,为何不一次性把所有数据发送完成再发送停止位?
由于我们的串口是异步发送器,也就是发送方和接收方的时钟不统一,所以在发送的时候可能会导致数据错位,那么只要错位一个,后面的数据就都错误了,所以,为了避免这种情况,我们才采用这种帧结构。
四:串口缺点以及改进
(1)UART存在的问题
电气接口不统一:对于UART来说,它只是对信号的时序进行了定义,并没有定义接口的电气特性;UART通信一般使用的都是处理器的电平,也就是TTL电平,但是由于不同处理器之间的电平存在差异,所以不同的处理器之间的UART不能直接相连;
抗干扰能力差:采用TTL电平的高低代表0和1,在数据传输过程中很容易出错。并且,由于抗干扰能力很差,所以通信距离也很短,一般只能用在一个板子上不同的芯片的通信;
(2)改进
针对于电气接口不统一的问题,于是产生了RS232协议。
RS232协议: 在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。(“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准。而工业控制的RS-232口一般只使用RXD、TXD、GND三条线。
规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑“0”,将低到-3 V的信号作为逻辑“1”。
由于RS -232采用串行传送方式,并且将微机的TTL电平转换为RS-232C电平,其传送距离一般可达30 m。
所以在串口通信的时候,只需要在硬件电路上加上一个TTL转RS232芯片就能实现不同设备的通信了,并且通信距离也提高了;在我们编程的时候,不需要考虑RS232,因为他只是在电气层面起作用;
深入理解通信协议----串口(uart)_第4张图片
那么对于RS232来说,又存在一些问题:
首先,由于接口芯片电平较高,容易损坏接口电路的芯片,又因为和TTL电平不兼容,所以需要电平转换芯片才可以和TTL电路连接;通信速度地,通信距离短,抗干扰能力较弱,易产生共模干扰;并且这种接口只可以实现点对点的通信方式,不能实现联网功能。针对这些问题,就产生了如下的RS485;
RS485协议:可以在远距离条件以及电子噪声大的环境中传输有效信号,具有多站能力,可以很方便的建立起一个设备网络,最多可以有32个节点。
那么为什么RS485可以远距离传输,并且抗干扰行很好?这就要看RS485的信号传输了。RS485标准规定采用差分信号进行数据传输,两线间的电压差+2~+6v表示逻辑‘1’,两线间-2v到-6v表示逻辑0;使用差分信号可以有效地减少噪声信号的干扰,延长通信距离,可达到1500m;并且RS485接口信号的电平相比于RS232降低了,所以不宜损坏接口芯片,并且该电平和TTL兼容,可以方便的和TTL电路连接;
但是由于RS485采用两线制,所以数据的发送和接收都要使用这对差分信号线,所以是半双工的工作方式,在编程时需要加以处理。
对于RS485组成的设备网络该如何进行管理,如何避免总线竞争,如何进行仲裁,如何选中从设备,等等都可以参考IIC的通信管理机制;

你可能感兴趣的:(嵌入式,关于嵌入式学习,串口通信,嵌入式)