找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10174|回复: 17
打印 上一主题 下一主题
收起左侧

STM32 Modbus主从站实例程序-FreeRTOS

  [复制链接]
跳转到指定楼层
楼主
Modbus-Master-Slave-STM32-HAL-FreeRTOS
源代码来自https://github.com/alejoseb/Modbus-STM32-HAL-FreeRTOS,支持多实例,可以同时使用MasterSlave,原作者使用CubeIDE工程,用不太习惯,我这里做点小修改使用MDK工程,代码初始化由CubeMX生成,简直不要太方便,可以无痛移植到其他STM芯片。
基本设置







启用Freertos,添加任务




设置中断优先级


设置长生成MDK工程



工程里面添加Modbus库





修改main.c






修改freertos.c











编译下载到单片机,完美运行





移植过程非常简单,使用其他型号的芯片只要对应设置即可
附上stm32f070和stm32f103的实例
Modbus103_MDK.rar (873.64 KB, 下载次数: 354)

ModbusF070_MDK.rar (878.89 KB, 下载次数: 134)

不过这个主站发送指令显示有点繁琐,另附上一个同样是在Github挖回来的Modbus库
ModBus-库.rar (10.9 KB, 下载次数: 240)

这个同样支持主从站多实例,里面有中文注释,希望有兴趣的朋友移植一下并放出来方便一下大家.

评分

参与人数 2黑币 +60 收起 理由
IdeaMing + 10 很给力!版主给的奖励不够!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏27 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108573 发表于 2020-11-19 08:21 | 只看该作者
不错,多一些这样的工程代码
回复

使用道具 举报

板凳
ID:850176 发表于 2020-11-27 13:51 | 只看该作者
谢谢,正需要这方面的资料学习下
回复

使用道具 举报

地板
ID:284784 发表于 2021-5-6 12:01 | 只看该作者
下载的文件显示压缩包只能用winrar打开 大家注意下
回复

使用道具 举报

5#
ID:969378 发表于 2021-9-30 22:41 | 只看该作者
我用stm32ve 编译出错通不过,错误指向  Mobdbus103.sct    *.o (RESET, +First)  请指教
回复

使用道具 举报

6#
ID:262 发表于 2021-9-30 22:53 | 只看该作者
sjb384321 发表于 2021-9-30 22:41
我用stm32ve 编译出错通不过,错误指向  Mobdbus103.sct    *.o (RESET, +First)  请指教

这是用Keil5编译的结果

51hei.png (49.73 KB, 下载次数: 138)

51hei.png
回复

使用道具 举报

7#
ID:969378 发表于 2021-10-1 07:24 | 只看该作者
我用单片机485连接触摸屏,请教读写地址在哪里修改
回复

使用道具 举报

8#
ID:969378 发表于 2021-10-1 19:48 | 只看该作者
一共有3个串口,485用了哪一个串口
回复

使用道具 举报

9#
ID:138205 发表于 2022-1-26 21:43 | 只看该作者
多学习吧,这个例子看着好像不错呀
回复

使用道具 举报

10#
ID:475916 发表于 2022-2-10 14:22 | 只看该作者
主机读到的数据在哪里处理?
回复

使用道具 举报

11#
ID:570410 发表于 2022-9-17 16:25 | 只看该作者
楼主,程序中3个串口可以同时启用吗?比如2个做slave,1个做master(1个做slave,2个做master)?
添加了:
ModbusH3.uiModbusType = SLAVE_RTU;
  ModbusH3.port =  &huart3;
  ModbusH3.u8id = 3;                
  ModbusH3.u16timeOut = 1000;
  ModbusH3.EN_Port = NULL;
  //ModbusH2.EN_Port = LD2_GPIO_Port;
  //ModbusH2.EN_Pin = LD2_Pin;
  ModbusH3.u32overTime = 0;
  ModbusH3.au16regs = ModbusDATA3;
  ModbusH3.u16regsize= sizeof(ModbusDATA3)/sizeof(ModbusDATA3[0]);
  //Initialize Modbus library
  ModbusInit(&ModbusH3);
  //Start capturing traffic on serial Port
  ModbusStart(&ModbusH3);
编译通过,但实际不能正常执行。
回复

使用道具 举报

12#
ID:570410 发表于 2022-9-17 16:26 | 只看该作者
楼主,程序中3个串口可以同时启用吗?比如2个做slave,1个做master(1个做slave,2个做master)?
添加了:
ModbusH3.uiModbusType = SLAVE_RTU;
  ModbusH3.port =  &huart3;
  ModbusH3.u8id = 3;                
  ModbusH3.u16timeOut = 1000;
  ModbusH3.EN_Port = NULL;
  //ModbusH2.EN_Port = LD2_GPIO_Port;
  //ModbusH2.EN_Pin = LD2_Pin;
  ModbusH3.u32overTime = 0;
  ModbusH3.au16regs = ModbusDATA3;
  ModbusH3.u16regsize= sizeof(ModbusDATA3)/sizeof(ModbusDATA3[0]);
  //Initialize Modbus library
  ModbusInit(&ModbusH3);
  //Start capturing traffic on serial Port
  ModbusStart(&ModbusH3);
编译通过,但实际不能正常执行。
回复

使用道具 举报

13#
ID:29048 发表于 2023-1-1 14:59 | 只看该作者

谢谢,正学习freeRTOS
回复

使用道具 举报

14#
ID:363007 发表于 2023-5-10 10:02 | 只看该作者
不错,对我有很大的帮助,感谢
回复

使用道具 举报

15#
ID:363007 发表于 2023-5-10 10:03 | 只看该作者
不错,正在了解modbus协议,感谢
回复

使用道具 举报

16#
ID:1089198 发表于 2023-7-24 11:33 | 只看该作者
楼主,程序中从机的任务是只开启串口的接收使能吗?数据发送给主机的过程在哪体现的呢?这里有点没明白。
回复

使用道具 举报

17#
ID:354641 发表于 2024-6-6 07:36 | 只看该作者
多谢楼主分享
回复

使用道具 举报

18#
ID:232462 发表于 2024-11-7 14:50 | 只看该作者
不像是freetros例程,怎么有while大循环
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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