1寫(xiě)在前面
基于Canfestival框架的CANOpen協(xié)議棧移植教程網(wǎng)上流傳著許多,而且有一份不知道被復(fù)制、粘貼了多少遍的“CANOpen移植教程”相信許多朋友都知道。
同時(shí),百度、谷歌還能搜出許多所謂“移植代碼”。其實(shí),這許多內(nèi)容,對(duì)初學(xué)者并沒(méi)有多大幫助。相反,我覺(jué)得還有誤導(dǎo)的作用。
基于Canfestival框架的CANOpen協(xié)議棧移植需要做的工作并不多,但許多初學(xué)者無(wú)從下手,究其原因還是有許多內(nèi)容沒(méi)有理解到位。
本教程站在初學(xué)者角度,盡量將重要內(nèi)容講述到位,后面提供移植好的Demo供大家參考學(xué)習(xí)。
2
移植準(zhǔn)備
移植前,先讓大家認(rèn)識(shí)一下移植的一些準(zhǔn)備條件。
2.1 硬件
該移植教程以STM32F1(自帶CAN控制器),帶有CAN收發(fā)器的開(kāi)發(fā)板為例來(lái)講述。
條件允許的情況下,可以購(gòu)買(mǎi)一個(gè)CAN總線分析儀。沒(méi)有分析儀的朋友,可以用我《CANOpen系列教程06》提供的一個(gè)例程來(lái)抓取CAN總線數(shù)據(jù)。
因例程在中斷里用串口打印傳輸數(shù)據(jù)。所以,用例程抓取的CAN總線傳輸速率不能太快(建議低于20幀/秒)。
2.2 MCU資源
1.CAN:CAN總線通信(必備);
2.TIM:CANOpen協(xié)議調(diào)度(必備);
4.GPIO:板卡狀態(tài)指示燈(選配);
2.3 STM32標(biāo)準(zhǔn)外設(shè)庫(kù)+FreeRTOS工程
本教程基于STM32標(biāo)準(zhǔn)外設(shè)庫(kù)和FreeRTOS系統(tǒng)搭建的工程為例(很早之前我分享過(guò)),這里不講述。
運(yùn)行RTOS主要是牽涉到CAN總線數(shù)據(jù)的發(fā)送和接收需要兩個(gè)線程來(lái)處理,以及增加一個(gè)CANOpen應(yīng)用程序線程。
基于其他MCU以及RTOS原理類(lèi)似,也可參考本文。
2.4 下載Canfestival源碼并搭建好環(huán)境
這里的內(nèi)容,如果你不明白,請(qǐng)務(wù)必先閱讀該教程前幾篇相關(guān)文章。
3
生成對(duì)象字典
本移植教程重點(diǎn)是將CANOpen協(xié)議源碼移植到MCU中,使其成功運(yùn)行。因此,對(duì)象字典只配置最基礎(chǔ)的“心跳”。
下面教大家在對(duì)象字典編輯器中生成帶“心跳”的對(duì)象字典。
1.打開(kāi)編輯器,文件 -> 新建
2.新建“主站”節(jié)點(diǎn)
3.配置心跳信息
4.保存對(duì)象字典:文件 -> 保存 -> 保存在一個(gè)指定位置
5.建立對(duì)象字典
到這里就生成了三個(gè)文件:TestMaster.od、 TestMaster.c 和 TestMaster.h需保存好,在后面需要使用這個(gè)對(duì)象字典源碼。
提示:
A.上面牽涉到三個(gè)地方保存名字:節(jié)點(diǎn)名字、對(duì)象字典工程名字、對(duì)象字典源文件名字,建議都一樣。
B.主站和從站的生成原理一樣,上面是生成主站TestMaster對(duì)象字典,從站TestSlave對(duì)象字典請(qǐng)按照同樣方式生成即可。
4
提取CANOpen源碼
本節(jié)內(nèi)容主要針對(duì)初學(xué)者使其更加理解移植的代碼工程,將CanFestival中源代碼提取做一定說(shuō)明,并且盡量將源碼文件對(duì)應(yīng)到自己工程下。
當(dāng)然,本文按照常規(guī)方式提取,你也可以按照自己方式提取。同時(shí),整個(gè)工程下其它,如STM32標(biāo)準(zhǔn)外設(shè)庫(kù)、FreeRTOS這些文件在這里不作說(shuō)明。
1.提取頭、源文件(如下圖)
CANOpeninc目錄下19個(gè).h頭文件,來(lái)自Canfestival->include下目錄19個(gè)頭文件;
CANOpenincstm32目錄下3個(gè).h頭文件來(lái)自Canfestival->includecm4;
其中canfestival.h文件是函數(shù)接口定義(聲明),函數(shù)內(nèi)容需要自己實(shí)現(xiàn)(位于:Appcanopen目錄下canopen_drv.c);
CANOpensrc目錄下12個(gè).c源文件,來(lái)自Canfestival->src目錄下的12個(gè)源文件;
其中需要?jiǎng)h除dcf.c文件下第59、98行前面的“inline”關(guān)鍵字;
2.頭文件說(shuō)明
要修改一下其中的canfestival.h文件:
3.建立canopen文件夾并提取文件
在工程下建立canopen文件夾,提取相應(yīng)的文件,同時(shí)建立自己的文件:canopen_app和canopen_drv.
還需要修改一下congfig.h文件,如下圖:
4.建立CAN和TIM底層驅(qū)動(dòng)文件
在上面canfestival.h文件提供了CAN和TIM的驅(qū)動(dòng)接口,但我們這里不用它那一套接口,自己定義在bsp_can和bsp_timer源代碼下。
-
CAN
+關(guān)注
關(guān)注
57文章
2694瀏覽量
463149 -
協(xié)議
+關(guān)注
關(guān)注
2文章
593瀏覽量
39133 -
源碼
+關(guān)注
關(guān)注
8文章
632瀏覽量
29110 -
CANopen
+關(guān)注
關(guān)注
8文章
243瀏覽量
43519
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論