标题: STM32 Modbus主从站实例程序-FreeRTOS [打印本页]

作者: xuezc    时间: 2020-11-14 17:02
标题: 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)

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

作者: 神出没    时间: 2020-11-19 08:21
不错,多一些这样的工程代码
作者: maozg0725    时间: 2020-11-27 13:51
谢谢,正需要这方面的资料学习下
作者: WHNGZZQ    时间: 2021-5-6 12:01
下载的文件显示压缩包只能用winrar打开 大家注意下

作者: sjb384321    时间: 2021-9-30 22:41
我用stm32ve 编译出错通不过,错误指向  Mobdbus103.sct    *.o (RESET, +First)  请指教
作者: heicad    时间: 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

作者: sjb384321    时间: 2021-10-1 07:24
我用单片机485连接触摸屏,请教读写地址在哪里修改
作者: sjb384321    时间: 2021-10-1 19:48
一共有3个串口,485用了哪一个串口
作者: dashiwork    时间: 2022-1-26 21:43
多学习吧,这个例子看着好像不错呀
作者: zhang666666    时间: 2022-2-10 14:22
主机读到的数据在哪里处理?
作者: xiaotian426    时间: 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);
编译通过,但实际不能正常执行。
作者: xiaotian426    时间: 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);
编译通过,但实际不能正常执行。
作者: rbbjj    时间: 2023-1-1 14:59

谢谢,正学习freeRTOS
作者: zz121x    时间: 2023-5-10 10:02
不错,对我有很大的帮助,感谢
作者: zz121x    时间: 2023-5-10 10:03
不错,正在了解modbus协议,感谢
作者: qitiandasheng    时间: 2023-7-24 11:33
楼主,程序中从机的任务是只开启串口的接收使能吗?数据发送给主机的过程在哪体现的呢?这里有点没明白。
作者: Mrnibaba    时间: 2024-6-6 07:36
多谢楼主分享
作者: chenbingjy    时间: 2024-11-7 14:50
不像是freetros例程,怎么有while大循环




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1