本文内容整理自野火《STM32 HAL 库开发实战指南—基于F103霸道_V2》、正点原子《STM32F1开发指南-HAL库版本_V1.0.pdf》
RS485 简介
485(一般称作 RS485/EIA-485)是隶属于 OSI 模型物理层的电气特性规定为双线,半双工,多点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。RS485 仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。
RS485 的特点包括:
- 接口电平低,不易损坏芯片。 RS485 的电气特性:逻辑“1”以两线间的电压差为+(2~6)V表示;逻辑“0”以两线间的电压差为-(2~6)V 表示。接口信号电平比 RS232 降低了,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
- 传输速率高。 10 米时,RS485 的数据最高传输速率可达 35Mbps,在 1200m 时,传输速度可达 100Kbps。
- 抗干扰能力强。 RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
- 传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最大的可以支持到 400 个节点。
RS-485 通讯协议由 RS-232 协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。
RS-485 的物理层
差分信号线具有很强的干扰能力,特别适合应
用于电磁环境复杂的工业控制环境中, RS-485 协议主要是把 RS-232 的信号改进成差分信
号,从而大大提高了抗干扰特性。
RS485 的通讯网络示意图:
RS485 的每个节点都是由一个通讯控制器和一个收发器组成,在 RS-485 通讯网络中,节点中的串口控制器使用 RX 与 TX 信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。
RS-485 通讯网络的最大传输距离可达 1200 米,总线上可挂载 128 个通讯节点,而由于 RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑:
- 当 AB 两线间的电压差为 +(2~6)V 时表示逻辑 1
- 当 AB 两线间的电压差为 -(2~6)V 时表示逻辑 0
在同一时刻只能表达一个信号,所以它的通讯是半双工形式的,它与 RS-232 通讯协议的特性对比见下图:
RS-485 与 RS-232 的差异
RS-485 与 RS-232 的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。而由于 RS-485 具有强大的组网功能,人们在基础协议之上还制定了 MODBUS 协议,被广泛应用在工业控制网络中。此处说的基础协议是指前面串口章节中讲解的,仅封装了基本数据包格式的协议(基于数据位),而 MODBUS 协议是使用基本数据包组合成通讯帧格式的高层应用协议(基于数据包或字节)。感兴趣的读者可查找MODBUS 协议的相关资料了解。
由于 RS-485 与 RS-232 的协议层没有区别,进行通讯时,我们同样是使用 STM32 的 USART 外设作为通讯节点中的串口控制器,再外接一个 RS-485 收发器芯片把 USART 外设的 TTL 电平信号转化成 RS-485 的差分信号即可。
参考链接
野火《STM32 HAL 库开发实战指南—基于F103霸道_V2》
正点原子《STM32F1开发指南-HAL库版本_V1.0.pdf》