找回密码
 立即注册
查看: 6092|回复: 45

ModBus_RTU(4组串口任选+DMA传输的主从机)的lib库使用,STC32实现

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-12-27 11:14:32 | 显示全部楼层 |阅读模式
ModBus_RTU(4组串口任选+DMA传输的/机)的lib库使用,STC32位8051实现
一、准备好自己的代码工程
这里以STC32位8051的点灯工程为例

截图202312270915234058.jpg

编写该代码,可以看到这个0错误,下载进去之后可以看到屠龙刀板子上的P2端口的8个LED开始闪烁,表示这个代码工程无问题


二、添加库文件到自己的工程里里
1.添加附件代码包到工程里

截图202312270919222539.jpg

2.然后按照如下方法调用一下头文件的路径
截图202312270920532837.jpg


3.将库文件添加到工程列表
截图202312270923176294.jpg


4.修改配置文件
4.1头文件
截图202312270926315517.jpg

确认自己工程里的stc32的头文件是否是这个,不是的话修改位自己的头文件

4.2系统时钟
截图202312270927324764.jpg

因为用到了串口,在115200的波特率下,我一般用这个系统时钟,后面所有要使用系统时钟的地方均需要调用config.h,调用这个MAIN_Fosc的宏来获取系统时钟,
截图202312270928462440.jpg

由于原来的工程里也有,且宏定义名称都一样,所以只需要把这个宏删掉,然后修改调用的头文件为config.h即可

4.3宏定义
截图202312270930186994.jpg

如果自己的工程里也有这部分的宏定义,可以屏蔽自己的,统一调用这个config.h来获取数据。


5按照如上的代码改完,工程应该可以编译通过了
截图202312270933249703.jpg

可以看到工程已经0错误,0警告了

三、开始测试串口收发的代码
1添加系统时钟计时变量
截图202312270939033488.jpg

主函数添加这一变量,用来记录系统运行的上一次的时刻

2.添加头文件到代码里
截图202312270948478534.jpg

这个是串口和485口的配置头文件,配合lib文件一起使用的

3选择串口的参数
截图202312270953535670.jpg

截图202312270954251200.jpg

截图202312271004568519.jpg

记得最后在工程里添加串口初始化的函数哦!!

4.编写如下的串口处理代码
截图202312271029373160.jpg


代码完整的如下:
  1. <blockquote>    while(1)
复制代码
这里需要注意的是串口用的端口是定死的,
4路串口的引脚分别是
串口1  --- P16/P17
串口2  --- P46/P47

串口3  --- P50/P51

串口4  --- P52/P53


再来看下这个代码的含义:
Usart_RecCheck是数据接收检查的函数
第一个入口参数是串口结构体的指针,串口1-4分别对应g_tUart1-g_tUart4,这个函数对四个串口均有效
第二个入口参数是运行时间,因为要用超时处理,这里需要提供时间间隔,所以本次时刻减去上一次的时刻就是时间间隔

函数返回值是当前状态  0:未接收到数据   1:接收中   2:接收完成(超过一定的时间没有收到表示接受完成)

Usart_Send是数据发送的函数

第一个入口参数是串口结构体的指针,串口1-4分别对应g_tUart1-g_tUart4,这个函数对四个串口均有效

第二个入口参数是要发送的数据
第三个入口参数是要发送的数据长度


Usart_RecSet是数据接收初始化的函数(用的DMA接收数据,没有超出缓冲区就不会触发DMA接收完成中断,这里用的软件超时中断来判断接收完成,用STC32G8K64可以用串口超时寄存器)


第一个入口参数是串口结构体的指针,串口1-4分别对应g_tUart1-g_tUart4,这个函数对四个串口均有效

第二个入口参数是超时时间,超过一定时间没有接收到数据表示错误,Usart_RecCheck会返回0xff


因为接受到的数据会保存到g_tUart1.g_RxBuf这个数组里,所以直接调用这个数组返回即可, 这里检测的是g_tUart1,也就是串口1

编写完成之后开始编译:
截图202312271030026783.jpg

这里编译完0错误,再来下载,记得要改下图的参数,
截图202312271030309506.jpg 截图202312271030439596.jpg

下载完按照如下接线:
截图202312271032065688.jpg

然后就可以开始测试了:
截图202312271032383806.jpg

可以看到这里发送什么,就会回复什么!说明串口的代码可以正常使用了;

四、开始测试MODBUS RTU主机的代码:

直接编写如下代码:
  1. <blockquote><span style="white-space:pre">                </span>if( Time_Run_Last!=Time_Run )
复制代码
来简单的解析一下:
MODH_Poll是modbus rtu主机运行函数,放在主循环调用就好了。第一个参数是通道号(要几路主机都可以自己在MODBUS_NUM的宏定义)  第二个参数是挂载的串口  第三个就是时间间隔
ModHostMode_SendDeal是数据发送函数,第一个参数是通道号  第二个参数是从机地址 第3个参数是功能码(当前功能码03.06可用,其余的下一版添加)   第4个参数是地址数据个数   第5个参数是数据


所以这个代码就是按下P32按钮读取数据,P33按钮按下写入数据,每次递增!下载进去试一下
截图202312271101192804.jpg

红框圈起来的事P32按下的通信时间,没圈起来的是P33的事件,因为之前按过了几下,这里数据不是从0开始,但是可以看到这里读写功能都是正常了的!


五、开始测试MODBUS RTU从机的代码:



  1. <blockquote><span style="white-space:pre">                </span>if( Time_Run_Last!=Time_Run )
复制代码
截图202312271109359581.jpg
截图202312271110223704.jpg
截图202312271110577250.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:403
  • 最近打卡:2025-04-29 08:28:43

12

主题

319

回帖

2017

积分

金牌会员

积分
2017
发表于 2023-12-27 11:22:01 | 显示全部楼层
谢谢版主,学习到了。
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-12-27 11:24:13 | 显示全部楼层
需要怎么优化升级的,或有什么问题的欢迎留言!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 08:21:55

3

主题

125

回帖

1266

积分

金牌会员

积分
1266
发表于 2023-12-27 11:34:57 | 显示全部楼层
感谢冲哥的例程,改天试验一下
You can you up!~No can no BB!~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-29 10:39:19

1

主题

2

回帖

17

积分

新手上路

积分
17
发表于 2023-12-28 10:21:58 | 显示全部楼层
Modbus库哪里下载
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2023-12-28 15:11:12 | 显示全部楼层
同问,请问这个库在哪里下载?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-12-28 21:39:31 | 显示全部楼层
初版在附件下载,论坛可能不一定会及时更新,最新的代码到时候可以关注下群文件!后面争取把所有复杂的协议全都优化成上手即用的lib库!

MOD测试文件.rar

114.91 KB, 下载次数: 462

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2023-12-29 09:12:26 | 显示全部楼层
电子DI*** 发表于 2023-12-28 21:39
初版在附件下载,论坛可能不一定会及时更新,最新的代码到时候可以关注下群文件!后面争取把所有复杂的协议 ...

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-29 09:14:07 | 显示全部楼层
电子DI*** 发表于 2023-12-28 21:39
初版在附件下载,论坛可能不一定会及时更新,最新的代码到时候可以关注下群文件!后面争取把所有复杂的协议 ...

同时也请把源码发上来就行
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2023-12-11 09:46:39

0

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2024-1-2 20:42:51 | 显示全部楼层
感谢楼主,但是好像看不到那几个代码部分
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:33 , Processed in 0.342334 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表