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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32H743+CubeIDE-CanFestival实现两个CANopen Master同时独立运行

發布時間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32H743+CubeIDE-CanFestival实现两个CANopen Master同时独立运行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一. 前言
    • 1.1 兩路CANopen Master解決的問題
    • 1.2CanFestival庫移植
    • 1.3 STM32H743
  • 二. 兩套對象字典
  • 三. Master節點初始化
  • 四. CanFestival-接口函數canSend()
  • 五. CanFestival-接口函數canDispatch()

一. 前言

1.1 兩路CANopen Master解決的問題

CAN的最大的缺點是通訊波特率最高只有1M,當某一路CAN總線上的從站數量多且通訊的數據量大的話,CAN總線負載率就會很高,從而導致一些通訊問題。如果控制器同時獨立運行兩個CANopen Master,同時帶起兩路CAN總線的話,總線負載率的問題就能得到一定的緩解。

1.2CanFestival庫移植

CanFestival是實現CANopen協議的嵌入式庫,支持ARM,STM32,AVR等平臺。關于CanFestival的移植,可以直接參考硬石科技STM32H7開發板的教程。通過硬石科技STM32H7教程,移植CanFestival庫應該沒問題的。

1.3 STM32H743

STM32H743同時有兩個FDCAN控制器,那么使用CanFestival庫同時運行兩個CANopen Master肯定是沒有問題的,畢竟Canopen協議只是一個應用層代碼。

二. 兩套對象字典

同時運行兩個CANopen主站,需要建立兩套對象字典。熟悉CANopen協議后,就知道通過對象字典可以控制CANopen主站的行為。比如通過修改對象字典,讓主站按照一定的周期發送同步幀SYN等等。

三. Master節點初始化

對象字典Master1.c與Master2.c文件最底下分別有一個變量名為Master1_Data與Master2_Data的結構體變量,接著使用它們對兩個CANopen Master節點初始化。

初始化函數InitNodes()的內容如下,重點是Master1.Data與Master2.Data的結構體成員canHandle。它將決定到底是哪個CANopen Master調用了canSend()函數將CAN報文發出去。

四. CanFestival-接口函數canSend()

canSend()的代碼如下:

函數canSend()的第一個入口參數是canHandle,之前的初始化函數InitNode()將Master1_Data的canHandle設為0x01,而Master2_Data的canHandle設為0x02。
函數canSend()的內容也很簡單,根據canHandle去選擇調用相應的FDCAN底層,將CAN報文發出去即可。

兩個CANopen Master同時運行,重點是利用canSend( )的第一入口參數判斷調用哪個一路FDCAN發送報文。

五. CanFestival-接口函數canDispatch()

在中斷回調函數里調用canDispatch( )將接收到的CAN報文放入對象字典里解析。這個跟只有一個CANopen Master的工程一樣的,所以沒什么好說的。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的STM32H743+CubeIDE-CanFestival实现两个CANopen Master同时独立运行的全部內容,希望文章能夠幫你解決所遇到的問題。

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