STM32标准工程模板建立

本文详细介绍了如何从零构建一个基于STM32L151RCT6的工程模板,包括创建文件夹结构、在Keil MDK中新建工程、移植官方固件库文件、配置头文件路径、设置宏定义以及编译输出设置,最终形成一个可编译通过的基础工程模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容皆是个人学习过程中的总结,记录一下整个过程,用于后期复习,如有不对之处,麻烦各位大佬指出~

(喜欢的朋友麻烦点个关注~~~ 后期还会进行持续更新)

小白以及新手在刚开始接触单片机的时候,想必遇到最多的问题就是如何建议一个标准的工程模板了,这篇文章就将详细介绍如何从0到1去建立一个标准的工程模板,本次采用的芯片型号为STM32L151RCT6,如果使用的是别的芯片型号,也一样可以参照文章进行操作

一、准备工作

首先先将STM32L151的标准固件下载好,如果不知道如何下载,可以参考上一篇博客

随即在桌面新建一个文件夹,命名为Template0,创建好后在该文件目录下分别创建CORE 、FWLIB、OBJ、SYSTEM、USER这五个子文件夹

CORE:用来存放核心文件和启动文件;
FWLIB:用来存放库函数源码文件;
OBJ:用来存放编译过程文件和hex文件;
SYSTEM:用来存放共用代码;
USER:用来存放工程文件和主程序main。

 二、开始建立

做好以上准备工作之后,我们正式开始建立

2.1、新建工程,选择芯片

首先打开keil5MDK,点击上面”Project”选项,在弹出的下拉菜单中选择“new uVision Project...

 在弹出的对话框中,选择之前创建的Template0文件夹,并在USER目录下新建一个工程,取名为Template0

 之后再选择自己开发板上芯片的型号(要提前安装好对应的器件包),因为我们这里选用的是STM32L151RCT6的芯片,因此我们选择这个

 之后会出现一个安装组件画面,直接取消就好了

 这时候打开USER目录,有新生成的几个文件和文件夹,我们可以不用理

2.2、移植文件

现在打开下载好的官方固件库,定位到:en.stsw-stm32077_v1-0-0_v1.0.0\STM32L1xx_StdPeriph_Lib_V1.0.0\Libraries\STM32L1xx_StdPeriph_Driver下,把目录下的src和inc复制到我们刚新建的FWLIB下。
src存放的是固件库的.c文件,inc存放的是固件库的.h文件。(如果不知道官方固件库如何下载的,可以参考上一篇博客)

 同样定位到:en.stsw-stm32077_v1-0-0_v1.0.0\STM32L1xx_StdPeriph_Lib_V1.0.0\Libraries\CMSIS\CM3\CoreSupport将下面的两个文件复制到COER下

 

 然 后 定 位 到 目 录:
en.stsw-stm32077_v1-0-0_v1.0.0\STM32L1xx_StdPeriph_Lib_V1.0.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32L1xx\startup\arm 下面,这里不同容量的芯片使用不同的启动文件,我们的芯片 STM32L151RCT6 是中容量芯片,因此我们选择startup_stm32l1xx_hd.s这个启动文件,并将其复制到COER目录下

 (这里因为没找到L151的参考手册,因此引用一下F103的,我们只需要根据区别里面的介绍进行启动文件选择即可)

 再定位到:en.stsw-stm32077_v1-0-0_v1.0.0\STM32L1xx_StdPeriph_Lib_V1.0.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32L1xx将下面的三个文件复制到USER目录下

接着继续定位到:en.stsw-stm32077_v1-0-0_v1.0.0\STM32L1xx_StdPeriph_Lib_V1.0.0\Project\STM32L1xx_StdPeriph_Template将下面的四个文件同样复制到USER下

 

至此,我们已经将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。

2.3添加文件进工程

首先点击品字型,然后:Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source
Group1,建立三个 Groups: USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target名字以及 Groups 情况

 下面我们往上述文件夹中添加文件。和刚才相同的方法,点击那个品子型图标。然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close。可以看到 Files 列表下面包含我们添加的文件。
(这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不
用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而
其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样
的坏处是工程太大,编译起来速度慢,用户可以自行选择。)

用同样的方法,将 Groups 定位到 CORE 和 USER 下面, 添加需要的文件。这里我们的 CORE 下面需要添加的文件为 core_cm3.c, startup_stm32f10x_hd.s (注意,默认添加的时候文件类型为.c,也就是添加 startup_stm32f10x_hd.s 启动文件的时候,你需要选择文件类型为 All files 才能看得到这个文件), USER 目录下面需要添加的文件为 main.c, stm32f10x_it.c,system_stm32f10x.c。

 这样我们需要添加的文件已经添加到我们的工程中了,最后点击 OK, 回到工程主界面。

 

下面我们要告诉 MDK,在哪些路径之下搜索需要的头文件,也就是头文件目录。 这里大家要注意,对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来。 回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。记住, keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK

如果我们这时候进行编译的话,会发现报了很多错误,为什么呢?这是因为库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。点击魔术棒,定位到 c/c++界面,然后填写
“STM32L1XX_HD, USE_STDPERIPH_DRIVER”到 Define 输入框里面。这里解释一下,如果你用的是大容量那么 STM32L1XX_HD 修改为 STM32L1XX_MD,小容量修改为 STM32L1XX_LD. 然后点击 OK。

此时,工程模板就基本配置好了,编写main()函数覆盖原来的,是可以编译通过的。这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件, Browser Information 是可以查看变量和函数定义。

 最后在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…” ,然后选择目录为我们上面新建的 OBJ 目录。 这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。

 

 重新编译代码,会生成hex 文件在 OBJ 目录下面,这个文件我们用 flymcu 下载到 mcu 即可运行。 到这里,一个工程模板就建立了。

最后的最后我们进行SYSTEM文件夹的的内容添加,我们可以直接打开正点原子提供的实验,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,存放的是每个实验都要使用到的共用代码,每个子文件夹下面都有相应的.c 文件和.h 文件。 我们接下来要将这三个目录下面的代码加入到我们工程中去。

同样,我们需要将以上三个源文件的头文件路径告诉MDK,也就是添加头文件路径

 

 注意:写代码时,记得在代码的最后面加上一个回车,否则会有警告

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值