CAN笔记(23) CanFestival移植
1. CanFestival
Canfestival官方主页:https://canfestival.org/index.html.en
从上面主页可以看得出来,网址主要包含三部分内容:
- Code源码
提供代码资源库 - Documentation文档
主要讲述Canfestival这套框架里面的一些内容
如遵循许可、CanFestival提供了一些GUI和命令行工具
帮助创建一个新的CANOpen节点并编辑对象字典,供主从使用 - Applications应用
主要讲Canfestival应用场合和产品
如Product产品、Research研究方面
Canfestival是一套免费开源的CANOpen协议栈框架,遵循ANSI-C,支持多平台
可以借助这一套开源框架来学习和使用CANOpen
2. 源码下载
点击进入Code
选择 ngélibre.fr,点击链接 branch ,进入页面
点击Downloads,在点击Download repository下载 Mongo-canfestival-3-xxx.zip
3. 移植准备
- CanFestival源码
- 基于STM32标准HAL库的CAN通讯基础工程CANTest2
在 CAN笔记(15) STM32-M4 CAN通讯 的例程CANTest1的基础上
- 添加FreeRTOS
- 开启CAN接受中断
- 删除屏幕显示
- 添加串口交互
拷贝CANTest2另存为CANTest3作为stm32F4移植CanFestival的工程
4. 移植
4.1 CanFestival移植
在新建好的工程CANTest3
目录下新建文件夹CanFestival
再在CanFestival下新建文件夹can
、driver
、inc
和src
再在inc
文件夹下面新建stm32
文件夹
解压刚刚下载的Mongo-canfestival-3-xxx.zip源码压缩文件,重命名为 Mongo-canfestival-3
将Mongo-canfestival-3\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个文件拷贝到CANTest3\CanFestival\src
目录下
将Mongo-canfestival-3\include
目录下的所有.h文件共19个文件全部拷贝到CANTest3\CanFestival\inc
目录下
再把Mongo-canfestival-3\examples\AVR\Slave
目录下的ObjDict.h
文件拷贝过来,一共20个
将Mongo-canfestival-3\include\AVR
目录下的applicfg.h、canfestival.h、config.h、timerscfg.h共4个头文件拷贝到CANTest3\CanFestival\inc\stm32
目录下
将Mongo-canfestival-3\examples\kerneltest
目录下的测试例程TestMaster.h、TestMaster.c、TestMaster.od、TestSlave.c、TestSlave.h、TestSlave.od拷贝到CANTest3\CanFestival\can
目录下
在CANTest3\CanFestival\driver
下新建canfestival_drv.c.c
文件
将CANTest3\CanFestival\src
目录下的所有.c文件添加到工程
将CANTest3\CanFestival\driver
目录下的canfestival_drv.c.c
文件添加到工程
将文件目录CANTest3\CanFestival\inc
、CANTest3\CanFestival\inc\stm32
、CANTest3\CanFestival\can
等路径添加到工程包含路径
在canfestival_drv.c
中包含头文件canfestival.h,并定义如下函数:
#include "canfestival.h"
void setTimer(TIMEVAL value)
{
}
TIMEVAL getElapsedTime(void)
{
return 1;
}
unsigned char canSend(CAN_PORT notused, Message* m)
{
return 1;
}
可以先定义一个空函数,等到编译都通过了之后,再往里面添加内容,这几个函数都是定义来供canfestival源码调用的
通过以上几步,所有的文件都弄齐了,还需要注释或删除掉CANTest3\CanFestival\inc\stm32\config.h
文件中的如下几行代码:
(在Mongo-canfestival-3-asc-1a25f5151a8d.zip中为33-38行)
#else // GCC
//#include <inttypes.h>
//#include <avr/io.h>
//#include <avr/interrupt.h>
//#include <avr/pgmspace.h>
//#include <avr/sleep.h>
//#include <avr/wdt.h>
#endif // GCC
由于移植的文件中带有can.h文件,与之前定义的can底层驱动头文件can.h冲突