找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8576|回复: 16
收起左侧

STM32 Modbus主从站实例程序-FreeRTOS

  [复制链接]
ID:527588 发表于 2020-11-14 17:02 | 显示全部楼层 |阅读模式
Modbus-Master-Slave-STM32-HAL-FreeRTOS
源代码来自https://github.com/alejoseb/Modbus-STM32-HAL-FreeRTOS,支持多实例,可以同时使用MasterSlave,原作者使用CubeIDE工程,用不太习惯,我这里做点小修改使用MDK工程,代码初始化由CubeMX生成,简直不要太方便,可以无痛移植到其他STM芯片。
基本设置
1设置时钟.png


2调试方式.png

2IO.png

启用Freertos,添加任务
3新建M任务.png

4新建Slave任务.png

设置中断优先级
4中断优先级.png

设置长生成MDK工程
5生成MDK工程.png


工程里面添加Modbus库
6新建文件夹并添加文件.png

7添加目录.png


修改main.c
8main引入.png


9main添加代码.png


修改freertos.c
10freertos引入.png


11freertos代码M.png


12freertos代码S.png


13Modbus修改.png

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

15完美运行.png


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

评分

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

查看全部评分

回复

使用道具 举报

ID:108573 发表于 2020-11-19 08:21 | 显示全部楼层
不错,多一些这样的工程代码
回复

使用道具 举报

ID:850176 发表于 2020-11-27 13:51 | 显示全部楼层
谢谢,正需要这方面的资料学习下
回复

使用道具 举报

ID:284784 发表于 2021-5-6 12:01 | 显示全部楼层
下载的文件显示压缩包只能用winrar打开 大家注意下
回复

使用道具 举报

ID:969378 发表于 2021-9-30 22:41 | 显示全部楼层
我用stm32ve 编译出错通不过,错误指向  Mobdbus103.sct    *.o (RESET, +First)  请指教
回复

使用道具 举报

ID:262 发表于 2021-9-30 22:53 | 显示全部楼层
sjb384321 发表于 2021-9-30 22:41
我用stm32ve 编译出错通不过,错误指向  Mobdbus103.sct    *.o (RESET, +First)  请指教

这是用Keil5编译的结果
51hei.png
回复

使用道具 举报

ID:969378 发表于 2021-10-1 07:24 | 显示全部楼层
我用单片机485连接触摸屏,请教读写地址在哪里修改
回复

使用道具 举报

ID:969378 发表于 2021-10-1 19:48 | 显示全部楼层
一共有3个串口,485用了哪一个串口
回复

使用道具 举报

ID:138205 发表于 2022-1-26 21:43 | 显示全部楼层
多学习吧,这个例子看着好像不错呀
回复

使用道具 举报

ID:475916 发表于 2022-2-10 14:22 | 显示全部楼层
主机读到的数据在哪里处理?
回复

使用道具 举报

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);
编译通过,但实际不能正常执行。
回复

使用道具 举报

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);
编译通过,但实际不能正常执行。
回复

使用道具 举报

ID:29048 发表于 2023-1-1 14:59 | 显示全部楼层

谢谢,正学习freeRTOS
回复

使用道具 举报

ID:363007 发表于 2023-5-10 10:02 | 显示全部楼层
不错,对我有很大的帮助,感谢
回复

使用道具 举报

ID:363007 发表于 2023-5-10 10:03 | 显示全部楼层
不错,正在了解modbus协议,感谢
回复

使用道具 举报

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

使用道具 举报

ID:354641 发表于 2024-6-6 07:36 | 显示全部楼层
多谢楼主分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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