详解RS232/UART/协议/串口通信

RS232基本概念
串口通信时串行通信里面的异步方式 UART是串口通信里面的一种协议,通俗的讲:
串口(基本上) = RS232 = UART = USART = U(S/A)RT
注:
①RS232是协议名称,而串口还应该包括了其它协议,如:RS485、RS422等;
②U是通用,A是异步,S是同步,所以,UART跟USRT区别在于有无同步时钟,所以有的串口会有三根线(地线除外),多了一根时钟线
距离稍微远一点,同步通信就不太合适了,通着通着就乱了;
③RS232发送是靠TXD和GND之间的电压来传数据(接收跟发送雷同),是共模电压,抗干扰能力差,导致传输距离非常有限;
④被广泛使用的原因:因为RS232的简单、低成本,所以不管是单片机、ARM、DSP都配了这种接口;
⑤真正设备间通信肯定是RS232电平的串口数据,抗干扰能力强,TTL电平是电路板上使用的电平,所以真正传输时,肯定会进行RS232和TTL之间的转换。

RS232的协议
因为是异步的通信,那么如何保证数据发送的可靠呢,那么就需要几个扛大旗的人,如起始位,停止位;
典型的其中一种消息协议主要分以下几个部分:起始位、数据位、校验位、停止位,注意:这里用的是位(bit)。
单纯地按照协议规定的去做,会出现一些问题。
1、奇偶校验的校验能力太差。
2、传错一个数据,没法重传。
3、在总线上挂了几个从机,主机如何区分是哪台从机发出的数据(有的设备不能把校验位当地址位用)。
4、如果没有成功发送停止位,那么接收端会不会一直等待。
5、总线上传错了一组数据,没法定位是哪个地方(哪个位)出问题。
鉴于以上诸多问题,我们想到了一种解决办法,就是封装成帧。一帧数据包含多个byte,而一个byte的数据包含多个bit(起始位、数据位等)。

自定义协议
根据实际需求自定义协议。下面举个例子(非通用协议/准则),并以“域”来表示协议里面各个功能模块。
1、帧起始。
帧起始,一般以0x55或者0xaa作为起始的标志,为什么要用这种数字?
十六进制的5,转为二进制是0101;十六进制的A,转为二进制是1010。这样,0x55,就是01010101了。
0和1交替出现,一来方便接收方实现自适应波特率,二来避免干扰
a、通过检测0和1之间的时间间隔,即可知道该帧数据的波特率。
b、如果设为0xff,那么,在总线上出现一个干扰,接收端很有可能误以为要接收数据。
2、命令域。
命令域,可以随意一点,如:设上行为0x1d,下行为0x3a,重传为0xb7,应答为0x89。
3、地址域(可选)。
地址域,也可以随意一点,如果所有设备的地址均不相同,那就只具备点对点的功能。
当然,你也可以视实际情况,把某几台设备的地址设为一样,这样就有点对多点的功能。
4、长度域(可选)。
如果是发送固定长度的帧,是可以不使用长度域;如果是不固定长度的帧,则可以加上。
4、数据域。
数据域,一般由数据个数和数据组成。
比如,你要传3个数,分别是0x00到0x02。那么数据域就是0x03 0x00 0x01 0x02。
5、校验域。
校验域,可以使用校验和或者CRC校验。如,使用CRC16算法话,校验域为2个byte。
一般除了帧起始和帧结束以外,都送进CRC校验。
好了,这样的话,我要发一个上行的数据,到地址为0x0a的设备,一共3个数据(固定长度),分别是0xa0,0xb0,0xc0。
那么一帧数据就是:0x55 0x1d 0x0a 0x03 0xa0 0xb0 0xc0 0x53 0xfb
只要把上面这一帧数据,一个byte一个byte地发送出去,即可。
使用CRC-16对该帧(除去帧起始)进行计算,可以得到0x53FB。如下图所示。
6、应答和重传。
如果接收端,收到一帧数据,经过CRC校验,数据正确,这时得传一帧简易的应答帧,以告诉主机,这个帧接收成功。
应答帧, 如:0x55 0x89 0xa6 0xc1。
如果接收端,收到一帧数据,经过CRC校验,发现数据有错,这时得传一帧简易的重传帧,以请求重传。
重传帧,如:0x55 0xb7 0x76 0x40。
这样,串口的功能就强大了很多

总结:

不管是RS232、或者其他协议,一般是都以byte为单位,传输数据的。如果你想把12位的ADC数据,通过串口发到PC机,那么,你得分成两个byte,高位补零。
从RS232到USB、以太网,不难看出,物理层/物理接口变化不大,而协议/数据链路层却越来越复杂。
这也说明了,传输数据的可靠性,不能过于依赖物理层,而应该依赖协议上的一些机制(校验、重传等)。

要是实现串口通讯,只许连接这三根线就好了:

如果地线不连(共地),两个设备识别出来的电压就会产生很大的误差,出现数据乱飘的情况。
在这里插入图片描述

### 回答1: UART是通用异步收发器的缩写,它是一种常用的串口通信接口,用于连接计算机和外部设备之间的数据传输。 RS232是一种常用的串行数据传输标准,主要用于连接计算机和外部设备之间的数据传输。 RS485和RS422是两种工业标准的串行数据传输接口,它们都支持多点通信,并且在长距离、高速传输和抗干扰性方面有着很好的性能。 ### 回答2: UART,全称为Universal Asynchronous Receiver/Transmitter,是一种串行通信接口协议UART接口具有简单、易于实现、低成本等优点,常被用来连接单片机、传感器、触摸屏等设备。 RS232、RS485、RS422是串行通信接口的标准,分别适用于不同的应用场合。其中,RS232是最常见的串行通信标准,通常用于连接计算机与外设(如路由器、调制解调器等)之间进行通信。RS485和RS422则适用于长距离、高速率和高噪音环境下的数据传输,常应用于工业控制、自动化仪表、安防设备等领域。 在实际应用中,UART接口通常和RS232、RS485、RS422串行通信协议结合使用。例如在工业控制领域,常见的串口通信方式就是使用RS485或RS422连接控制器和其他设备,使用UART接口与微处理器进行数据通信。 此外,UARTRS232、RS485、RS422等串行通信协议在通信速率、数据位、校验位、停止位等参数上也有不同的设置。因此,在进行串口通信时,需要确保通信双方的参数设置一致,以保证通信的准确性和稳定性。 ### 回答3: UARTRS232、RS485和RS422都是串行通信协议,用来实现数据传输。其中UART是通用异步收发传输器(Universal Asynchronous Receiver-Transmitter)的缩写,常用于微控制器与其他设备之间的通信。而RS232、RS485和RS422则是标准串行接口协议,常用于远距离通信和工业自动化领域。 RS232是一种单向通信方式,使用异步串行通信方式进行数据传输,最多可以传输50英尺(15米)的距离。它采用单个发送端和接收端连接,速率通常为9600、19200、38400和115200 bps等。在许多应用中,RS232被广泛用于连接计算机、调制解调器、打印机,以及其他一些串行通信设备。 RS485是一种多点通信方式,允许多个设备在同一总线上进行通信。它是半双工的,可以双向发送和接收数据。与RS232相比,RS485可以传输更远的距离,最多可达4000英尺(1200米)。它的传输速率可以从300 bps到10 Mbps,常用于工业控制、自动化、监控等领域。 RS422也是一种多点通信方式,与RS485相似,可以在同一总线上连接多个设备。它是全双工通信,即可以同时发送和接收数据。与RS485相比,RS422可以实现高速数据传输,但距离更短,最多可达1200米。RS422通常用于数字音频和视频设备、电力传输、船舶和机场等场合。 总之,UARTRS232、RS485和RS422都是串行通信协议,它们各自有着不同的应用场景和特性。选择合适的通信协议取决于需求及实际应用情况。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@会飞的毛毛虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值