【CANopen】关于STM32的CanFestival移植

本文详细介绍了使用STM32F407进行CanFestival源码移植,包括工程新建、源码整理、驱动适配及字典工具的使用,旨在帮助开发者顺利移植并配置CAN通信功能。
该文章已生成可运行项目,

系列文章目录



使用STM32F407单片机

一、准备工作

  1. CanFestival下载

在这里插入图片描述
在这里插入图片描述

二、源码移植

1、新建CubeMX工程

默认都会,略

2、移植CanFestival源码

在CubeMX生成代码路径下创建一个文件夹,将源码目录下的include和src两个文件夹复制进去

在这里插入图片描述
在这里插入图片描述

3、去除源码中的多余项

首先是include文件夹,如图所示,其中,timers.h大概率会和CubeMX中生成的文件名重名,所以需要重命名这个文件夹改名后需要修改src\timer.cinclude\sdo.h中的头文件引用
在这里插入图片描述

接下来是src文件夹,如图
在这里插入图片描述

4、源码修改

  1. config.h
    在这里插入图片描述
  2. dcf.c

在这里插入图片描述

三、底层驱动适配

CAN和定时器的配置在CubeMX中配置。配置完成后需要我们完成的函数一共有三个:

uint8_t canSend(CAN_PORT notused, Message *message)
void setTimer(TIMEVAL value)
TIMEVAL getElapsedTime(void)

在CAN中断接收函数最后加入canDispatch(&test_OD, &Rx_Message);

另外,需要在定时器中断中清除CAN软件定时器的计数值。

需要注意的点:

  1. CAN的过滤器配置还是需要手动配置的;
  2. CAN的过滤器配置为0;
  3. 定时器的配置,需要按照timerscfg.h中的配置,如图,定时器计数值+1的时间和定时器的时钟和分频值有关。
    在这里插入图片描述

四、字典工具

使用字典之前需要先安装python和wxpython,实测3.8版本打开字典闪退,换用2.7.10版本可用,其他版本未使用。
wxpython版本:wxPython2.8-win64-unicode-2.8.12.1-py27

进入CanFestival源码objdictgen文件夹中

Gnosis_Utils-current.tar.gz解压,复制gnosis文件夹到CanFestival源码objdictgen文件夹中

然后双击打开objdictedit.py,出现如下界面为成功:

在这里插入图片描述

1、字典的使用

新建一个字典,测试一下CanFestival移植是否成功
在这里插入图片描述
在这里插入图片描述
然后点击文件->建立字典,将字典生成c和h文件,将这两个文件添加进工程。

注意修改CO_Data类型引用的名字

初始化调用下面这三个函数既可

setNodeId(&master_Data,0x02);//设置node-id
setState(&master_Data, Initialisation);//canopen初始化
setState(&master_Data, Operational);//canopen进入操作状态

完成以上后,既可在接收端收到id为0x700的报文。

本文章已经生成可运行项目
### CANopen 协议移植至特定平台或系统的指南 #### 1. 平台选择与准备 对于希望将 CANopen 移植到特定硬件平台上,如基于 PIC 的微控制器设备而言,存在专门为此类架构设计的解决方案——CANopenPIC。该库不仅兼容多种型号的 16 和 32 位 PIC 芯片,还附带了易于理解并上手实践的 Arduino 类型示例程序[^1]。 #### 2. 开发环境搭建 为了简化开发流程,在构建 CANopen 应用之前需先配置好相应的编译工具链和支持文件。这通常涉及到安装官方提供的 IDE 或者命令行下的交叉编译器套件,并确保能够顺利下载固件镜像到目标板卡之上。 #### 3. 基础功能实现 当完成上述准备工作之后,则可以着手编写核心逻辑部分。这里以最基础的消息接收为例: ```c void can_receive_message(void){ // 接收到消息后的处理函数 } ``` 此段伪代码展示了如何定义一个用于响应接收到的新帧事件的方法框架;实际项目里应当依据具体需求填充必要的业务操作语句。 #### 4. 使用 SocketCAN 进行通信优化(适用于 Linux) 如果是在运行有 Linux 操作系统的计算节点间建立连接的话,那么借助于成熟的 SocketCAN 技术栈将是明智之举。通过这种方式可以在不改变原有应用程序接口的前提下获得更好的性能表现和稳定性保障[^2]。 #### 5. 向前看:拥抱新技术趋势 最后值得一提的是,鉴于当前行业内正逐步向更高传输速率演进的趋势来看,了解和支持最新版本的标准—比如 CANopen FD —或许会成为未来一段时间内的重点工作方向之一[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值