modbus rtu协议_STM32基于RS485的MODBUS通讯学习笔记(一)

从业两年来看了很多技术类的书籍,学了很多新的东西,还是感觉不踏实。一是看的东西比较杂,知识没有成体系;二是没有动手做过一个比较完整的小项目。鉴于此,我决定开始做做小项目,并完整的记录下来。

对于基于RS485的MODBUS通讯,我想每一个工控人都不陌生,具体的一些细节大家可以自行查资料,我只把后面会用到一些知识点写下来。

预备知识:

(一) 对RS485协议、MODBUS协议有一定的了解

(二) 对STM32中的GPIO、时钟、串口、中断、定时器有一定的了解

(三) 对上位机C#有一定的了解

实验目的:以C#做上位机主站,STM32做下位机从站,实现MODBUS的主从通讯,实现基本的收发功能。

一、 RS485协议与MODBUS协议的区别

RS485协议是硬件层协议,MODBUS协议是软件层协议。硬件层只定义了0、1的逻辑,而没有解释其含义。例如你发送一串代码:

0x01 0x04 0x00 0x00 0x00 0x01 0x31 0xCA

我收到的仍然是这串代码,但我并不知道你想表达什么。这时候就需要用到软件层协议了,MODBUS就是用来解释这些0101代码的含义的,只有按照MODBUS协议的规定去发送代码,对方才能明白你的意思。

这里我只讲大概的意思,具体不明白的自行百度,网上这方面的资料很多就不再赘述。

二、 RTU消息帧格式

29f10eb9456efbc048c2d5e614e8312a.png

在RTU模式中,消息的发送和接收以至少3.5个字符时间停顿间隔为标志。在最后一个传输字符结束之后,一个至少3.5个字符时间 的停顿标定了消息的结束,而一个新的消息可在此停顿后开始。如果两个字符之间的空闲间隔大于1.5个字符时间,那么认为报文帧不完整,该报文将被丢弃。

STM32基于RS485的MODBUS通讯学习笔记(二)​zhuanlan.zhihu.com
Modbus RTU 是一种常用的串行通信协议,用于在不同设备之间进行数据通信。对于 STM32 微控制器,可以通过实现 Modbus RTU 协议来实现与其他设备的通信。 要在 STM32 上实现 Modbus RTU通讯协议,你可以按照以下步骤进行: 1. 硬件连接:将 STM32 的串口(USART)与 Modbus RTU 设备连接。通常,Modbus RTU 设备使用 RS485 或 RS232 接口进行通信。确保正确连接并设置好电气参数。 2. 配置串口:在 STM32 上配置串口(USART)的参数,如波特率、数据位、停止位、校验位等。这些参数需要与 Modbus RTU 设备保持一致。 3. 实现 Modbus 协议:编写代码来实现 Modbus RTU 协议的功能。你可以使用现有的 Modbus 库或自己编写相关的函数。这些函数应该包括读写寄存器、读写线圈等常用的 Modbus 功能。 4. 处理 Modbus 帧:在代码中解析和处理接收到的 Modbus 帧。根据协议规定,你需要正确解析帧头、地址、功能码、数据等字段,并根据功能码执行相应的操作。 5.与其他设备通信:使用串口发送和接收数据来与其他设备进行通信。根据 Modbus RTU 协议规定,你需要构建正确的 Modbus 帧,并通过串口发送给目标设备。同时,你也需要接收并解析来自其他设备的 Modbus 帧。 以上是一个简单的概述,实际上,实现 Modbus RTU 协议可能涉及更多的细节和功能。你可以参考 Modbus RTU协议规范和 STM32 的相关文档,以更好地了解和实现该通讯协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值