- 使用STM32CubeMX新建一个工程,仅需对CAN、RCC、SYS做简单的配置即可,CAN波特率配置为500k,点击Project -> Generate Code生成Keil工程与代码;
-
CanFestival官网下载最新版的源代码,在工程目录下新建CanFestival文件夹,将相应的文件拷入其中,其中ObjDict.c,ObjDict.h的生成在博文使用Objdictedit生成CanFestival所需的对象字典文件中讲述,can_STM32.c,timer_STM32.c参考源代码中的can_AVR.c,timer_AVR.c修改而来,文件树形结构如下:
├─CanFestival
│ │
│ ├─driver
│ │ can_STM32.c
│ │ timer_STM32.c
│ │
│ ├─include
│ │ │ can.h
│ │ │ can_driver.h
│ │ │ data.h
│ │ │ dcf.h
│ │ │ def.h
│ │ │ emcy.h
│ │ │ lifegrd.h
│ │ │ lss.h
│ │ │ nmtMaster.h
│ │ │ nmtSlave.h
│ │ │ objacces.h
│ │ │ ObjDict.h
│ │ │ objdictdef.h
│ │ │ pdo.h
│ │ │ sdo.h
│ │ │ states.h
│ │ │ sync.h
│ │ │ sysdep.h
│ │ │ timer.h
│ │ │ timers_driver.h
│ │ │
│ │ └─STM32
│ │ applicfg.h
│ │ canfestival.h
│ │ config.h
│ │ timerscfg.h
│ │
│ └─src
│ dcf.c
│ emcy.c
│ lifegrd.c
│ lss.c
│ nmtMaster.c
│ nmtSlave.c
│ objacces.c
│ ObjDict.c
│ pdo.c
│ sdo.c
│ states.c
│ sync.c
│ timer.c
- 在timer_STM32.c中需要实现setTimer,getElapsedTime,timerCanFestival三个函数,在can_STM32.c中需要实现canSend函数,在dcf.c中需要在inline前添加static,否则编译不通过,原因不明,在main.c中需要调用setNodeId和setState对协议栈进行配置;
- 编译通过后下载至战舰STM32F1开发板,使用周立功USBCAN-E-P主站卡进行测试,在CANmanager for CANopen中添加从站,点击启动按钮,启动成功后界面如下:
源码下载
资源地址
参考文献
(笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32