【初入电子坑之stm32篇(补充1)】新建固件库工程

前言

新建基于固件库的工程,不理清构建流程的话,看上去还是有点繁琐的,在此记录一下。

原理

为了做到心中有数,我们先要搞清楚为什么这么干。

首先,我们知道,所谓的固件库编程,就是ST公司为了提高广大开发者的开发效率从而提供给大家的一套驱动程序。

我们在工程中想要使用这套程序自然就要先从官方提供的资料中把我们需要的源码copy到自己的工程中去。而又因为这些源码文件有点多,所以为了后面的维护考虑,我们要对这些文件进行分类。

上面虽然啰嗦了很多,但是说白了,新建固件库工程的过程——就是库文件导入和文件管理的过程。

示例

在明白了上述原理之后,经过参考正点原子和野火的工程构建方式。得出以下个人觉得比较舒服的工程管理方式(仅供参考):

工程文件管理

  • Readme: 工程整体性说明文档
  • Libraries: 工程所需的官方启动文件、固件库文件等
  • Output: 工程输出的如:hex之类的文件
  • Project: keil自动生成文件
  • User: 自己写的相关工程源码

对应的在IDE中,我们可以对源文件进行分组:

IDE源文件组管理

需要注意的是,这里的源文件管理和整个工程的文件管理并不完全一致!!!

IDE的源文件分组,在添加源文件时,文件路径需要精确到源文件所在的当前文件夹。

举个栗子:

举例1

Libraries中包含这两个文件夹 CMSIS 和 STM32F10x_StdPeriph_Driver。

举例2举例3

而源文件在 CMSIS 和 STM32F10x_StdPeriph_Driver/src中,所以我们需要添加的是这两个文件。

到这里,工程建立算是初步创建完成了。

小结

  • 根据自己喜欢的方式,合理对工程文件进行分类。

  • 工程文件夹与IDE源文件分组并不完全一致。

重点!!!

1、路径设置

上面的示例,只是人为的文件管理方式,IDE是不知道的。换句话说,如果这个时候你想直接调用库,IDE都不知道去哪找头文件。

所以,文件怎么归类管理都可以,但分类完后得告诉IDE这些文件在哪。

对于KeilL来说,打开option找到C/C++选项,找到Include Paths,然后所有工程.h文件所在文件夹路径加上去即可。

路径选择路径选择2

你以为这样就完了?还没呢!!!

2、conf条件编译

【初入电子坑之stm32篇(二)】固件库编程 中,我们已经讨论过了诸如 “stm32f10x_conf.h” 这样缝合怪文件,它把所有外设的头文件都包在里面了,极大的简化了我们的代码。但它在官方提供源码中是这样的:

缝合怪

调用它需要我们定义一个名为 USE_STDPERIPH_DRIVER 的宏。

所以想要用它,有三种选择:

  • 找个位置,老老实实把这个宏定义了
  • 直接把条件编译的语句注释掉
  • 使用Keil软件的宏定义模板

这里简单说下keil的宏定义模板。因为只要在这个模板上写好了,以后其它工程只要还需要类似的配置,我们就不需要重新找地方做宏定义or注释条件编译了。

宏定义模板

如上图,还是在option中找到C/C++选项,然后在Define中写入即可。若要进行多个宏定义,中间用逗号隔开。

3、启动文件选择宏定义

最后,是关于启动文件选择的问题。

我们知道stm32因为flash的容量大小,不同分成了很多个不同的启动文件。而固件库为了适配不同型号的芯片,做了如下操作:

启动文件宏定义

条边编译+注释。我们需要用时只要解除对应的宏定义项的注释即可。但每次操作库文件容易存在容易出错、调试不便等问题。所以官方也做了相关的tip——使用软件的宏定义模板。

宏定义模板

如上图。

总结

创建工程遵从以下步骤:

  1. 合理对应工程文件夹分类
  2. 在IDE中,进一步进行详细的源文件分组
  3. 头文件路径设置
  4. 如果是第一次做此型号的32芯片配置,可能还需要配置
    1. 固件库配置集合的宏定义
    2. 启动文件选择的宏定义
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2022 逸非安逸
  • Visitors: | Views:

请我喝杯咖啡吧~