1.RS232和RS485概述
RS232和RS485其实从本质上来讲是遵循串口通信协议的,在程序上面,RS232和RS485与串口的程序是相同的,所以RS232和RS485本质上就是串口通信协议,但是因为电气特性的不同(主要是接口和信号电压规定的不同),分为了RS232通信协议和RS485通信协议以解决串口通信存在的相关问题并且延长通信距离。
2.USART存在的问题
- 电气接口不统一。USART只是对信号的时序做了规定,但是没有规定接口的电气特性(包括连接器(插头)和高低电平的具体的范围)。
- USART通信时一般直接用TTL电平来进行,但是不同的处理器对高低电平的是并不统一的(比如说51单片机的高电平是5V,低电平是0V,而stm32的高电平规定是3V3,低电平是0V),所以不同的处理器使用USART进行通信的时候一般不能直接相连,所以不同器件通过USART进行通信的时候是很不方便的。
- 抗干扰能力差,USART一般直接使用TTL信号来表示0和1,但是TTL信号的抗干扰能力较差,数据在传输过程中很容易出错。
- 通信距离短,因为TTL信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个芯片之间的通信。
基于USART传输协议的以上问题,行业协会就规定了RS232标准和RS485标准。
3.RS232协议
3.1接口标准化
是很多牛逼厂家共同制定的用于串行通讯的标准。
该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定。
现在工业控制中的RS232接口一般只使用RXD、TXD、GND这三条线。
3.2信号标准化
该标准规定逻辑“1”的电平是-5V到-15V,逻辑“0”的电平为+5V到+15V,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传送距离一般可达15m。
虽然很多处理器中都会集成USART控制器,但处理器产生的信号一般都是TTL信号,并不是符合RS232标准的信号,所以一般我们还需要在处理器的外部去添加电路对信号的电平进行转换。
3.3RS232存在的问题
1.接口的信号电平值较高,容易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。
2.通信速度较低。
3.容易产生共模干扰,抗噪声干扰性弱。
4.传输距离较短(15m)。
4.RS485协议
由行业协会规定的,使用该标准能实现远距离条件下以及电子噪声大的环境下有效传输信号(数据传输距离最长可以达到1500m)。该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立起一个设备网络。
4.1信号标准化
RS485标准规定采用差分信号进行数据传输,两线这件的电压差为+2V到+6V表示逻辑“1”,两线间的电压差为-2V到-6V表示逻辑电平“0”;使用差分信号能有效地减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接。
用这种差分信号来做有很多的好处,比如说,当使用RS232进行数据的传输的时候,当传输初值为15V,但是由于线的很多干扰,传输到半路可能就降低到5V了,这就导致传输的信号有误,这就导致RS232信号的传输距离不是那么长。
而RS485是采用的差分信号,采用差分信号就会使得信号同时衰减,信号同时衰减的情况下,两信号之间的差依旧是保持不变的,这样就会抑制干扰,并且,一般情况下,RS485都是使用双绞线来进行传输的,这样干扰就是相同的。
RS485传输时用的双绞线
4.2接口标准化
RS485采用两线制,这种接线方式为总线拓扑结构,在同一总线上可以同时存在多个节点;
因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作,编程时也需要加以处理。
虽然很多处理器中都会集成USART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS485标准的信号,所以一般我们还需要在处理器外部去添加电路并将TTL信号转换成差分信号。
由于RS485的信号传递是采用差分信号来进行的,所以编程的时候有些问题是要注意的,比如说在接收信号的时候不能发送,在发送信号的时候不能接收,并且由于主从机制的存在,主机在发送信号的时候还要进行对从机的寻址,这样才能最终实现数据的传输。
在编程过程中RS485还是要通过串口编程的方式来进行的,但是如果进行组网以后,具体如何寻址,具体的编程步骤是自己来搞的,并没有实际的规定,只是485能够提供这个功能。
总结
以上就是我对于RS232传输协议和RS485传输协议的理解了,由于我后面会写USART的具体编程的博客,RS232和RS485的编程和USART是一样的,所以我后面就不会再写RS232和RS485的编程的博客了。并且希望各位大佬能对我的博客不吝赐教,感谢大嘎!!