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

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

小白以及新手在刚开始接触单片机的时候,想必遇到最多的问题就是如何建议一个标准的工程模板了,这篇文章就将详细介绍如何从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,也就是添加头文件路径

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

STM32标准工程模板建立相关推荐

  1. (一)使用TrueSTUDIO软件新建一个基于STM32标准库工程

    一.TrueSTUDIO说明 不管是还在学习的还是已经工作的应该都很熟悉Keil和IAR这两款用来开发嵌入式的软件,在国内普遍用的这两款编译软件都是破解版的,并没有经过正规渠道授权注册,这就导致了在开 ...

  2. 【STM32H7教程】第4章 STM32H7工程模板建立(MDK5)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第4章   STM32H7工程模板建立(MDK5) 本章 ...

  3. IAR新建stm32工程,完美移植stm32标准库(附源码)

    开发环境:Window 10 64bit 开发工具:IAR Embedded Workbench 硬件:stm32f103c8t6 基于IAR 开发工具,新建立STM32F1系列的最小开发例程,并加入 ...

  4. 了解库开发,我们从STM32标准库开发学起

    摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...

  5. 基于STM32标准库的MS5837程序移植

    基于STM32标准库的MS5837程序移植 一.准备工作 1. 硬件电路 2. 新建工程 二.开始移植 1. IIC底层模拟 2. MS5837移植 3. 主函数编写 4. 代码调试结果 三.源代码下 ...

  6. 【STM32】STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲

    [STM32]STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲 前言 本教程文章是我在学习STM32标准库和HAL库后写的,想通过标准库与HAL库的对照学习加强我对STM32的 ...

  7. stm32标准外设库和芯片资料下载地址

    今天整理了一下当初开发手环固件时的资料. stm32 标准外设库官网下载地址 https://my.st.com/content/my_st_com/en/products/embedded-soft ...

  8. STM32标准库工程中移植TencentOS-tiny

    一.移植前的准备 1. 引言 因为项目的原因需要将原有的标准库工程升级为基于TencentOS-tiny的RTOS工程,所以花费一点时间记录移植过程,提供一份向基于STM32标准库的老工程中移植Ten ...

  9. STM32标准库的引入视频课程-第3季第6部分-朱有鹏-专题视频课程

    STM32标准库的引入视频课程-第3季第6部分-1017人已学习 课程介绍         本课程是<朱有鹏老师单片机完全学习系列课程>第3季第6个课程,本课程详细讲解了STM32官方新标 ...

最新文章

  1. 灾难恢复级别_如何实施云计算灾难恢复
  2. Theano2.1.5-基础知识之打印出theano的图
  3. QT窗体控件自适应大小
  4. HTTP响应代码中文详解
  5. SQLite 时间格式化
  6. php 数组去impload,你真的了解 load 方法么?
  7. 简易c语言编程软件,c语言开发工具下载
  8. 计算机的表白隐藏功能,微信还有这个功能?隐藏代码还能表白!教你高级告白手段...
  9. Python英语单词拼写训练考试系统,单词默写系统,统计易错词,基于Django
  10. Absolute Enable Right Click Copy 简单快速解除滑鼠右键使用限制
  11. 【综合类型第 35 篇】程序员的七夕浪漫时刻
  12. malloc(): corrupted top size 解决
  13. 计算机模拟需要什么配置电脑,城市天际线配置要求 最低电脑配置要求
  14. Windows icon缓存的清理
  15. CentOS下安装XAMPP详细教程
  16. 智能硬件APP开发之路:基于机智云APP开源框架
  17. android x86怎么装驱动,mt65xx android phone驱动怎么安装【图文教程】
  18. MyZip Pro for Mac(专业解压缩工具)
  19. 需求文档 BUC UC
  20. 云海IOP 3.0:为行业云而生

热门文章

  1. 项目经验#关于前端后台项目的从0-1到1开发记录(二)
  2. 磁盘阵列mdadm磁盘配额
  3. ABB轴计算机板x6接口,ABB喷涂机器人零点丢失问题及解决方法
  4. 我用 Java 几分钟处理完 30亿 个数据...
  5. 高逼格PPT技能以及普通PPT技能档次提升学习
  6. Temporal Segment Networks for Action Recognition in Videos 用于动作识别的时序分割网络
  7. Multi Voltage Design的floorplan如何做?
  8. 一文探讨可解释深度学习技术在医疗图像诊断中的应用
  9. 光纤通道光模块与以太网光模块区别
  10. 编程规范及程序员的自我修养