源码 移植_FreeModbus移植总结

modbus是一项工业上经常用到的通讯协议,而freemodbus是一款开源的从机协议栈。关于它的移植网上已经有了很多的文章,但是大多都只是针对其中部分问题的表述。本文将会把自己在移植freemodbus过程中遇到的问题以及freemodbus的源码分析尽量表述清楚。

(由于源码分析部分在工作用的电脑上,这部分后续补上)

关于移植:

本次移植使用的片子是stm32f103的片子,编译环境喂keil5.23

freemodbus源码GitHub链接:

cwalter-at/freemodbus​github.com
21e26631236e2ec7a0ccb08e3e440373.png

首先移植需要有大致两方面工作:1、相关硬件功能的编写;2、freemodbus底层操作寄存器(线圈)的函数。

关于硬件功能主要包括usart的初始化,发送/接收状态设置,串口中断函数等;timer定时器的初始化,使能,失能以及定时器中断等。其中需注意的是在串口中断及定时器中断中加入对应的处理函数,通知状态机进行相应处理。

定时器方面基本没有什么问题,确定还要使用的定时器以及编写好对应的函数没什么问题可以正常使用。但是在串口移植的时候需要注意,自己使用的串口发送中断是txe还是tc。使用txe中断需要预先发送一个字节触发串口发送中断,而是用tc中断需要在中断中添加延时否则会导致最后一个字节发送不出去的问题。关于这两个问题的分析及解决方法:

txe中断(本人测试过可以解决,八度大神还是屌啊):

FreeModbus在STM32上移植-OpenEdv-开源电子网​www.openedv.com

tc中断(该方法本人并没有测试过是否可以解决问题):

STM32F407移植FreeModbus中遇到接收最后一个字节是0xff或0xfe的解决方法_刘恩明的博客-CSDN博客_485通信输出0xff 0xfe​blog.csdn.net
14f5206c30636f3bdc8eaf6eac578f10.png

硬件方面的问题大体如上

关于软件部分:

1、状态机在调用对应功能 的函数时,会在其中寄存器地址的处理后加入一句语句:usAddress++,不知道原作者加这一句是干嘛的。注释掉即可,或者在底层的寄存器处理函数中加入一句对应的usAddress--;所谓负负得正嘛

2、在寄存器操作的部分中,有一个bug位于mbfuncholding.c文件eMBFuncReadHoldingRegister函数中文件第185行的位置,源代码如下:

usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );

应修正为:

usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );

3、关于需要实现的四个底层操作寄存器、线圈的函数需根据需求自行设计。后续在本人完成gd32f330的fremodbus移植后会贴出自己搞的移植后的freemodbus源码。

附录移植完毕的demo(基于GD32F330C8T6)

https://github.com/SlatedFish-QAQ/GD32_FreeModbus

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

expect脚本的简单应用

expect是一个用来处理交互的命令。借助于expect我们可以把交互过程写在一个脚本上&#xff0c;使之自动化完成。expect最核心的四个命令&#xff1a;send:用于向进程发送字符串 except:从进程接收字符串 spawn:打开一个新的进程 interact&#xff1a;保持交互的状态首先一个简单…

ajax中datatype是json,dataType:'json'vs data:$ .ajax中的JSON.stringify(obj)

我有这个数据结构&#xff1a;var formValues {TemporaryToken: a.userStatus.get("TemporaryToken"),MemorableWordPositionAndValues:[{Position: a.userStatus.get("MemorableWordPositions")[0],Value: this.$([name"login-memorable-character-…

sqlserver 查询中使用Union或Union All

在 程序人生网站上 看到了 这篇文章 就收藏了 哈 http://www.ourcodelife.com/article-415-1.html 首先&#xff0c;在程序人生网站上&#xff0c;需要负责任的指出的是在SQL Server查询中使用Union或Union All后Order by排序无效&#xff0c;我不确认是不是微软的bug&#xf…

word标题大纲级别_快速按标题层级把Word转Excel—附详细操作步骤

如何快速把层级分明的word文档转换成横向从属结构的excel表格一、问题描述文档如下图所示。文档一共三个层次&#xff0c;大纲级别分别是1、2、3级&#xff0c;左则是其文档结构图&#xff0c;可以看出文档层级分明。最终要将文档转换成如下横向从属结构的表格。一个层次的内容…

生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)

一、在 .NET 中生成1、直接用.NET Framework 提供的 Guid() 函数&#xff0c;此种方法使用非常广泛。GUID&#xff08;全局统一标识符&#xff09;是指在一台机器上生成的数字&#xff0c;它保证对在同一时空中的任何两台计算机都不会生成重复的 GUID 值&#xff08;即保证所有…

Thread.CurrentPrincipal HttpContext.Current.User

据说要这样写才稳妥 // This principal will flow throughout the request.VoyagerPrincipal principal new VoyagerPrincipal(yada, yada, yada); // Attach the new principal object to the current HttpContext objectHttpContext.Current.User principal; // Make sure …

江森系统设置服务器日期,江森自控METASYS操作手册

? Alarm? Trend显示窗口中的按钮编号 A B按钮说明允许您编辑所示项目的属性。选择Save按钮可保存修改。 显示这个窗口中以前显示过的内容。每个窗口最多可显示5个历史项目。显示已保存的下一个窗口中的内容。锁定选中的显示窗口(防止被其他拖拽来的项目覆盖)。您可调整被锁定…

servlet中getWriter和getOutputStream的区别

getWriter();getOutputStream();区别&#xff1a;1、getWriter()用于向客户机回送字符数据2、getOutputStream()返回的对象&#xff0c;可以回送字符数据&#xff0c;也可以回送字节数据&#xff08;二进制数据&#xff09;如何选择&#xff1a;若果我们回送字符数据&#xff0…

execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...

在上一篇文章《系统调用分析(2)》中介绍和分析了32位和64位的快速系统调用指令——sysenter/sysexit和syscall/sysret&#xff0c;以及内核对快速系统调用部分的相关代码&#xff0c;并追踪了一个用户态下的系统调用程序运行过程。本篇中将基于最新的Linux-5.0内核&#xff0c;…

批量下载小说网站上的小说(python爬虫)

随便说点什么 因为在学python&#xff0c;所有自然而然的就掉进了爬虫这个坑里&#xff0c;好吧&#xff0c;主要是因为我觉得爬虫比较酷&#xff0c;才入坑的。 想想看&#xff0c;你可以批量自动的采集互联网上海量的资料数据&#xff0c;是多么令人激动啊&#xff01; 所以我…

Playground

题意 &#xff1a;求被两点分割的凸包面积的较小值 题意已经给出顺时针啦 就是求以某一个点 和其他所有相邻点组成三角形的面积&#xff0c;然后sum存和求两点的时候就求出那两点的之间所有三角形的和再减掉0点和那两点的面积一减就是其中一个三角形的面积。转载于:https://…

华为欧拉系统服务器开接口,华为操作系统 euleros

华为操作系统 euleros 内容精选换一换Atlas 900 AI集群安装上架、服务器基础参数配置、安装操作系统等操作&#xff0c;请根据集群配置参见对应的手册&#xff1a;《Atlas 900 PoD 用户指南 (型号9000, 直流)》《Atlas 900 PoD 用户指南 (型号9000, 交流)》《Atlas 900 计算节点…

对勾函数_对勾函数?2020福建省中考压轴题分析

训练营机密视频大公开欢迎转发、分享传播知识&#xff0c;传播力量&#xff01;福建也是全省统一考选择题&#xff1a;这题考的是二次函数的性质&#xff0c;先求出对称轴就好了填空题&#xff1a;这题看似有反比例&#xff0c;确实会用到反比例函数的对称性。但其实重点是考察…

这个textview有问题吗 为什么一使用就崩溃

问题描述<TextViewandroid:id"id/textview1"android:layout_columnSpan"4"android:layout_gravity"fill"android:gravity"right"android:text"0" />public class MainActivity extends Activity {Button one;TextView…

通过Ajax解析和jQuery写了一个小小的导航条

最近在用ajax和jquery做开发&#xff0c;所以闲来无事写了些小导航条&#xff0c;通过ajax解析XML文件动态的创建WEB网站的导航条。 <link href"css/style.css" rel"stylesheet" type"text/css" /><script src"js/jquery-1.8.2.mi…

一次生产事故的优化经历

在一次正常的活动促销之后&#xff0c;客服开始陆续反馈有用户反应在抢标的时候打不开网页或者APP&#xff0c;在打开的时候标的就已经被抢光了&#xff0c;刚开始没有特别的上心&#xff0c;觉得抢标不就是这样吗&#xff0c;抢小米手机的时候也不就这样吗&#xff1f;随着活动…

mysql over rank_SQL学习笔记 - 窗口函数OVER

Window Function 窗口函数Perform calculations on an already generated result set ( a window).&#xff08;在已生成的结果集上执行计算&#xff09;Aggregate calculation(without having to group your data)&#xff08;允许使用聚合函数时不用进行GROUP BY分组&#xf…

用boost库实现traceroute小工具

参考了网上几个 traceroute的实现版本&#xff0c;存在一些缺陷&#xff0c;比如没有做超时处理&#xff0c;或者只能在window下使用。自己用boost实现了一个traceroute小工具&#xff0c;在window下正常运行。 先来看下面实现的原理。这些说明来自维基百科。traceroute&#x…

Win系统利用本地安全策略全面禁止360等软件的安装与运行-1

这个理论应该也可以用在域对下设域用户上.各位不知道有没有这种经历&#xff0c;机子让别人玩了一上午&#xff0c;回来发现&#xff0c;自己干干净净的系统多了一堆某某安全助手&#xff0c;某某杀毒&#xff0c;某某手机助手等等&#xff0c;最可恨的还是不知一系列的&#x…

php配置文件php.ini的详细解析(续)

file_uploads On //是否允许文件上传 upload_tmp_dir "d:/wamp/tmp" //上传文件的临时目录&#xff0c;默认为“/wamp/tm…