- 串口
- RS232 RS485
- RS232 RS485区别
- 协议
- 串口232与485转换
开发中,经常要和硬件用串口通讯读写数据,一直以来,只懂应用,不懂基理,于是乎,这篇文章诞生了。
串口
COM口即串行通讯端口,简称串口。这里区别于USB的“通用串行总线”和硬盘的“SATA”。一般我们见到的是两种物理标准。D型9针插头,和4针杜邦头两种。这是常见的4针串口,在电路板上常见,经常上边还带有杜邦插针。有时候有第五根针,接电源端。
下面这个就是D型9针串口(通俗说法)。在台式电脑后边都可以看到。这种接口的协议只有两种:RS-232和RS-485。不会是TTL电平的(除非特殊应用)。我们一般只接出RXD TXD两针,外加GND。
TTL、RS-232、RS-485是什么
嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232、RS-485是指的电平标准(电信号),都是一种逻辑电平的表示方式。
1. TTL
TTL指双极型三极管逻辑电路,市面上很多USB转TTL模块,实际上是USB转TTL电平的串口模块。这种信号0对应0V,1对应3.3V或者5V。与单片机、SOC的IO电平兼容。不过实际也不一定是TTL电平,因为现在大部分数字逻辑都是CMOS工艺做的,只是沿用了TTL的说法。我们进行串口通信的时候,从单片机直接出来的基本是都是TTL电平。
TTL电平:全双工(逻辑1: 2.4V–5V 逻辑0: 0V–0.5V)
-
硬件框图如下,TTL用于两个MCU间通信
-
0和1表示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQFlVxGt-1607954693373)(https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/1fc03ff6e1d53ef74b8537f7824e2258)]
2. RS232
RS232是电子工业协会(EIA)制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。RS232 的逻辑电平和TTL不一样但是协议一样。
RS-232电平:全双工(逻辑1:-15V–5V 逻辑0:+3V–+15V)
-
硬件框图如下,TTL用于MCU与PC机之间通信
-
0和1表示
3. RS485
RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-(26)V表示0,两线压差为+(26)V表示1。
RS-485:半双工、(逻辑1:+2V–+6V 逻辑0: -6V—2V)这里的电平指AB 两线间的电压差。
-
硬件框图如下
-
0和1表示
协议
协议分为硬件协议和软件协议,而通讯协议属于软件协议。协议就是规定了一种"暗语",让主从站之间可以"通话"。也就是把0和1翻译成双方都明白的命令。协议它包含报头包围的格式,MODBUS是应用层的通讯协议,主要用于传送和接收文件包的格式。而RS232,RS485是物理层的串行接口,它可以支持几十种通讯协议,MODBUS只是其中的一种。MODBUS可分为 MODBUS RTU/ACSI,MODBUS+(也叫MODBUS PLUS)和MODBUS tcp/ip等。前两种是在串行链路上使用的通讯协议(串口通讯),后一种是在以太网口基于TCP/IP协议的MODBUS通讯协议。
看概念还很模糊,举个例子就明白了。一个人从香港去澳门,人就是文件,香港是主机,澳门是从机。从香港去澳门可以走水路或航空,水路可以是RS232,RS485(二者之间RS485速度更快些,没有太大的区别),航空可以是以太网。交通工具船和飞机可以分别看成应用层的MODBUSRTU/MODBUS PLUS和MODBUSTCP/IP。而在这里当然船也可以是轮船或汽艇,可以是RS485支持的其他通讯协议RS232和RS485只负责把路修好,连通后MODBUS就像车和船等交通工具,路修好了如果有码头就可以走船,如果有车站就可以走汽车。(一个是路一个是更高一层的交通工具)
串口只是硬件形式,RS232,RS485是基于这个硬件形式传输电平信号,基于这个硬件形式和信号,可以定义很多种通讯协议,如标准的MODBUS协议。
232与485的区别
1. 传输信号不同
RS485是差分(差分信号)传输,RS232是非差分(同分信号)传输的。
2. 抗干扰能力不同
232只能是点对点,而485可以一对多(一主多从),还有485用的电流环方式,搞干扰强,传输距离远(232是电压型信号,一般10来米就差不多了,485理论上可以到1000米,不过我实际上最好不要超过600米,速率在9600以下)。232最少是3线,收发地,485是2线方式(所谓A/B线)。
对于软件来说,RS485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。就编程上来看,RS485与RS232并没有区别。对于计算机来说如果在232串口上进行485通讯的话,要加入一个RS232/RS485转换模块才行。