<a name="_Toc342394260">29.1 485 简介 485(一般称作RS485/EIA-485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。 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Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。485推荐的连接方式如图29.1.2所示: 图29.1.2 RS485连接 在上面的连接中,如果需要添加匹配电阻,我们一般在总线的起止端加入,也就是主机和设备4上面各加一个120Ω的匹配电阻。 由于RS485具有传输距离远、传输速度快、支持节点多和抗干扰能力更强等特点,所以RS485有很广泛的应用。 战舰STM32开发板采用SP3485作为收发器,该芯片支持3.3V供电,最大传输速度可达10Mbps,支持多达32个节点,并且有输出短路保护。该芯片的框图如图29.1.2所示: 图29.1.2 SP3485框图 图中A、B总线接口,用于连接485总线。RO是接收输出端,DI是发送数据收入端,RE是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。 本章,我们通过该芯片连接STM32的串口2,实现两个开发板之间的485通信。本章将实现这样的功能:通过连接两个战舰STM32开发板的RS485接口,然后由KEY0控制发送,当按下一个开发板的KEY0的时候,就发送5个数据给另外一个开发板,并在两个开发板上分别显示发送的值和接收到的值。 本章,我们只需要配置好串口2,就可以实现正常的485通信了,串口2的配置和串口1基本类似,只是串口的时钟来自APB1,最大频率为36Mhz。 <a name="_Toc342394262">29.3 软件设计 打开上一章的工程,首先在HARDWARE文件夹下新建一个RS485的文件夹,然后新建一个rs485.c和rs485.h的文件保存在RS485文件夹下,并将RS485文件夹加入头文件包含路径。 打开rs485.c文件,输入如下代码: #include "sys.h" #include "rs485.h" #include "delay.h" #ifdef EN_USART2_RX //如果使能了接收 //接收缓存区 u8 RS485_RX_BUF[64]; //接收缓冲,最大64个字节. //接收到的数据长度 u8 RS485_RX_CNT=0; void USART2_IRQHandler(void) { u8 res; <span style="background-color: #e5e5e5"><span style="font-size: small"> if(USART2->SR&(1 |