CANOpen系列教程13_协议源码移植(一)

置顶/星标公众,不错过每一条消息!

640?wx_fmt=jpeg

    本教程由作者strongerHuang于2018年11月原创发布。

标签:CAN、 CANOpen、 CanFestival

版权所有:禁止商用

申明该文档仅供个人学习使用,转载请公众号联系作者授权。

1写在前面

基于Canfestival框架的CANOpen协议栈移植教程网上流传着许多,而且有一份不知道被复制、粘贴了多少遍的“CANOpen移植教程”相信许多朋友都知道。

同时,百度、谷歌还能搜出许多所谓“移植代码”。其实,这许多内容,对初学者并没有多大帮助。相反,我觉得还有误导的作用。

基于Canfestival框架的CANOpen协议栈移植需要做的工作并不多,但许多初学者无从下手,究其原因还是有许多内容没有理解到位

本教程站在初学者角度,尽量将重要内容讲述到位,后面提供移植好的Demo供大家参考学习。


2

移植准备

移植前,先让大家认识一下移植的一些准备条件。


2.1 硬件

两块带有MCU、CAN控制器和收发器的板卡。

该移植教程以STM32F1(自带CAN控制器),带有CAN收发器的开发板为例来讲述。

条件允许的情况下,可以购买一个CAN总线分析仪。没有分析仪的朋友,可以用我《CANOpen系列教程06》提供的一个例程来抓取CAN总线数据。

因例程在中断里用串口打印传输数据。所以,用例程抓取的CAN总线传输速率不能太快(建议低于20帧/秒)。

2.2 MCU资源

1.CAN:CAN总线通信(必备);

2.TIM:CANOpen协议调度(必备);

3.UART:调试信息(选配);

4.GPIO:板卡状态指示灯(选配);


2.3 STM32标准外设库+FreeRTOS工程

本教程基于STM32标准外设库和FreeRTOS系统搭建的工程为例(很早之前我分享过),这里不讲述。

运行RTOS主要是牵涉到CAN总线数据的发送和接收需要两个线程来处理,以及增加一个CANOpen应用程序线程。

基于其他MCU以及RTOS原理类似,也可参考本文。

2.4 下载Canfestival源码并搭建好环境

这里的内容,如果你不明白,请务必先阅读该教程前几篇相关文章。


3

生成对象字典

本移植教程重点是将CANOpen协议源码移植到MCU中,使其成功运行。因此,对象字典只配置最基础的“心跳”。

下面教大家在对象字典编辑器中生成带“心跳”的对象字典。

1.打开编辑器,文件 -> 新建

CANOpen系列教程13_协议源码移植(一)_第1张图片

2.新建“主站”节点

CANOpen系列教程13_协议源码移植(一)_第2张图片

3.配置心跳信息

CANOpen系列教程13_协议源码移植(一)_第3张图片

4.保存对象字典:文件 -> 保存 -> 保存在一个指定位置

CANOpen系列教程13_协议源码移植(一)_第4张图片

5.建立对象字典

CANOpen系列教程13_协议源码移植(一)_第5张图片

到这里就生成了三个文件:TestMaster.od、 TestMaster.c 和 TestMaster.h需保存好,在后面需要使用这个对象字典源码。

提示:

A.上面牵涉到三个地方保存名字:节点名字、对象字典工程名字、对象字典源文件名字,建议都一样。

B.主站和从站的生成原理一样,上面是生成主站TestMaster对象字典,从站TestSlave对象字典请按照同样方式生成即可。


4

提取CANOpen源码

本节内容主要针对初学者使其更加理解移植的代码工程,将CanFestival中源代码提取做一定说明,并且尽量将源码文件对应到自己工程下。

当然,本文按照常规方式提取,你也可以按照自己方式提取。同时,整个工程下其它,如STM32标准外设库、FreeRTOS这些文件在这里不作说明。

1.提取头、源文件(如下图)

CANOpen系列教程13_协议源码移植(一)_第6张图片

CANOpen\inc目录下19个.h头文件,来自Canfestival->include下目录19个头文件;

CANOpen\inc\stm32目录下3个.h头文件来自Canfestival->include\cm4;

其中canfestival.h文件是函数接口定义(声明),函数内容需要自己实现(位于:App\canopen目录下canopen_drv.c);

CANOpen\src目录下12个.c源文件,来自Canfestival->src目录下的12个源文件;

其中需要删除dcf.c文件下第59、98行前面的“inline”关键字;

2.头文件说明

CANOpen系列教程13_协议源码移植(一)_第7张图片


要修改一下其中的canfestival.h文件:

CANOpen系列教程13_协议源码移植(一)_第8张图片

3.建立canopen文件夹并提取文件

CANOpen系列教程13_协议源码移植(一)_第9张图片

在工程下建立canopen文件夹,提取相应的文件,同时建立自己的文件:canopen_app和canopen_drv.

还需要修改一下congfig.h文件,如下图:

CANOpen系列教程13_协议源码移植(一)_第10张图片

4.建立CAN和TIM底层驱动文件

CANOpen系列教程13_协议源码移植(一)_第11张图片

在上面canfestival.h文件提供了CAN和TIM的驱动接口,但我们这里不用它那一套接口,自己定义在bsp_can和bsp_timer源代码下。


5

下载

为照顾初学者,将移植内容讲述的更加详细,移植工作在下一篇文章还会继续讲述,提前把移植好的、带有“心跳”的Demo工程给大家下载。

https://pan.baidu.com/s/1LzD0Epc-Z8vlHsb-sD3WVw

提取码:l2dc

提示:如果链接失效,公众号回复【CANOpen系列教程】获取更新链接;


6

说明

1.该文档仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.本文收录于公众号「strongerHuang」,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。  

7最后

若觉得文章对你有帮助,随手点赞、分享,也是对我莫大的支持和鼓励。


扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!


640?wx_fmt=jpeg

长按识别图中二维码关注

640

赞赏是对作者的认可与支持!

你可能感兴趣的:(CANOpen系列教程13_协议源码移植(一))