Canfestival在ARM平台上的移植
本节我带大家来一步步移植一个可以运行在ARM平台上CANopen协议栈,尽可能详细简介,不免有些疑问,大家大可不必深入探究,后面会在移植的代码中深入探究,本节就是纯粹的移植。ARM平台的MCU遍地开花,选一个大家比较熟悉且容易上手的MCU,暂且拿STM32F103来开刀吧,因为它简单哈,大多学生党、工程师们都是从STM32F103开始研究ARM系列的单片机,还记得那块经典的战舰和mini吗?还记得开头歌“我的未来不是梦”吗?咱们就从简单的开始吧!为开启这个工程准备原材料:
Canopen_Canfestival 源码;
keilMdk软件;
STM32F1系列开发板(带CAN转换芯片)、
CAN分析仪、
USB转串口工具。
现在,让我们愉快的开始吧,不管它怎么样,先复制一份Canfestival的源码,根据工程的需要再一步步进行删减。现在新建一个文件夹,暂且命令为Canfestival-Stm32,后续可能还会支持STM32更多系列,甚至国产其它系列哦!文件夹内新建几个文件夹,分别命名为bsp、src、include、doc、rtos等。其中bsp文件夹下主要存放了一些支持的板卡和一些平台;src文件夹下存放了canfestival的源码文件(都是一些.c文件);include文件下存放着canfestival需要包含的头文件(都是一些.h文件);rtos文件夹存放着有关实时操作系统的文件,后续会在文件中添加FreeRtos或者RT-Thread等;至于doc文件夹自然就是存放一些说明文件啦!展示一下这些文件给大家看一下,你们也可以根据自己的喜好,命名一些更加专业的文件夹的名称,总之自己喜欢就好。
在bsp文件夹下依次追加几个文件夹,即是bsp->stm32-> stm32f103-fire-arbitrary
在stm32文件夹下我们添加docs 、stm32-libraries、stm32103-atk-warshipv3和stm32f103-fire-arbitrary。即是在stm32文件夹下添加stm32的hal库文件和支持的板卡,暂时支持正点原子的战舰V3和野火的霸道开发板,后续再添加支持板卡大家可以去github上去下载,所有代码托管到GitHub上,欢迎大家批评指正。
在stm32f103-fire-arbitrary文件夹下同样包含了三个文件夹,applications存放一些应用的代码,比如main.c 、 board.c、board.h等;board-drives存放关于野火霸道开发板的驱动程序;figures就是存放野火霸道的图片啦!同样,stm32103-atk-warshipv3文件夹下类似存放着这些文件,感兴趣的同学可以去研究一下。
手头正好有块野火霸道开发板,暂且以霸道开发板为例吧,开始我们的第一个CANopen工程。先从canfestival源码的src文件夹下复制全部内容到新建的文件夹的src中,并删除win32,这里我们暂且不用win32。
将canfestival源码的include文件夹下(除了文件夹外)所有文件复制到新建的文件夹include中,后面可能需要删减,先暂且这么做。
现在我们来使用Keil MDK新建一个标准库STM32F1的工程,在其工程上添加canfestival,使用标准库新建一STM32F1的工程的过程就省略了,大家可以去参考正点原子和野火的书籍和教程。新建好的标准工程如下,如果实在不想自己使用keilMDK新建的话,可以使用CubeMx生成一个HAL库的工程即可。下图是一个HAL库的工程,主函数里面很干净,就是实现对LED翻转操作。考虑到HAL库没有标准库的执行效率高,故本系列CANopen教程均采用标准库。
现在我们再这个标准库工程上添加一个分组,将Canopen协议栈添加到工程下,将src文件夹下的内容添加进来,symbols.c暂且不添加进来,不要忘了把include文件夹的路径添加进来,具体操作如下:
先来编译一下哈,准备好了吗?肯定一堆错误的,提示缺少applicfg头文件,哪里去找这个文件呢?
我们可以去实例下的avr文件夹下暂且复制我们需要的配置头文件,暂且编译通过,后期再加以修改。好的,就这么干,我们去avr文件夹下复制applicfg.h、canfestival.h、config.h、timerscfg.h四个头文件复制到我们新建的include文件夹下,为了后期好修改,我们在include文件夹中新建stm32文件夹,然后将四个文件头文件拷贝进来即可。
再来编译一下,还是找不到一些头文件。这个很简单了,这里提示打不开avr的一些头文件,简单粗暴,可以直接注释即可。
注释avr相关的头文件
再来编译一下,哎呦,错误变少了,顿时有信心啦,这里提示不能找到这些函数,先来看第一个函数:start_and_seek_node,改函数位于dcf.c文件下,这里可以简单的将inline修饰去掉即可编译通过。
start_and_seek_node函数原型
同样的方式将start_node函数的inline修饰去掉即可排除两处错误这样就剩下下面的三处错误了,这样也到达了我们的目的,因为这三个函数canfentival确实没有帮我们实现,需要我们自己添加,移植到这里也算是成功一半了!
这里提示缺少三个接口函数,好的,我就满足你,先写三个接口空函数给你,糊弄一下,后面我们再来补充,先编译通过再说嘛!我这里是新建了一个board.c和board.h,把三个接口函数放到board.c中,好了,再来编译,没错了吧!
移植到这里就算成功了,下一步就行功能的实现,我们让CANopen真的跑起来,大家肯定很期待吧!
页:
[1]