1.前言
本次使用MM32F5370移植CANopen功能,CAN基本功能例程中已经实现,以及以基础知识不在讲解。重在CANopen移植实现过程。
2.移植准备
移植CANopen先有一个基础工程,具备打印信息,LED灯就行,官方的SDK的路径有点深,有点乱,于是自己手动调了下。有一个点就是之前在玩MM32F5270的时候有个一个MindSDK,用着还可以,但现在已经不能访问了,能用的话还可以烧一下工作量。
下载CANopen相关资料:https://canfestival.org/code
下载后解压得到以下文件夹:
接下来就是对象字典工具安装,主要就是这个对象字典编辑器,用于生成对象字典,下载Python2.7(python-2.7.15.amd64.msi)和wxPython2.8。CanFestival-3-8bfe0ac00cdb/objdictgen目录下解压Gnosis_Utils-current.tar到当前目录, 复制gnosis文件夹到canfestival-de1fc3261f21/objdictgen目录下, 找到该目录下objdictedit.py, 点击启动, 有对象字典配置界面显示, 环境成功安装。
找到canfestival-de1fc3261f21\examples\TestMasterSlave下的主机和从机的OD文件,对象字典表。
使用对象字典编辑工具打开这2个文件,打开后选择建立词典,得到主站和从站的对象字典表,后续会用到。
得到2个C文件:
3.移植步骤
1.在工程路径下添加CANopen文件夹,然后添加以下文件夹:
2.复制canfestival-de1fc3261f21包下的src文件夹内的全部源文件到工程文件的Src目录
3.复制canfestival-de1fc3261f21包下的include文件夹内的头文件到工程文件的Inc目录下, 并且将canfestival-de1fc3261f21
下的example/AVR/Slave文件夹下的ObjDict.h复制到工程文件Inc文件夹内。同时复制canfestival-de1fc3261f21/include/AVR目录下applicfg.h、 canfestival.h、 config.h、 timerscfg.h到这个文件夹。
4.将canfestival-de1fc3261f21/examples/TestMasterSlave文件夹下的TestMaster.c、 TestMTestMasterSlave.h复制到工程目录CANopen\Dictionary下。用什么就复制什么过来。
5.Driver文件夹下是芯片硬件驱动:
6.打开模板工程,添加源文件和头文件路径:
7.CAN硬件初始化:
8.定时器初始化及其接口对接:
9.注释掉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>
10.修改dcf.c中的函数前修饰inline
inline void start_node(CO_Data* d, UNS8 nodeId)
修改为
static __inline void start_node(CO_Data* d, UNS8 nodeId)
11.Can发送接口对接
12.CAN接收接口对接
4.应用
写应用代码,如下所示,验证由于手上的CAN分析仪借走了,还没拿回来,后续验证,