2021-09-11 20:27:24 索煒達(dá)電子 751
項(xiàng)目編號:E1070
文件大?。?M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
主要是記錄我對CANOPEN協(xié)議的理解以及使用。圖片還沒研究好怎么上傳,等后面研究好了補(bǔ)上。
第一步;新建一個(gè)工程,配置好各種時(shí)鐘之類的。當(dāng)然你用的是原子的板子, 你也可以拿一個(gè)LED實(shí)驗(yàn)或者蜂鳴器實(shí)驗(yàn)的工程 直接來改,你把其他的注釋掉就好了。
第二步;到網(wǎng)上下載CanFestival源碼CanFestival-3-10,解壓出來,并將文件夾名字改為CanFestival-3-10。移植需要用到的源文件在CanFestival-3-10\src目錄下,頭文件在CanFestival-3-10\include目錄下。
第三部;開始移植。
移植步驟:
步驟一;在新建好的工程目錄下新建文件夾CanFestival,再在CanFestival下新建文件夾driver、inc和src,再在inc文件夾下面新建stm32文件夾。
步驟二;將CanFestival-3-10\src目錄下的dcf.c、emcy.c、lifegrd.c、lss.c、nmtMaster.c、nmtSlave.c、objacces.c、pdo.c、sdo.c、states.c、sync.c、timer.c共12個(gè)文件拷貝到 CanFestival\src目錄下;將CanFestival-3-10\include目錄下的所有.h文件共19個(gè)文件全部拷貝到CanFestival\inc目錄下,再把CanFestival-3-10\examples\AVR\Slave目錄下 的ObjDict.h文件拷貝過來,一共20個(gè);將CanFestival-3-10\include\AVR目錄下的applicfg.h、canfestival.h、config.h、timerscfg.h共4個(gè)頭文件拷貝到c anfestival\inc\stm32 目錄下;將CanFestival-3-10\examples\TestMasterSlave目錄下的TestSlave.c、TestSlave.h、TestMaster.h、TestMaster.c拷貝到canfestival\driver目 錄下,并在該目錄下新建 stm32_canfestival.c文件。
步驟三;將CanFestival\src目錄下的所有.c文件添加到工程;將canfestival\driver目錄下的stm32_canfestival.c文件添加到工程;如果實(shí)現(xiàn)的是從設(shè)備,再將 canfestival\driver目錄下的TestSlave.c文件添加到工程,如果實(shí)現(xiàn)的是主設(shè)備,則將TestMaster.c文件添加到工程。
步驟四;將文件目錄canfestival\inc、canfestival\inc\stm32、canfestival\driver等路徑添加到工程包含路徑。
步驟五;在stm32_canfestival.c中包含頭文件#include "canfestival.h",并定義如下函數(shù):
void setTimer(TIMEVAL value)
{
}
TIMEVAL getElapsedTime(void)
{
return 1;
}
unsigned char canSend(CAN_PORT notused, Message *m)
{
return 1;
}
為什么這里要定義幾個(gè)空函數(shù)呢?因?yàn)榭蘸瘮?shù)編譯的時(shí)候不會(huì)報(bào)錯(cuò)啊,我們現(xiàn)在把后面的都弄好了,最后來處理這邊會(huì)更方便。我這只是針對新手,老鳥無視就好了。
這幾個(gè)函數(shù)都是定義來供canfestival源碼調(diào)用的,如果找不到這幾個(gè)函數(shù)編譯就會(huì)報(bào)錯(cuò)。
步驟六;通過以上幾步,所有的文件都弄齊了,但是編譯一定會(huì)出現(xiàn)報(bào)錯(cuò),注釋或刪除掉config.h文件中的如下幾行就能編譯通過:
#include <inttypes.h>
#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr/pgmspace.h>
#include <avr\sleep.h>
#include <avr\wdt.h>
如果還有其他錯(cuò)誤,可能就是不同版本的源碼導(dǎo)致的,也有可能是不同的DEMO引起的,不能解決這些問題的話,那就是GAMEOVER,如果能解決,那么我們繼續(xù)。