RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
主要特性
图1 仅供参考
典型的串行通信标准是RS232和RS485,它们定义了电压,阻抗等,但不对软件协议给予定义,区别于RS232, RS485的特性包括:
1、 RS-485的电气特性:逻辑‘’1‘’以两线间的电压差为+(2—6)V表示;逻辑‘’0‘’以两线间的电压差为-(2—6)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL 电路连接。
2、RS-485的数据最高传输速率为10Mbps 。
3、 RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
4、RS-485接口的最大传输距离标准值为4000英尺(约1219米),实际上可达 3000米,另外RS-232-C接口在总线上只允许连接1个收发器,即单站能力。而RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。应用RS-485 可以联网构成分布式系统。RS-485的‘’节点数‘’主要是依‘’接收器输入阻抗‘’而定。
图2
因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。因为RS485接口组成的半双工网络一般只需二根连线,所以RS485接口均采用屏蔽双绞线传输。 RS485接口连接器采用DB-9的9芯插头座,与智能终端RS485接口采用DB-9(孔),与键盘连接的键盘接口RS485采用DB-9(针)。
串口协议只是定义了传输的电压,阻抗等,编程方式和普通的串口编程一样
//使用时需要注意的一些问题-->以下是经过实际测试应用的(例子是使用了STM32F1芯片)
//发送单个字节数据
void _485_SendByte(u8 ch){
USART_SendData(USART2, ch);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//等待发送数据寄存器为空
while(USART_GetFlagStatus(USART2, USART_FLAG_TC ) == RESET);//等待发送数据完成(这句比较重要,如果你未等发送完成,就切换485为接收状态,可能导致数据错乱)
}
//发送485 字串命令
void _485_SendCmd(u8 *dat, u16 len)
{
_485_SendEnable(ENABLE);//485为发送状态
delay_us(200); //必须要等待一点时间,如果不加延时,可能会有还未切换到发送状态后而导致数据错乱(实际测试发现)
for(u16 i=0;i<len;i++)
{
_485_SendByte(dat[i]);
}
_485_SendEnable(DISABLE); //485为接受状态
}