0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

CANOpen系列教程14_協(xié)議源碼移植 (二)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-06 15:06 ? 次閱讀

1寫在前面

該系列教程上一篇文章《協(xié)議源碼移植(一)》算是對CANOpen移植的準備工作,如果想要理解移植過程的知識,其實還有許多內(nèi)容得了解。

本文挑一些重點來講述,從協(xié)議源碼添加到工程,源代碼理解,到最后輸出效果。

提示:該系列教程基于:CanFestival架構(gòu)、STM32F1芯片FreeRTOS操作系統(tǒng)、Keil MDK-ARM開發(fā)環(huán)境。

2

添加源碼、路徑

本節(jié)內(nèi)容針對初學者做出簡要描述,相關內(nèi)容可參看文章《Keil系列教程02_新建基礎軟件工程》。

2.1 添加組、文件

簡單來說,就是在你已建好的工程中添加與CANOpen相關的組和文件,如下圖:

2.2 添加路徑

添加CANOpen源碼的inc頭文件等相關路徑,編譯的時候才能找到對應文件。

3

添加代碼及分析

移植的重要過程就是添加、刪除和修改源代碼這一步驟。從教程上一篇文章下載,并看過源代碼的朋友就會發(fā)現(xiàn),其實我們需要添加的代碼并不多,主要就是需要實現(xiàn)幾個底層的驅(qū)動函數(shù)。

下面將重要的幾點羅列出來。

1.修改canfestival.h文件

上文說了一下:添加三行語句,防止遞歸包含。

這里就是CANOpen定義的底層驅(qū)動接口,接口函數(shù)具體代碼需要我們自己實現(xiàn)。

canSend這個函數(shù)被CANOpen源代碼調(diào)用的最多,我們最好不修改函數(shù)接口,同時需要我們實現(xiàn)(我在canopen_drv.c中實現(xiàn)的)。

其它initTimer、 canInit等函數(shù)接口,在源碼中沒有調(diào)用,我也沒有按照這套接口來實現(xiàn)(初始化我在bsp下實現(xiàn)的)。

2.底層驅(qū)動初始化代碼

上面說的initTimer、 canInit初始化,我這邊為了與我代碼一致,使用TIM_Initializes、CAN_Initializes替代。

分別位于bsp_timer.c 和 bsp_can.c下面,實現(xiàn)的具體內(nèi)容這里不描述,具體可以下載源碼工程參看。

3.定時器調(diào)度相關接口

其中setTimer和getElapsedTime這兩個函數(shù)會被timer.c協(xié)議源文件調(diào)用。在timer.h里面有什么(如下圖),但函數(shù)體沒有實現(xiàn),需要我們自己實現(xiàn)。

同時,TimeDispatch函數(shù)已經(jīng)實現(xiàn),定義在timer.c,但需要被定時調(diào)用(調(diào)度)。

4.CAN發(fā)送接口函數(shù)canSend

這個CAN發(fā)送函數(shù)相當重要,接口最好不要自定義,因為scr下面多個源文件都調(diào)用了該函數(shù)。

同時,發(fā)送函數(shù)會被定時調(diào)度。所以,如果你調(diào)度方式像我例程那樣,使用定時器中斷的方式實現(xiàn)。那么,你就要考慮在中斷函數(shù)里面發(fā)送的情況。

以上就是CANOpen移植,底層驅(qū)動相關的一些接口實現(xiàn)和說明。這部分內(nèi)容,CanFestival框架提供源碼是定義在drivers下面,比如STM32F1的就是cm3下面的cm3.c:

我單獨提出來實現(xiàn)這些驅(qū)動函數(shù)是因為我跑了一個FreeRTOS系統(tǒng)。當然,你的驅(qū)動也可按照drivers下面那樣實現(xiàn)。

5.其它

A.發(fā)送和接收緩存

我這邊是通過隊列來實現(xiàn)發(fā)送和接收緩存,而cm3.c是通過MessBuf_Write和MessBuf_Read來實現(xiàn)緩存。

B.中斷接收

我使用CAN中斷接收數(shù)據(jù),和定時器中斷調(diào)度。

提示:我中斷入口函數(shù)是宏定義實現(xiàn)的,需要包含宏定義頭文件。

#define CAN_RX_IRQHandler USB_LP_CAN1_RX0_IRQHandler

#define CANOPEN_TIM_IRQ_Handler TIM2_IRQHandler

C.配置節(jié)點

配置節(jié)點ID,節(jié)點的狀態(tài),這里只是簡單的Demo,沒有添加應用代碼。

4

工程下載及運行效果

1.下載工程“CANOpen工程模板(含主、從站-心跳)”

https://pan.baidu.com/s/1LzD0Epc-Z8vlHsb-sD3WVw

提取碼:l2dc

2.運行效果

我提供的例程是一個只有心跳(間隔時間我們配置為1000ms)Demo工程。所以,啟動之后,你會發(fā)現(xiàn)總線上間隔1秒有一個心跳。

下圖是我通過CAN分析儀抓取的CAN總線數(shù)據(jù)(如果你沒有分析儀,可以用我《系列教程6》提供的例程,通過串口打?。?/p>

先啟動一會兒主站,然后關閉,再啟動從站的數(shù)據(jù),重要信息我都標記出來了。

A.上線報文:ID:0x700 Data:0

B.網(wǎng)絡管理:ID:0x000 Data:00代表管理所有節(jié)點 Data:80代表復位節(jié)點

C.心跳報文:ID:0x700 Data:05代表Operational操作狀態(tài)

提示:主站具有網(wǎng)絡管理,而從站沒有。同時,數(shù)據(jù)值(如81、05)的含義可參看CiA 301手冊網(wǎng)絡管理的章節(jié)(后期進行講述)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2694

    瀏覽量

    463149
  • CANopen
    +關注

    關注

    8

    文章

    243

    瀏覽量

    43519
  • STM32F
    +關注

    關注

    1

    文章

    40

    瀏覽量

    18268
收藏 人收藏

    評論

    相關推薦

    CANopen協(xié)議架構(gòu)和應用原理

    穩(wěn)健的通信協(xié)議和接口在工業(yè)電機控制應用中發(fā)揮著重要作用。在工業(yè)驅(qū)動應用中,當需要多個處理器元件來持續(xù)通信以完成復雜任務時,CANopen因其易于集成、高度可配置,以及支持高效、可靠的實時數(shù)據(jù)交換等特性,受到了眾多工程師青睞。本文從低功耗電機控制應用的角度深入探討
    的頭像 發(fā)表于 11-04 13:49 ?87次閱讀

    EtherNet/IP轉(zhuǎn)CANopen主站協(xié)議轉(zhuǎn)換網(wǎng)關

    ,通過網(wǎng)關向CANopen協(xié)議的輸送裝置發(fā)送指令,將組裝好的部件輸送至下一工位。 ,典型應用拓撲圖 三,
    的頭像 發(fā)表于 09-02 11:21 ?180次閱讀
    EtherNet/IP轉(zhuǎn)<b class='flag-5'>CANopen</b>主站<b class='flag-5'>協(xié)議</b>轉(zhuǎn)換網(wǎng)關

    EtherNet/IP轉(zhuǎn)CANopen主站協(xié)議網(wǎng)關(JM-EIP-COP)

    ,通過網(wǎng)關向CANopen協(xié)議的輸送裝置發(fā)送指令,將組裝好的部件輸送至下一工位。 ,典型應用拓撲圖 三,
    的頭像 發(fā)表于 08-26 14:53 ?208次閱讀
    EtherNet/IP轉(zhuǎn)<b class='flag-5'>CANopen</b>主站<b class='flag-5'>協(xié)議</b>網(wǎng)關(JM-EIP-COP)

    Profinet轉(zhuǎn)CANopen協(xié)議轉(zhuǎn)化網(wǎng)關

    連接到Profinet總線中做為從站使用,連接到CANopen總線中做為主站使用。 ,YC-PN-COP拓撲圖 Profinet轉(zhuǎn)CANopen協(xié)議轉(zhuǎn)化網(wǎng)關 三,技
    的頭像 發(fā)表于 07-22 14:34 ?298次閱讀
    Profinet轉(zhuǎn)<b class='flag-5'>CANopen</b><b class='flag-5'>協(xié)議</b>轉(zhuǎn)化網(wǎng)關

    STM32H743怎么在FreeRTOS中移植canopen?

    STM32H743怎么在FreeRTOS中移植canopen?
    發(fā)表于 07-03 06:32

    在自動化碼頭中CANopen與Ethercat協(xié)議的應用

    在自動化碼頭中,協(xié)議轉(zhuǎn)換是一個關鍵環(huán)節(jié),它能夠?qū)崿F(xiàn)不同設備之間的數(shù)據(jù)交互和協(xié)同工作。其中,將CANopen協(xié)議轉(zhuǎn)換為EtherCAT協(xié)議的應用尤為常見。我們來了解一下
    的頭像 發(fā)表于 01-19 15:03 ?868次閱讀
    在自動化碼頭中<b class='flag-5'>CANopen</b>與Ethercat<b class='flag-5'>協(xié)議</b>的應用

    在自動化碼頭中CANopen與Ethercat協(xié)議的應用

    在自動化碼頭中,協(xié)議轉(zhuǎn)換是一個關鍵環(huán)節(jié),它能夠?qū)崿F(xiàn)不同設備之間的數(shù)據(jù)交互和協(xié)同工作。其中,將CANopen協(xié)議轉(zhuǎn)換為EtherCAT協(xié)議的應用尤為常見。我們來了解一下
    的頭像 發(fā)表于 01-19 14:57 ?347次閱讀

    Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議來連接CanOpen伺服驅(qū)動器的應用

    局域網(wǎng)(CAN)網(wǎng)絡的通信協(xié)議,被廣泛應用于汽車和其他嵌入式系統(tǒng)中。對于將Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議以鏈接臺達B3系列伺服
    的頭像 發(fā)表于 01-10 10:50 ?686次閱讀
    Profinet<b class='flag-5'>協(xié)議</b>轉(zhuǎn)換為<b class='flag-5'>CanOpen</b><b class='flag-5'>協(xié)議</b>來連接<b class='flag-5'>CanOpen</b>伺服驅(qū)動器的應用

    Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議來連接CanOpen伺服驅(qū)動器的應用

    局域網(wǎng)(CAN)網(wǎng)絡的通信協(xié)議,被廣泛應用于汽車和其他嵌入式系統(tǒng)中。對于將Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議以鏈接臺達B3系列伺服
    發(fā)表于 01-10 10:29

    Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議來連接CanOpen伺服驅(qū)動器的應用

    局域網(wǎng)(CAN)網(wǎng)絡的通信協(xié)議,被廣泛應用于汽車和其他嵌入式系統(tǒng)中。對于將Profinet協(xié)議轉(zhuǎn)換為CanOpen協(xié)議以鏈接臺達B3系列伺服
    的頭像 發(fā)表于 01-10 10:27 ?381次閱讀

    智能樓宇系統(tǒng)canopen協(xié)議與ModbusTCP協(xié)議進行通訊

    通過CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備進行轉(zhuǎn)換:可以使用一個CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備,將CANopen協(xié)議轉(zhuǎn)換為Modbus TCP
    的頭像 發(fā)表于 01-03 15:20 ?447次閱讀
    智能樓宇系統(tǒng)<b class='flag-5'>canopen</b><b class='flag-5'>協(xié)議</b>與ModbusTCP<b class='flag-5'>協(xié)議</b>進行通訊

    智能樓宇系統(tǒng)canopen協(xié)議與ModbusTCP協(xié)議進行通訊

    通過耐特森CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備進行轉(zhuǎn)換:可以使用一個CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備,將CANopen協(xié)議轉(zhuǎn)換為Modbus TCP
    的頭像 發(fā)表于 01-03 15:17 ?474次閱讀

    工業(yè)通訊中CANOPEN轉(zhuǎn)EtherCAT的轉(zhuǎn)換

    CANOPEN轉(zhuǎn)EtherCAT協(xié)議轉(zhuǎn)換網(wǎng)關是一款能夠?qū)?b class='flag-5'>CANOPEN接口設備連接到EtherCAT網(wǎng)絡系統(tǒng)的產(chǎn)品。該網(wǎng)關作為EtherCAT網(wǎng)絡的從站,可以將CANOPEN設備集成到
    發(fā)表于 12-12 11:31

    Modbus轉(zhuǎn)CANopen協(xié)議相互轉(zhuǎn)換在工業(yè)中的作用

    在工業(yè)自動化領域,Modbus和CANopen協(xié)議都是非常常見的通信協(xié)議。Modbus是一種串行通信協(xié)議,常用于連接PLC和傳感器/執(zhí)行器。而CAN
    發(fā)表于 12-08 17:02

    Modbus轉(zhuǎn)CANopen協(xié)議相互轉(zhuǎn)換在工業(yè)中的作用

    在工業(yè)自動化領域,Modbus和CANopen協(xié)議都是非常常見的通信協(xié)議。Modbus是一種串行通信協(xié)議,常用于連接PLC和傳感器/執(zhí)行器。而CAN
    的頭像 發(fā)表于 12-08 16:58 ?431次閱讀
    Modbus轉(zhuǎn)<b class='flag-5'>CANopen</b><b class='flag-5'>協(xié)議</b>相互轉(zhuǎn)換在工業(yè)中的作用