当前位置: 首页 > news >正文

STM32F407VET6学习笔记10:移植smallmodbus

即今日记录一些smallmodbus 移植的过程,以及使用的关键点.

主要是有些别的坑,移植和用起来还是不麻烦的。

目录

下载源码:

RT-Thread 操作系统:

添加源码:

修改config_small_modbus.h 文件宏定义:

board_virtualIO.c:

头文件的引用:

定义与实例:

串口与使能脚的定义:

使能引脚的作用函数:

创建线程:

从机回调函数: 

其他需要注意的宏:

移植程序效果:


下载源码:

RT-Thread-Mirror/small_modbus

RT-Thread 操作系统:

移植smallmodbus的工程必须要有RT-thread操作系统的支持

别忘记注册串口的设备,在stm32f4xx_hal_msp.c文件添加你要用到的串口的初始化:

添加源码:

在它的几个文件夹中寻找并添加完全这几个源码:

修改config_small_modbus.h 文件宏定义:

 将它的适配平台改为RT-Thread:

board_virtualIO.c:

这个文件定义了可以调用的master和slave  对线圈操作的函数

这里需要注意,update 与 write 的区别,更新是给slave用的,write应该是给master用的

我在实际移植过程中,测试的是slave的基础功能,发现作者的调用有误,会导致测试slave的时候卡死,因为根本的函数调用错了,误调了master用到的写write方法了

我在自己额外的线程例子中,将其改为这个就能正常更新线圈了:

头文件的引用:

定义与实例:

使用它的库的过程中,有些定义与实例不可缺少:

这个结构体定义不可少,不然没法正常启动:

串口与使能脚的定义:

使能引脚的作用函数:

它的库会调用这个作用函数来使能与失能485通信:

我这里写了四个这样的函数,每个slave实例会用到一个它串口相对应的函数、引脚

圈出来的是我自己宏定义好的引脚

创建线程:

我这里创建俩个线程,一个是处理slave的线程,一个是更新线圈用的

初始化线程:

线程的作用函数:

slave线程的任务:

从机回调函数: 

可以在从机回调函数中定义自己通信的地址,与回调逻辑:

最终应用层的删改也是在这里进行了

其他需要注意的宏:

board_virtualIO.c 文件 有宏会定义每个线圈的最大数据量,原文不是我截图的这样,这里是我为了自己使用方便extern了:

small_modbus_base.h会定义一些最大读写长度:

从机回调函数的调用使用这一块,不能使用MODBUS_WAIT_FOREVER,否则就会出现,只回复一次就结束通信的情况。

移植程序效果:

 能正常通信,测试的01功能码的离散量线圈的读写功能:

http://www.lryc.cn/news/610741.html

相关文章:

  • 【LeetCode 热题 100】347. 前 K 个高频元素——(解法一)排序截取
  • Redis类型之String
  • 【npm 解决】---- TypeError: crypto.hash is not a function
  • GPS信号捕获尝试
  • 【机器学习深度学习】模型剪枝
  • Python包安全工程实践:构建安全可靠的Python生态系统
  • 【学习笔记】NTP时间同步验证
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • Linux 逻辑卷管理:LVM 原理与 Stratis、VDO 特性对比
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • 力扣经典算法篇-43-全排列(经典回溯问题)
  • css3属性总结和浏览器私有属性
  • Python、Java、C#实现浮点型转换为转型
  • Mysql使用Canal服务同步数据->ElasticSearch
  • 电子秤利用Websocket做为Client向MES系统推送数据
  • 文件编译、调试及库制作
  • 跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.
  • 前端实现Excel文件的在线预览效果
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • 【力扣 Hot100】 刷题日记
  • Python分块读取大型Excel文件
  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • LangGraph学习笔记 — LangGraph中State状态模式
  • 自动驾驶控制算法——MPC控制算法
  • qq scheme
  • GaussDB 并行创建索引
  • 使用iptables的nat链表进行端口转发
  • 基于MATLAB实现的频域模态参数识别方法
  • 算法3. 无重复字符的最长子串
  • Django中的转发与重定向详解