gd32f407 移植canopen协议

[复制链接]
1894|14
 楼主| 芥末味单片机 发表于 2024-10-30 16:51 | 显示全部楼层 |阅读模式
下载canopen协议栈,开源的canfestival的下载地址:https://hg.beremiz.org/canfestival/
109536721f380847d8.png

 楼主| 芥末味单片机 发表于 2024-10-30 17:01 | 显示全部楼层
选择canfestival下载zip版本即可
81496721f5d3aa60b.png
 楼主| 芥末味单片机 发表于 2024-10-30 17:07 | 显示全部楼层
新建一个工程模板,此过程略过,在代码路径下创建一个文件夹,将源码目录下的include和src两个文件夹复制进去。
182076721f73f760fd.png
 楼主| 芥末味单片机 发表于 2024-10-30 17:12 | 显示全部楼层
在gd32f407工程中添加canopen文件夹,并将src和include文件夹拷贝过来
142406721f75150c8e.png
582106721f7566923c.png
 楼主| 芥末味单片机 发表于 2024-10-30 17:17 | 显示全部楼层
将include文件夹下除了AVR文件外的文件夹删除,建议将AVR修改为GD32
655506721f897de19b.png
615686721f89ceb57c.png
 楼主| 芥末味单片机 发表于 2024-10-31 09:33 | 显示全部楼层
src 文件夹中删除选中的三个文件
31906722de718fbb7.png
 楼主| 芥末味单片机 发表于 2024-10-31 09:36 | 显示全部楼层
config.h文件的修改如下,需要对方框部分进行注释
237246722de85226f6.png
 楼主| 芥末味单片机 发表于 2024-10-31 09:42 | 显示全部楼层
dcf.c 在函数start_node和函数start_and_seek_node前面添加static 修饰
509526722df3994a89.png
 楼主| 芥末味单片机 发表于 2024-10-31 09:46 | 显示全部楼层
canopen底层配置需要我们完成的函数一共有三个:
1:uint8_t canSend(CAN_PORT notused, Message *message)
2:void setTimer(TIMEVAL value)
3:TIMEVAL getElapsedTime(void)
在CAN中断接收函数最后加入canDispatch(&test_OD, &Rx_Message);
另外,需要在定时器中断中清除CAN软件定时器的计数值。
需要注意:
CAN的过滤器配置还是需要手动配置的;
CAN的过滤器配置为0;
 楼主| 芥末味单片机 发表于 2024-10-31 09:50 | 显示全部楼层
定时器的配置,需要按照timerscfg.h中的配置,如图,定时器计数值+1的时间和定时器的时钟和分频值有关。
648696722e175b3e35.png
星辰大海不退缩 发表于 2024-10-31 11:03 | 显示全部楼层
gd32f407 移植canopen协议学习一下
 楼主| 芥末味单片机 发表于 2024-10-31 11:07 | 显示全部楼层
打开字典工具需要安装python和wxpython,本人亲测,建议安装2.7版本的python,其它版本肯可能会存在闪退现象。进入CanFestival源码objdictgen文件夹中将Gnosis_Utils-current.tar.gz解压,复制gnosis文件夹到CanFestival源码objdictgen文件夹中然后双击打开objdictedit.py,出现如下界面为成功。
719076722f45b4b2bf.png
 楼主| 芥末味单片机 发表于 2024-10-31 11:55 | 显示全部楼层
新建一个字典,测试一下CanFestival移植是否成功
539576722ffc5b267b.png
 楼主| 芥末味单片机 发表于 2024-10-31 12:13 | 显示全部楼层
心跳时间设置为1000ms
46556722ffd5ca8ff.png
 楼主| 芥末味单片机 发表于 2024-10-31 13:06 | 显示全部楼层
然后点击文件->建立字典,将字典生成c和h文件,将这两个文件添加进工程,
注意修改CO_Data类型引用的名字,初始化调用下面这三个函数既可:
setNodeId(&master_Data,0x02);//设置node-id
setState(&master_Data, Initialisation);//canopen初始化
setState(&master_Data, Operational);//canopen进入操作状态
完成以上操作后,canopen主节点可接收到id为0x700的心跳报文,时间间隔为1000ms。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部