RS485通信模块使用及代码【简】
1、485模块简介
485,通信接口的远程称重数据采集方法,在要求通信距离为几十米到上千米时,广泛采用 RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
大致意思:
具有rs485硬件接口,并且采用协议进行数据传输的一种设备。
①从某宝的RS485截图
②作用:这个模块主要可用来进行MCU与MCU之间的通信,支持一个主机多个从机(串口通信一对一), 并支持MODBUS通信协议。
2、连接方式
这里以STM32F103C8T6最小系统板为例,电源可以接3.3/5V。连接方式如下图。
实现两个单片机之间的通讯需要两个485模块,通常情况下RE与DE要连接在一起,具体解释请参考这位博主的文章,很详细。
连接实物方式如下,至于RE-DE共线可以用面包板(个人觉得好接一点)
3、代码
①485初始化及发送数据代码
#define RS485_RX_EN PAout(12)
void RS485_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA外设时钟
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; //初始化引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; //2MHZ
GPIO_Init(GPIOA, &GPIO_InitStruct); //根据GPIO_InitStruct初始化
Usart3_Init(115200); //串口3初始化
RS485_RX_EN = 0;//默认进入接收模式
}
void RS485_SendData(unsigned char *str, unsigned short len)
{
RS485_RX_EN = 1; //进入发送模式
while(len--)
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);//等待上一个字节发送完成
USART_SendData(USART3,*str++); //发送一个字节
}
while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);//等待最后一个字节发送完成
RS485_RX_EN = 0; //进入接收模式
}