1寫在前面
該系列教程上一篇文章《協議源碼移植(一)》算是對CANOpen移植的準備工作,如果想要理解移植過程的知識,其實還有許多內容得了解。
本文挑一些重點來講述,從協議源碼添加到工程,源代碼理解,到最后輸出效果。
提示:該系列教程基于:CanFestival架構、STM32F1芯片、FreeRTOS操作系統、Keil MDK-ARM開發(fā)環(huán)境。
2
添加源碼、路徑
本節(jié)內容針對初學者做出簡要描述,相關內容可參看文章《Keil系列教程02_新建基礎軟件工程》。
2.1 添加組、文件
簡單來說,就是在你已建好的工程中添加與CANOpen相關的組和文件,如下圖:
2.2 添加路徑
添加CANOpen源碼的inc頭文件等相關路徑,編譯的時候才能找到對應文件。
3
添加代碼及分析
移植的重要過程就是添加、刪除和修改源代碼這一步驟。從教程上一篇文章下載,并看過源代碼的朋友就會發(fā)現,其實我們需要添加的代碼并不多,主要就是需要實現幾個底層的驅動函數。
下面將重要的幾點羅列出來。
1.修改canfestival.h文件
上文說了一下:添加三行語句,防止遞歸包含。
這里就是CANOpen定義的底層驅動接口,接口函數具體代碼需要我們自己實現。
canSend這個函數被CANOpen源代碼調用的最多,我們最好不修改函數接口,同時需要我們實現(我在canopen_drv.c中實現的)。
其它initTimer、 canInit等函數接口,在源碼中沒有調用,我也沒有按照這套接口來實現(初始化我在bsp下實現的)。
2.底層驅動初始化代碼
上面說的initTimer、 canInit初始化,我這邊為了與我代碼一致,使用TIM_Initializes、CAN_Initializes替代。
分別位于bsp_timer.c 和 bsp_can.c下面,實現的具體內容這里不描述,具體可以下載源碼工程參看。
3.定時器調度相關接口
其中setTimer和getElapsedTime這兩個函數會被timer.c協議源文件調用。在timer.h里面有什么(如下圖),但函數體沒有實現,需要我們自己實現。
同時,TimeDispatch函數已經實現,定義在timer.c,但需要被定時調用(調度)。
4.CAN發(fā)送接口函數canSend
這個CAN發(fā)送函數相當重要,接口最好不要自定義,因為scr下面多個源文件都調用了該函數。
同時,發(fā)送函數會被定時調度。所以,如果你調度方式像我例程那樣,使用定時器中斷的方式實現。那么,你就要考慮在中斷函數里面發(fā)送的情況。
以上就是CANOpen移植,底層驅動相關的一些接口實現和說明。這部分內容,CanFestival框架提供源碼是定義在drivers下面,比如STM32F1的就是cm3下面的cm3.c:
我單獨提出來實現這些驅動函數是因為我跑了一個FreeRTOS系統。當然,你的驅動也可按照drivers下面那樣實現。
5.其它
A.發(fā)送和接收緩存
我這邊是通過隊列來實現發(fā)送和接收緩存,而cm3.c是通過MessBuf_Write和MessBuf_Read來實現緩存。
B.中斷接收
我使用CAN中斷接收數據,和定時器中斷調度。
提示:我中斷入口函數是宏定義實現的,需要包含宏定義頭文件。
#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ā)現總線上間隔1秒有一個心跳。
下圖是我通過CAN分析儀抓取的CAN總線數據(如果你沒有分析儀,可以用我《系列教程6》提供的例程,通過串口打?。?/p>
先啟動一會兒主站,然后關閉,再啟動從站的數據,重要信息我都標記出來了。
A.上線報文:ID:0x700 Data:0
B.網絡管理:ID:0x000 Data:00代表管理所有節(jié)點 Data:80代表復位節(jié)點
C.心跳報文:ID:0x700 Data:05代表Operational操作狀態(tài)
提示:主站具有網絡管理,而從站沒有。同時,數據值(如81、05)的含義可參看CiA 301手冊網絡管理的章節(jié)(后期進行講述)。
-
CAN
+關注
關注
57文章
2744瀏覽量
463616 -
CANopen
+關注
關注
8文章
253瀏覽量
43582 -
STM32F
+關注
關注
1文章
40瀏覽量
18301
發(fā)布評論請先 登錄
相關推薦
評論