【笔记------freemodbus】一、stm32的裸机modbus-RTU从机移植(HAL库)

freemodbus的官方介绍和下载入口官方仓库链接:https://github.com/cwalter-at/freemodbus
modbus自己实现的话往往是有选择的支持几条指令,像断帧和异常处理可能是完全不处理的,用freemodbus实现的话要简单很多,可移植性也会更好
△ 本文的移植方法主要参考这个仓库(参考仓库1):https://github.com/eziya/STM32_HAL_FREEMODBUS_RTU
△ 一些调整参考这个仓库(参考仓库2):https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32,因为freemodbus主机并不开源,此仓库在freemodbus基础上实现了一个主机
△ 本文主要记录移植的主要步骤,不涉及其他分析,不涉及代码精简优化
△ 这里使用平台为stm32,移植官方仓库的代码,移植方法参考上面的两个仓库,模式为串口RTU

    1. 项目文件添加:
    • 官方的仓库下载好是这样的
      在这里插入图片描述

    • 把这些文件夹下的文件全加到自己的项目中,./modbus./demo/BARE
      在这里插入图片描述

    • 可以一股脑的把所有的源文件和头文件目录都加上去
      在这里插入图片描述
      在这里插入图片描述

    1. 把demo.c中的main函数注释掉,没意外的话现在可以编译成功了,报下面的错误的话可以把优化等级调高(优化等级高时会忽略该未定义的函数),或者直接把这个函数注释掉,或者在porttimer.c中定义一个该函数的空函数体,均可。看代码可以知道这是ASCII模式下的一个延时函数,RTU模式用不到
      在这里插入图片描述
      在这里插入图片描述
    1. 好吧,假如你勾选了microlib,你可能还会遇到如下错误,配置下RTE即可(微库缺很多东西导致的):
      在这里插入图片描述
      在这里插入图片描述
      这下应该是没错误了。。
    1. 文件修改,主要是portserial.cportimer.cdemo.c、stm32xxxx_it.c
    • 参考仓库1是一个stm32f4的hal工程,只要照着改就可以了,修改的内容也不多,,,
    • 上述修改完成输入寄存器可以用了,但可以看到他并没有做其他命令的适配(线圈、保持、离散寄存器),这时使用参考仓库2来完善demo.c中的几个回调函数并添加对应的寄存器
      • 参考仓库2是个RT-Thread工程,我们只需要参考他的user_mb_app.c文件改下几个回调函数就可以了
      • 可以看到参考仓库2多了不少定义来更方便的定义寄存器地址位置
      • 然后把原本demo.c中注释掉的main函数里面的操作放到你的主函数就好了
      • 需要注意这里的地址有个减一操作,而参考仓库1是没有的,基本都是CV就行了。至此修改完成
      • 一些配置可以在mbconfig.h中修改
        在这里插入图片描述
  • 授之以鱼不如授之以渔,方法如上,多折腾几遍就好了,上文中并没有事无巨细的实例操作,,,没有粘太多代码,因为只要按上面的步骤看别人的例子代码都是现成的。。。感谢开源社区的贡献者们!!

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值