日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

源码 移植_FreeModbus移植总结

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 源码 移植_FreeModbus移植总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

modbus是一項工業上經常用到的通訊協議,而freemodbus是一款開源的從機協議棧。關于它的移植網上已經有了很多的文章,但是大多都只是針對其中部分問題的表述。本文將會把自己在移植freemodbus過程中遇到的問題以及freemodbus的源碼分析盡量表述清楚。

(由于源碼分析部分在工作用的電腦上,這部分后續補上)

關于移植:

本次移植使用的片子是stm32f103的片子,編譯環境喂keil5.23

freemodbus源碼GitHub鏈接:

cwalter-at/freemodbus?github.com

首先移植需要有大致兩方面工作: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

硬件方面的問題大體如上

關于軟件部分:

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

總結

以上是生活随笔為你收集整理的源码 移植_FreeModbus移植总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。