RS485通信模块使用及代码【简】

1、485模块简介

485,通信接口的远程称重数据采集方法,在要求通信距离为几十米到上千米时,广泛采用 RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。

大致意思:

具有rs485硬件接口,并且采用协议进行数据传输的一种设备。

①从某宝的RS485截图

②作用:这个模块主要可用来进行MCU与MCU之间的通信,支持一个主机多个从机(串口通信一对一), 并支持MODBUS通信协议。

2、连接方式

这里以STM32F103C8T6最小系统板为例,电源可以接3.3/5V。连接方式如下图。

 实现两个单片机之间的通讯需要两个485模块,通常情况下RE与DE要连接在一起,具体解释请参考这位博主的文章,很详细。

(36条消息) RS485模块的介绍及引脚连线说明_6柒的博客-CSDN博客_485模块https://blog.csdn.net/weixin_44035986/article/details/116792884

       

连接实物方式如下,至于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;	//进入接收模式
}

  • 2
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
RS485通信是一种常用的串行通信协议,可用于实现远距离、高速率、多节点通信。以下是一个单的RS485通信的示例代码: ```c #include <SoftwareSerial.h> #define RX_PIN 2 #define TX_PIN 3 #define DE_PIN 4 #define RE_PIN 5 SoftwareSerial rs485(RX_PIN, TX_PIN); void setup() { Serial.begin(9600); rs485.begin(9600); pinMode(DE_PIN, OUTPUT); pinMode(RE_PIN, OUTPUT); digitalWrite(DE_PIN, LOW); digitalWrite(RE_PIN, LOW); } void loop() { digitalWrite(DE_PIN, HIGH); digitalWrite(RE_PIN, HIGH); rs485.write("Hello"); delay(1000); digitalWrite(DE_PIN, LOW); digitalWrite(RE_PIN, LOW); while(rs485.available()) { Serial.write(rs485.read()); } } ``` 在这个示例中,我们使用了软串口库来模拟RS485通信。我们将RX和TX引脚连接到我们的Arduino板上的数字引脚2和3,将DE和RE引脚连接到数字引脚4和5。我们在setup()函数中初始化了软串口和引脚模式,并在loop()函数中发送了一个单的字符串“Hello”。在发送数据之前,我们将DE和RE引脚设置为高电平,表示我们要发送数据。发送完成后,我们将DE和RE引脚设置为低电平,以便接收数据。我们使用rs485.available()函数来检查是否有数据可用,如果有,我们使用rs485.read()函数读取数据并将其打印到串行监视器。 除了软串口,还有一些硬件串口模块可以实现RS485通信,例如MAX485模块。MAX485模块可以将普通的UART串口信号转换为RS485信号,并且可以自动控制DE和RE引脚的状态。以下是一个使用MAX485模块的示例代码: ```c #include <SoftwareSerial.h> #define RX_PIN 2 #define TX_PIN 3 #define MAX_DE_RE_PIN 4 SoftwareSerial rs485(RX_PIN, TX_PIN); void setup() { Serial.begin(9600); rs485.begin(9600); pinMode(MAX_DE_RE_PIN, OUTPUT); digitalWrite(MAX_DE_RE_PIN, LOW); } void loop() { digitalWrite(MAX_DE_RE_PIN, HIGH); rs485.write("Hello"); delay(1000); digitalWrite(MAX_DE_RE_PIN, LOW); while(rs485.available()) { Serial.write(rs485.read()); } } ``` 在这个示例中,我们使用了MAX485模块来实现RS485通信。我们将模块的DE和RE引脚连接到数字引脚4,将RX和TX引脚连接到数字引脚2和3。我们在setup()函数中初始化了软串口和引脚模式,并在loop()函数中发送了一个单的字符串“Hello”。在发送数据之前,我们将MAX_DE_RE_PIN引脚设置为高电平,表示我们要发送数据。发送完成后,我们将MAX_DE_RE_PIN引脚设置为低电平,以便接收数据。我们使用rs485.available()函数来检查是否有数据可用,如果有,我们使用rs485.read()函数读取数据并将其打印到串行监视器。 总之,RS485通信是一种非常有用的通信协议,可以用于实现远距离、高速率、多节点通信。无论是使用软串口还是硬件串口模块,都可以很容易地实现RS485通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值