通信-RS232、RS485、RS422串口

本篇内容武汉利又德的小编主要针对 RS232、RS485 与 RS422 串口、优缺点、针脚定义的内容做了介绍,所用集成的介绍与其相关电路,验证串口好坏与波特率实测,STM32 的 URAT 与单片机串口调试的几个小招数等。

目录:

一、RS232、RS485与RS422介绍

1、RS422/RS232/RS485简述

2、RS232/RS485/RS422电平

3、传输方式

二、RS232/485优缺点及针脚定义

1、RS232优缺点

2、RS485优缺点

3、DB9针脚定义

4、USB转RS232

三、芯片介绍与相关电路

1、SP3232EEN与SP232EEN区别

2、SP485EE电路形式

3、RS232转RS485电路

4、USB转串口(RS232)电路图

四、验证串口好坏与波特率实测

1、验证串口好坏

2、解决COM串口被占用

3、STM32串口1只能发不能收

4、波特率测试

五、单片机串口的几个小招数

1、函数发生器当串口发送器用

2、验证串口远距离传输

3、同步头的作用

4、虚拟串口

六、STM32的USART

1、USART的RTS、CTS介绍

2、STM32硬件流控配置

七、串口监控

1、软件监控Serial Monitor

2、串口监控线的制作

附录

1、波特率与字节传输速率计算

2、更改电脑串口号

一、RS232、RS485与RS422介绍

1、RS232/RS485/RS422简述

EIA-422 (过去称为 RS-422) 是一系列规定采用 4线、全双工、差分传输、多点通信的数据传输协议。它采用平衡传输、单向/非可逆,有使能端或无使能端的传输线。

和 RS-485 不同的是 EIA-422 不允许出现多个发送端而只能有多个接收端。硬件构成上 EIA-422(RS-422) 相当于两组 EIA-485(RS-485),即两个半双工的 EIA-485(RS-485) 构成一个全双工的 EIA-422(RS-422)。

RS-422 差模传输,故其抗干扰能力强,能传 1200米,RS232 最多传输 15米。

2、RS232/RS485/RS422电平

1)RS232电平

逻辑 1 (MARK 检验位固定为 1) -3V~-15V

逻辑 0 (SPACE 检验位固定为 0) +3V~+15V

介于 -3V~+3V 之间的电压无意义,低于 -15V 或高于 +15V 的电压也认为无意义。

2)RS485、RS422电平

RS485 电平和 RS422 电平由于两者均采用差分传输(平衡传输)的方式,所以它们的电平方式,一般有 A、B 两个引脚。

发送端 AB 间的电压差:

+2V~+6V 逻辑 1

-2V~-6V 逻辑 0

接收端 AB 间的电压差:

大于 +200mV 逻辑 1 B > A 的状态

小于 -200mV 逻辑 0 A > B 的状态

B 之间的电压差不小于 200mV。

3、传输方式

单工、半双工和全双工通信定义:

单工是指在通信过程的任意时刻,信息只能由一方 A 传到另一方 B 的单向传输;半双工是指在任意时刻,信息既可由 A 传到 B,又能由 B 传 A,但只能由一个方向上的传输存在,称为半双工传输。全双工指在任意时刻,信息既可由 A 传到 B,又能由 B 传 A 的双向传输。

RS232:3线制、全双工、点对点主从,最高传输速率 20Kbps,项目应用:电力-DTU基础讲解与配置汇总。

RS485:2线制、半双工、点对多,最高传输速率 10Mbps,项目应用:ModBus RTU-上位机与PLC通信。

RS422:5线制、全双工、点对多主从,最高传输速率 10Mbps,项目应用:三菱PLC-信捷人机通信(编程)。

RS232 与 RS485 同为异步数据传输方式,都是用于数字信号的传输,仅仅是传输的方法不同。以传输一个 8位二进制数值 “01001000” 为例说明。

1)RS232传输方式

由于 RS232 采用三线制传输分别为 TXD、RXD、GND,其中 TXD 为发送信号,RXD 为接收信号。

在 RS232 中任何一条信号线的电压均为负逻辑关系。即:逻辑 “1”,为信号线对 GND 电压为 -5V~-15V;逻辑 “0”,为信号线对 GND 电压为 +5V~+15V。理论上说,当要发送 “01001000” 这个数据时,在 TXD 信号线上应该测量到的波形为:

图片

之所以说是理论上,是因为在异步数据传输时,要增加起始位、校验位、结束位。

2)RS422/RS485传输方式

采用 4线差分传输,发送数据线为 T+\T-,接收数据线为 R+\R-。

在 RS422 总线中:数据 “1” 以两线间的电压差为 +2V~+6V 表示;数据 “0” 以两线间的电压差为 -2V~-6V 表示。理论上说,当要发送 “01001000” 这个数据时,在 T+/T- 直接的差值在信号线上应该测量到的波形为:

图片

也就是说,RS232 的数据是 TXD 与 GND 之间的电压代表数据,而 RS422 的数据是 T+ 与 T- 之间的电压代表数据。差分信号抗干扰性强,所以 RS422 更加适合于远距离传输。

RS485 是 RS422 的半双工版本,即 T+/T- 与 R+/R- 不同时存在,传输线只有两根,当发送信号时切换为 T+/T-,当接收信号时,切换为 R+\R-。至于传输的方式与 RS422 一致。

3)消除通讯线的差共模干扰

RS485 通信线由两根双绞的线组成,它是通过两根通信线之间的电压差的方式来传递信号,因此称之为差分电压传输。

差模干扰在两根信号线之间传输,属于对称性干扰。消除差模干扰的方法是在电路中增加一个匹配电阻,并采用双绞线(双绞线与PCB差分信号布线)。

共模干扰是在信号线与地之间传输,属于非对称性干扰。消除共模干扰的方法:

①采用屏蔽双绞线并有效接地;

②强电场的地方还要考虑采用镀锌管屏蔽;

③布线时远离高压线,更不能将高压电源线和信号线捆在一起走线;

④采用线性稳压电源或高品质的开关电源(纹波干扰小于 50mV)。

485总线要采用手拉手结构,而不能采用星形结构。星形结构会产生反射信号,从而影响到 RS485 通信。总线到每个终端设备的分支线长度应尽量短,一般不要超出 5米。分支线若未接终端,会有反射信号,对通讯产生较强的干扰,应将其去掉,最好在 RS485 设备两头接有 120Ω 终端电阻。

采用增加 1个 RS485 分配器。可以有效地将星形连接转换为符合 RS485 工业标准所规定的连接方式,从而避免产生问题,提高通信可靠性,如图所示。

图片

二、RS232/485优缺点及针脚定义

电路中常用 DB9 形式连接,管脚定义为 2(RXD)、3(TXD)、5(GND),记作 2R+3T = 5G (2G 接收 3G 发送的值为 5G)。因此习惯的又把 RS232 接口叫做 DB9。

市场上把公头的接插件叫做 DR**,母头叫做 DB**,比如我们电脑上的串口,在市场上叫做 DR9,不是 DB9,很多人都误叫做 DB9,实际上 DB9 是把两个 DR9 互相连接在一起的接口。一般教材或文章中,大家常常把所有的串口设备接口都统一叫做 RS232 接口。

1、RS232优缺点

由于 RS232 接口标准出现较早,具有以下特点:

  • 接口的信号电平值较高,易损坏接口电路的芯片,又因为与 TTL 电平不兼容故需使用电平转换电路方能与 TTL 电路连接。

  • 传输速率较低,异步传输时,波特率 20Kbps。

  • 接口使用1根信号线和1根信号返回线而构成共地的传输形式,容易产生共模干扰,所以抗干扰性弱。

  • 传输距离有限,最大传输距离标准值为 50英尺,实际上也只能用在 15米左右。

  • 接收数据的发送数据分开,可以同时接收和发送数据,异步全双工传输。

2、RS485优缺点

针对 RS232 接口的不足,于是就不断出现了一些新的接口标准,RS485 就是其中之一,它具有以下特点:

  • RS485 的电气特性:逻辑“1”以两线间的电压差为 +(2~6)V 表示;逻辑 “0” 以两线间的电压差为 -(2~6)V 表示。接口信号电平比 RS232 降低了,就不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。

  • RS485 的数据最高传输速率为 10Mbps。

  • RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。

  • RS485接口的最大传输距离标准值为 4000英尺,实际上可达 3000米,另外 RS232 接口在总线上只允许连接 1个收发器,即单站能力。而 RS485 接口在总线上是允许连接多达 128个收发器。即具有多站能力,这样用户可以利用单一的 RS485 接口方便地建立起设备网络。

  • RS485 接口组成的异步半双工网络,一般只需二根连线(叫做 AB 线),不接地线,所以 RS485 接口均采用屏蔽双绞线传输。

3、DB9针脚定义

图片

图片

4、USB转RS232

图片

三、芯片介绍与相关电路

1、SP3232EEN与SP232EEN

1)两者实物图片

图片

2)检测电路

3)检测结果

SP3232EEN 比 SP232EEN 通信波特率要高,SP3232EEN 可以在 115200 及以上;SP232EEN 在 19200 及以下。

4)MCU与设备通讯

MCU 与 DCE 通讯可以有两种方式,通过串口芯片或直连,如下图。

图片

若 MCU 与 DEC 之间的电平不同,比如 MCU 3.3V、DEC 1.8V,那么就需要电平转换, 祥见“电平转换与数字隔离”,这里可以通过 TXB0108RGYR 专用芯片转换。考虑到成本问题,也可以是三极管组成的简单电平匹配电路,如下图所示。

图片

2、SP485EE电路形式

1)芯片简介

SP485EEN/SP3485EEN 为 SOIC 封装,SP485EEP/SP3485EEP 为 PDIP 封装。其中 SP485EE 一般 5V 电源,SSP3485EE 可用在 3.3V 供电场合。

图片

功能框图

图片

SP485EE引脚定义

图片

SSP3485EE引脚定义

接收器特性:RE 为低电平时,SSP3485 进入接收器模式。功能真值表如下图所示:

图片

驱动器特性:DE 为高电平时,SP3485 进入驱动器模式。功能真值表如下表所示:

图片

2)一般应用电路

图片

上图中,TX、RX 引脚均需要上拉电阻,这一点特别重要。

接收:默认没有数据时,TX 为高电平,三极管Q1 导通,RE 为低电平使能,RO 收数据有效, RS485 为接收态。

发送:发送数据 1 时,TX 为高电平时,三极管导通,DE 为低电平,此时收发器处于接收状态,驱动器就变成了高阻态,也就是发送端与A\B断开了,此时 A\B 之间的电压就取决于 A\B 的上下拉电阻了,A 为高电平、B 为低电平,也就成为 RS485 的逻辑 1 了。

发送数据 0 时,TX 为低电平,三极管截止,DE 为高电平,驱动器使能,此时正好 DI 接地,也就是低电平,驱动器也就会驱动输出 B 为 1,A 为 0,也就是所谓的 RS485 的逻辑 0 了。

理解自收发的作用,关键是要理解 RE 和 DE 的作用,尤其是 DE 为 0 时,驱动器与 A\B 之间就是高阻态,也就是断开状态,而且 A/B 都要有上下拉电阻。然后就有了逻辑 0-1 间的切换。所以很巧妙,但这里也有一个很明显的 Bug,只适用于“半双工”,如果是全双工就不行了,因为 TX 为 1 时,接收使能,此时从机如果回复数据就乱了。

基本原理理解了,除了使用三极管实现,还可以使用施密特触发器,也就是所谓的“非”门来显现,如下图所示:

图片

基本原理与三极管相同,TX 为 1 时,经过施密特触发器进行“非”运算,DE 为 0,则接收使能,驱动器呈高阻态,此时 A/B 的电平就是上下拉电阻的电平,也就是逻辑 1。TX 为 0 时,DE 为 1,发送使能,由于 DI 接地,也就是 0,A/B 输出也是 0。

3)带隔离的RS485电路

图片

3、RS232l转RS485电路

由于有的设备是 RS232 接口的,有的是 RS485 接口的。如果有一台 RS232 接口的设备与一台 RS485 接口的设备通信,那就需要一个 RS232/RS485 转换器,把 RS232 接口的设备的 RS232 信号转换成 RS485 信号,然后再与 RS485 接口的设备通信。如是两台 RS232 接口的设备要进行远距离的通信,那只要加上两个 RS232/RS485 转换电路就可以了。

市场上所谓的“无源 RS232/RS485 转换器”采用从计算机串口偷电技术,一般多用于负载少,通信距离短的 RS485 总线网络。

而“有源 RS232/RS485 转换器”在电路原理图与前者差不多,只是电源部分有所改动而己。有源的转换器相互间不共地,比无源的转换器抗干扰性能更好,说明如下。

1)电路图

图片

2)无源转换原理

RS232/RS485 转换器主要包括了电源、RS232 电平转换、RS485 电路三部分。本电路的 RS232 电平转换电路采用了 NIH232 或者也可以直接使用 MAX232 集成电路,RS485 电路采用了 MAX485 集成电路。为了使用方便,电源部分设计成无源方式,整个电路的供电直接从 PC 机的 RS232 接口中的 DTR (4脚) 和  RTS (7脚) 窃取。PC串口每根线可以提供大约 9mA 的电流,因此两根线提供的电流足够供给这个电路使用了。

经实验,本电路只使用其中一条线也能够正常工作。使用本电路需注意 PC 程序必须使串口的 DTR 和 RTS 输出高电平,经过 D3 稳压后得到 VCC,经过实际测试,VCC 电压大约在 4.7V 左右。因此,电路中要说 D3 起的作用是稳压还不如说是限压功能。

MAX485 是通过两个引脚 RE (2脚) 和 DE (3脚) 来控制数据的输入和输出。当 RE 为低电平时,MAX485 数据输入有效;当 DE 为高电平时,MAX485 数据输出有效。在半双工使用中,通常可以将这两个脚直接相连,然后由 PC 或者单片机输出的高低电平就可以让 MAX485 在接收和发送状态之间转换了。

由于本电路 DTR 和 RTS 都用于了电路供电,因此使用 TX 线和 HIN232 的另外一个通道及 Q1 来控制 MAX485 的状态切换。平时 NIH232 的 9脚输出高电平,经 Q1 倒相后,使 MAX485 的 RE 和 DE 为低电平而处于数据接收状态。当 PC 机发送数据时,NIH232 的 9脚输出低电平,经 Q1 倒相后,使 MAX485 的 RE 和 DE 为高电平而处于数据发送状态。

3)RS485接口保护电路

图片

4、USB转串口(RS232)电路图

1)PL2303连接电路

图片

2)CH341连接电路

图片

图片

四、串口问题与波特率实测

1、验证串口好坏

2、解决COM串口被占用

1)故障现象

很多 COM 端口都显示在使用中,重启都无法关掉,但实际只使用了一个串口。

图片

2)解决方法

①WIN+R 输入 regedit 进入注册表编辑器。

②打开注册表 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/COM Name  Arbiter,把 ComDB 删除后重新尝试即可!(注:这样会重建所有 COM 口)。重启电脑后,发现没有效果。

③卸载相关设备

图片

图片

卸载不需要的设备,如下图。

图片

最终解决。

3、STM32串口1只能发不能收

1)串口接收中断没有打开。

2)一个串口使用两个串口芯片,如下图所示。此时两个 RXD 相互干扰,造成不能接收。

图片

4、波特率测试

1)实验方法

将板子上的串口初始化之后,循环发送数据。

while(1)

{

    USART_SendData(USART1,0xAA);

}

之后每测量一次改一次波特率。串口初始化的方法,可参考 USART1 Init。

2)两种波特率示波器实测

(1)9600

图片

(2)115200

图片

3)总结

波特率是脉冲频率的二倍。一个波形一秒钟发送的次数是多少,波特率就是多少。比如波特率是 9600 时候,测得的脉冲宽度是 104.2uS,波形频率是 4.8k,4.8k*2 = 9600bps。看完上面的图,再看看理论知识:波特率,说的还真对。

五、单片机串口的几个小招数

1、函数发生器当串口发送器用

若要调试串口,只有一块板,计算机又不在手边,你可以用函数发生器器当串口发送器来用,如你的波特率是 9600,那你把函数发生器频率调到 9600/2 = 4800Hz 上输出 TTL 电平直接到 RXD 上就行了。

如果是 RS232 接口,你频率不变就选函数发生器双极性(交流输出)就是了,注意电平有峰峰值 12VPP 就够了,此时你的单片机收到数据必须是 55H,你可以用 MOV P1,SBUF,在 P1 上去测电压,这样没显示也可测试串口了。理论依旧:

55H = 01010101 串口起始位是 0,先发 55H 最低位,于是一帧就是 0 (启始) 101010101 (停止)................0 (启始) 101010101 (停止)......正好是 1/2 波特率的方波。

2、验证串口远距离传输

验证其传输的可靠性,信号与传输媒介的适配性。

可以这样来做:发送 00H 0FFH 55H,如果这三个值都能正确接收,那网络一定能可靠传输,这就是以点代面的测试方法。

理由:00H 0FFH 是最宽的脉冲和电平(代表能量)最大/最小的脉冲,用信号系统话说他们代表是直流,而 55H 是最窄脉冲,它代表是最高频和能量中间值。既然最低的能过,最大也能过,最宽能过最窄也能过,大能量 (抗干扰强) 低能量 (代表抗干扰弱) 中能量也能过,你会相信中间的和不垃圾的过不了吗!

3、同步头的作用

初始实现波特率自适应与判断数据包开始。

同步头用谁 ?------7FH,且开始同步时连续发送!

看 7FH 的发送  0起始 11111110---1 停止

瞧 011111110 多对称!当你收到两个 0 中间夹了连续个 1 的数据后,只要用连续 1 的时间除以 0 的持续时间 = 7,说明这就是同步头了,且一个标准码元持续时间就是码元 0 的持续时间,其波特率 = 1/(0 码元持续时间)。

4、虚拟串口

关于虚拟串口使用的详细内容:大彩触摸屏与单片机通讯之1)设置 VSPD 软件,ModBus_RTU通讯规约2之六、VSPD9.0调试ModBus。

六、STM32的USART

1、USART的RTS、CTS介绍

USART 中 RX 和 TX 这两个引脚的功能,这两个引脚是 USART 串行通信最常见和必不可少的两个引脚。但我们在手册中会发现关于 USART 的其它引脚:USART_CK、USART_RTS、USART_CTS,如下图:

图片

ARM 处理器 USART 基本上都具有硬件流控功能,也就是说一般都有 RTS、CTS 引脚 (51、STM8等功能简单的处理器,很少有串口硬件流控功能)。

RTS:是模块的输入端,用于 MCU 通知模块,MCU 是否准备好,模块是否可向 MCU 发送信息,RTS的有效电平为低。

CTS:是模块的输出端,用于模块通知 MCU,模块是否准备好,MCU 是否可向模块发送信息,CTS的有效电平为低。

RTS (Require ToSend 发送请求) 为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

CTS  (Clear ToSend 发送允许) 为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。

2、STM32硬件流控配置

图片

七、串口监控

1、软件监控Serial Monitor

图片

图片

Serial Monitor 软件的下载移步“Serial Monitor(串口数据监控_Win64位可用)”。

2、串口监控线的制作

控制器与通讯盒之间进行正常的通讯,串口线1、串口线2连接于电脑端。

“串口线1”用于监测控制器接收到通讯盒的数据,“串口线2”用于监测控制器发送给通讯盒的数据。

图片

附录

1、波特率与字节传输速率计算

以波特率115200 = 115200 (bit/S) 为例说明:

没有校验位,就应该除以 10 (起始位 1、数据位 8、停止位 1),得到的是每秒字节数。

波特率 115200 = 115200(bit/S) = 11520(Byte/S)

再除以 1024,就是每秒 KB 数:波特率115200 = 115200(bit/S) = 11.25(KB/S)

有一位奇偶校验位,就应该除以 11(起始位 1、数据位 8、停止位 1、奇偶校验位 1),得到的是每秒字节数。

波特率 115200 = 115200(bit/S) = 10.27(KB/S)

2、更改电脑串口号

图片

右键,属性。

图片

端口设置,高级。

图片

点击 “COM 端口号” 下拉框,从中选择一个未被使用端口,确定。

图片

回到设备管理器,COM 端口号更改生效。

不过此时打开端口,一般都会提示打开错误,重新插拔一次端口设备即可被使用。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值