1. 485简介

485(一般称作RS485/EIA-485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。

2. RS485特点

(1)RS485通信采用差分信号传输,以A、B的电压差表示数据的“0”和“1”;其中,VA­-VB≥+200mV表示逻辑“1”;VA­-VB≤-200mV表示逻辑“0”。

(2)传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速率可达100Kbps;

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

(4)传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。

3. RS485连接方式

RS485推荐使用在点对点、线型、总线型网络中,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。

若没有特性阻抗的话,当所有的设备处于空闲状态时,由于A、B都没有输出,此时A、B之间的点压差处于一个不确定的值,可能导致错误数据。一般添加匹配电阻时,选择在起止位置加入,也就是主机和设备4上各添加一个120Ω的匹配电阻。

添加配置方法如下:

4. RS485控制(SP3485为例)

一般应用中,将Pin2 和Pin3连接在一起,使用控制器的一个管脚进行收发状态控制。由于RS485为半双工收发器,因此当需要发送数据时,需先设置Pin3(DE)为高电平;当需要接受数据时,需先设置Pin3(DE)为低电平。

5. 例程

设备空闲状态下,默认处于接收模式,如果要发送数据,则需要在发送前设置为发送模式,且在发送完成后,恢复接收模式。

(1)RS485发送数据:

//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len)
{
    u8 t;
    RS485_TX_EN=1;       //设置为发送模式
     for(t=0;t<len;t++)      //循环发送数据
    {        
       while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);  
       USART_SendData(USART2,buf[t]);
    }    
 
    while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);   
    RS485_RX_CNT=0;    
    RS485_TX_EN=0;              //设置为接收模式  
}

(2)RS485接收数据

//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
    u8 rxlen=RS485_RX_CNT;
    u8 i=0;
    *len=0;         //默认为0
    delay_ms(10);     //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
    if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
    {
       for(i=0;i<rxlen;i++)
       {
           buf[i]=RS485_RX_BUF[i]; 
       }     
       *len=RS485_RX_CNT;   //记录本次数据长度
       RS485_RX_CNT=0;      //清零
    }
}

5. 调试记录

在实际使用中,有时出现RS485传输数据乱码的状况;此时,强烈建议先检查硬件电路,确认RX、TX接收端的匹配电路是否一致?

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:接口协议,嵌入式