欢迎光临散文网 会员登陆 & 注册

《一》canfestival系列教程之程序移植

2021-09-16 10:01 作者:GXTon_阿通  | 我要投稿

步骤一:

首先准备一个工程

确保这个工程是可以用的,比如用正点原子的can工程

第二步:

从官网上下载一个源码程序,解压:

打开之后,有很多文件,我们只取其中的两个文件

src文件夹(里面是.c文件)

include文件夹(里面是.h文件)

第三步:

把  src文件夹  和  include文件夹  复制到工程目录下面.具体放入到工程的哪里,可以按照自己的意愿.

先分析一下正点原子的工程:

正点原子的工程比较规范,工程下面有6个文件夹,每个文件夹都有不同的作用:

USER,代表最上层的函数,实现程序主要功能的逻辑和顺序.

HARDWARE,用于编写各个器件的.c和.h文件,里面就是每个硬件各自的功能.

SYSTEM,系统的东西.

CORE,关于stm32单片机内核的东西,比如启动文件.

FWLIB,关于stm32单片机官方提供的库函数.

README,介绍文档.

具体入下图所示:

添加前

正点原子的工程文件目录.

添加前

 为了方便起见,我们把src和include放入到一个新建的文件夹中.

这个文件夹命名为canfestival.

添加后

并在canfestival文件夹中复制源码库的src和include文件夹.

然后打开src文件夹,把里面多余的部分去掉

src去除前(标红为需要去除的)
src去除后

(注意symbols.c文件也要去除)

同理,打开include文件夹,去除多余的文件

include去除前
include文件夹去除后

include里面有很多平台的文件,这里我们只留下AVR的,

又因为我们使用的是keil,所以要把AVR文件进行改造.把AVR名字改成stm32.

然后进入该文件夹,去除掉多余的文件:

去除前
去除后

第四步:

添加如keil的工程里面,在keil工程里面新加入一个文件夹:canfestival.并把之前的src文件夹中的.c文件添加进去. 同样,也需要添加.h文件.

第五步:

因为我们的这个工程是在AVR工程中改过来的,但是现在我们用的编译器不是AVR而是keil.

所以要进行一下工程上的修改.编译会报错.

需要把config.h文件修改.

第六步:

保存后,再次进行编译.因为函数不完整,会进行报错.

从报错中看,可以知道是缺5个函数.

首先看start_and_seek_node() 和 start_node(),这两个函数原型程序里是有的.

从keil中进行搜索就可以找到,但是为什么还会有报错,就是因为keil不识别inline这个关键字,

把inline去掉即可.


另外还剩下下面三个函数:

canSend()

getElapsedTime()

setTimer()

这三个函数是需要我们编写的.(而且需要根据自己的平台编写,我们用的平台是stm32)

canSend() ,作用是发送can数据,最终canfestival库发送数据,都会调用canSend()函数.

getElapsedTime(),作用是软件定时器的修正(通过一个硬件定时器,来模拟多个软件定时器).

setTimer(),作用是改变硬件定时器的溢出周期.

第七步:

上面讲到还需要canSend(), getElapsedTime(), setTimer()三个函数需要编写.

这里不能单单编写这三个函数.

需要配置stm32的can接口,也就是对can进行参数配置,初始化,使能.然后再调用canSend()才会有作用.

getElapsedTime(), setTimer()要想起到作用,需要配置stm32的定时器.然后timer定时器才可以提供canfestival库一个时钟基准.

如果你用的是其他单片机,或者其他平台,就需要配置其他平台的can底层和定时器底层.


所以在工程目录下面,又创建了两个文件夹:

添加到keil的工程中:

在canfestival_can  中添加  canfestival_can.c  和  canfestival_can.h  文件.

这里面主要添加stm32单片机can的底层配置.

在canfestival_timer  中添加  canfestival_timer.c  和  canfestival_timer.h  文件.

主要添加stm32单片机的定时器配置.


canfestival_can.c文件如下:

canfestival_can.h文件如下:

canfestival_timer.c文件如下:

canfestival_timer.h文件如下:

第八步,

然后进行编译,只有一个错误.

就是"字典"的报错.(关于这一部分,可以先用我下面提供的代码,之后自己生成了字典.c和.h文件后,可以直接进行替换.)

字典是一个配置文档,可以通过配置字典,来实现不同的通信内容.

可以在工程目录下面建立一个canfestival_master文件夹,用于保存字典的.c和.h文件:

并在keil的工程里面加入canfestival_master.c文件:

canfestival_master.c文件内容如下:


canfestival_master.h文件内容如下:

然后进行编译,就没有报错了.

主函数怎么写


工程移植完成后,

需要进行"字典"的.c和.h生成.(按照自己的需求去生成)

需要按照自己的需求去编写相应的主函数main.c了.

主函数的大体框架:

  1. 引入头文件.

  2. 进行can初始化配置,前面canfestival_can.c中有.

  3. 进行硬件定时器初始化,前面canfestival_timer.c中有.

  4. 然后进行canfestival库函数的调用.(配置节点为主或从,把can的状态切换到操作模式)

  5. 进入while(1)循环.

至此,移植工作圆满完成了.

《一》canfestival系列教程之程序移植的评论 (共 条)

分享到微博请遵守国家法律