首先,如果对CANOPEN的一些基本概念不懂的话,先去看看《CANopen轻松入门》,看了那么多资料觉得这个写得最好。
链接:https://pan.baidu.com/s/1KxO_TOj2PnKg-8M8fPLpZA
提取码:8888
最近需要用到CANOPEN来通讯,网上资料很多,可是感觉没有很小白的教程,东看西看看了好久,才算是能用起来。我这边用的是STM32,不跑系统移植了CanFestival,最后实现从站接收报文并修改一些变量的值。移植参考了一些文章,在这里感谢分享资料的老哥们。按照下面的步骤应该能成功通讯获取到想要的变量值。
1、下载CanFestival源码:https://hg.beremiz.org/CanFestival-3,选择bz2格式下载就行。
2、解压下载的CanFestival源码备用。
3、在STM32工程目录下新建文件夹CanFestival,再新建其子文件夹driver、inc和src。
4、拷贝CanFestival源码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个文件到STM32工程的CanFestival\src目录下。
5、STM32工程的CanFestival\inc目录下创建子目录stm32,并拷贝CanFestival源码include\AVR目录下的 applicfg.h、canfestival.h、config.h、timerscfg.h 共4个头文件到STM32工程的CanFestival\inc\stm32目录中。
6、拷贝CanFestival源码include目录下的所有.h文件到STM32工程的CanFestival\inc目录下,共19个文件。
7、在STM32工程的CanFestival\driver目录下创建stm32_canfestival.c。
9、在keil里添加各头文件路径。
10、注释掉config.h中红框的宏。
11、在stm32_canfestival.c中包含头文件#include “canfestival.h”,并定义如下空函数:
#include "canfestival.h"
void setTimer(TIMEVAL value)
{
}
TIMEVAL getElapsedTime(void)
{
return 1;
}
unsigned char canSend(CAN_PORT notused, Message *m)
{
return 1;
}
void timerForCan(void)
{
}
12、编译工程,在dcf.c中有两个内联函数会报错,在函数定义前加static即可。
13、再次编译,应该没有错误,如果有,自己看一下是不是需要添加一下头文件什么的。
14、完善stm32_canfestival.c中的内容。其中函数CAN1_Send_Msg和CAN底层有关&