源碼 移植_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.pswp.cn/news/259825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259825.shtml
英文地址,請注明出處:http://en.pswp.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…