典型的串口通信标准有 RS232 和 RS485,RS232 是全双工点对点的通信,而RS485 是半双工通信(2 线制),可以一点对多点进行组网,而且 RS485 是用缆线两端的电压差值来表示传递信号,这与 RS232 电气特性大不一样。RS485 仅仅规定了接收端和发送端的电气特性,并没有规定或推荐任何数据协议,因此RS485 的协议层可以和 RS232 一样。
下面我们看下 RS485 的特点:
(1)接口电平低,不易损坏芯片。 RS485 的电气特性:逻辑“ 1”以两线间的电压差为+(2~6)V 表示;逻辑“ 0”以两线间的电压差为-(2~6)V 表示。接口信号电平比 RS232 降低了,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
(2)传输速率高。10 米时,RS485 的数据最高传输速率可达 35Mbps,在1200m 时,传输速度可达 100Kbps。
(3)抗干扰能力强。 RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
(4)传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到128 个或者 256 个节点,最大的可以支持到 400 个节点。
RS485 推荐使用在点对点,线型,总线型网络中,不能使用在星型和环形网络。理想情况下 RS485 需要 2 个终端匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为 120Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。RS485 推荐的连接方式如图 36.1.1 所示:
在 RS485 通信网络中,通常会使用 485 收发器来转换 TTL 电平和 RS485 电平。节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。通常在这些节点中只能有一个主机,剩下的全为从机。在总线的起止端分别加了一个 120 欧的匹配电阻。
我们开发板采用 SP3485 作为收发器,该芯片支持 3.3V 供电,最大传输速度可达 10Mbps,支持多达 32 个节点,并且有输出短路保护。该芯片的框图如图 36.1.2 所示:
图中 A、 B 为 RS485 总线接口,用于连接 485 总线。 RO 是接收输出端,DI 是发送数据输入端,RE 是接收使能信号(低电平有效), DE 是发送使能信号(高电平有效)。因为 RS485 为半双工通信,通过 RE 和 DE 就能控制发送与接收。
本文我们使用 STM32F1 的串口 2 跟 PC 机进行 RS485 通信,这里要特别注意,因为 PC 机不具有 RS485 接口,所以我们需要使用一个 RS232/RS485 的转换器,DB9 接口连接 PC 机,RS485 总线接口连接我们开发板上 RS485 模块的 A 和 B。RS232/RS485 转换器如下图所示:
只要配置好串口 2 功能就可以实现 RS485 通信,串口 2 的配置与串口 1 是类似的,只不过串口 2 是挂接在 APB1 总线上,因此使能串口 2 时钟时要注意。