CAN笔记(23) CanFestival移植

本文介绍了如何将开源CANOpen协议栈CanFestival移植到STM32上,包括源码下载、移植准备、移植步骤详解,涉及CAN中断处理、定时调度、查询调度和CAN发送等功能的实现,以及测试流程。
摘要由CSDN通过智能技术生成


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下新建文件夹candriverincsrc
再在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\incCANTest3\CanFestival\inc\stm32CANTest3\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冲突

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氢键H-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值