一、RS485相关
RS485属于物理层,为2线,半双工、多点通信的标准。用缆线两端的电压差值表示传递信号。
特点:
1、RS485电气特性:逻辑“1”以两线间的电压差为+(2-6)V表示,逻辑“0”以两线间的电压差为-(2~6)V 表示。与TTL电平兼容。
2、传输速率高。10 米时,RS485 的数据最高传输速率可达 35Mbps,在 1200m 时,传输速度可达 100Kbps。
3、抗干扰能力强。RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强。
4、传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最大的可以支持到 400 个节点。
例如:某款STM32103的RS485传输采用SP3485芯片作为收发器。支持3.3V供电,
关键函数:
//发送len个字节
void RS485_Send_Data(u8 *buf,u8 len)
{
RS485_TX_EN=1;//设置为发送模式
HAL_UART_Transmit(&USART2_RS485Handler,buf,len,1000);//串口 2 发送数据
RS485_RX_CNT=0;
RS485_TX_EN=0;//设置为接收模式
}
//RS485查询接收到的数据
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;//清零
}
}
使用两个开发板,下载程序编译后就可以进行数据收发了。