从业两年来看了很多技术类的书籍,学了很多新的东西,还是感觉不踏实。一是看的东西比较杂,知识没有成体系;二是没有动手做过一个比较完整的小项目。鉴于此,我决定开始做做小项目,并完整的记录下来。
对于基于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消息帧格式
在RTU模式中,消息的发送和接收以至少3.5个字符时间停顿间隔为标志。在最后一个传输字符结束之后,一个至少3.5个字符时间 的停顿标定了消息的结束,而一个新的消息可在此停顿后开始。如果两个字符之间的空闲间隔大于1.5个字符时间,那么认为报文帧不完整,该报文将被丢弃。
STM32基于RS485的MODBUS通讯学习笔记(二)zhuanlan.zhihu.com