CanFestival移植至战舰STM32F1开发板

时间:2024-03-18 14:22:00
  1. 使用STM32CubeMX新建一个工程,仅需对CAN、RCC、SYS做简单的配置即可,CAN波特率配置为500k,点击Project -> Generate Code生成Keil工程与代码;
  2. 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
  3. 在timer_STM32.c中需要实现setTimer,getElapsedTime,timerCanFestival三个函数,在can_STM32.c中需要实现canSend函数,在dcf.c中需要在inline前添加static,否则编译不通过,原因不明,在main.c中需要调用setNodeId和setState对协议栈进行配置;
  4. 编译通过后下载至战舰STM32F1开发板,使用周立功USBCAN-E-P主站卡进行测试,在CANmanager for CANopen中添加从站,点击启动按钮,启动成功后界面如下:
    CanFestival移植至战舰STM32F1开发板

源码下载
资源地址
参考文献
(笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32