STM32-RS485
RS485通信介绍: 典型的串口通信标准有RS232和RS485,RS232是全双工点对点的通信,而RS485是半双工通信(2线制),可以一点对多点进行组网,而且RS485是用缆线两端的电压差值来表示传递信号,这与RS232电气特性大不一样。RS485 仅仅规定了接受端和发送端的电气特性,并没有规定或推荐任何数据协议,因此RS485的协议层可以和RS232一样。
硬件连接图:
code: 将引脚设置好,因为是半双工通信,所以这边是通过控制485RE引脚实现处于发送模式还是接受模式,其它和串口配置一样的使用。
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;
}
void RS485_Receive_Data(u8 *buf,u8 *len)
{
u8 rxlen=RS485_RX_CNT;
u8 i=0;
*len=0;
delay_ms(10);
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;
}
}
|