文章目录

  • 前言
  • 基于固件库搭建工程模板步骤
    • 1. 建立工程文件
    • 2. 建立代码工程目录
    • 3. 选择芯片型号
    • 4. 建立CORE,OBJ,STM32F10x_FWLib文件夹
    • 5. 拷贝固件库源码文件到 STM32F10x_FWLib 文件夹下
    • 6. 拷贝固件库包启动文件到 CORE 下
    • 7. 拷贝固件库文件到USER目录下
    • 8. 将上述文件加入到工程
    • 9. 尝试编译工程
    • 10. 添加头文件路径
    • 11. 宏定义选择外设
    • 12. hex文件生成
    • 13. SYSTEM 文件夹

前言

环境搭建这里就不介绍了,包括MDK软件(keil)的安装(以及安装对应的器件 pack),串口驱动(CH340),ST-LINK驱动等。

在STM32的开发过程中,我们知道有两种方式,库函数和寄存器。
在实际开发中我们可以直接操作寄存器,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用STM32,而对于 STM32 这种级别的 MCU, 数百个寄存器记起来谈何容易。于是 ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。一句话概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。

说明:本文是基于正点原子官方机构提供的资料进行总结的,仅用于个人STM32的学习。

基于固件库搭建工程模板步骤

1. 建立工程文件

在建立工程之前,我们在某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为“基于固件库模板”。在后面的实际开发中,我们可以将其命名为“LED工程”、“红外实验”、“智能家居工程”等。
注意:工程名可以为中文,但是其上级目录(包括上上级、上上上级等)不能有中文,否则会出现编译错误! 当然,为了保险起见,你也可以将所有目录为英文。

2. 建立代码工程目录

点击 MDK 的菜单: Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹
“基于固件库模板”之下,在这个目录下面建立子文件夹 USER(我们的代码工程文件都是放在 USER
目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了),然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为Template,点击保存。

3. 选择芯片型号

这里我们所使用的 STM32 型号为 STM32F103ZET6,所以这里选择STMicroelectronics→STM32F1 Series→STM32F103→STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意: 一定要安装对应的器件 pack 才会显示这些内容哦!

点击OK后,弹出 Manage Run-Time Environment 对话框,直接cancel即可。

现在USER 目录下面包含 2 个文件夹和 2 个文件
这里我们说明一下, Template.uvprojx 是工程文件,非常关键,不能轻易删除。 Listings 和 Objects
文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。这里,我们把两个文
件夹删除,我们会在下一步骤中新建一个 OBJ 文件夹,用来存放编译中间文件。
当然,我们不
删除这两个文件夹也是没有关系的,只是我们不用它而已。

4. 建立CORE,OBJ,STM32F10x_FWLib文件夹

接下来,在“基于固件库模板”目录下,新建3个文件夹CORE, OBJ 以及STM32F10x_FWLib。 CORE 用来存放核心文件和启动文件, OBJ 是用来存放编译过程文件以及 hex 文件, STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括 system_stm32f10x.c 等等。

5. 拷贝固件库源码文件到 STM32F10x_FWLib 文件夹下

将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包,定位到我们之前准备好的固件库包的目STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,打开这两个文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件。

6. 拷贝固件库包启动文件到 CORE 下

打开官方固件库包,定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c和 文 件 core_cm3.h 复 制 到 CORE下面去 。然 后 定 位 到 目 录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
rm 下面,将里面 startup_stm32f10x_hd.s 文件复制到 CORE 下面。这里不同容量的芯片使用不同的启动文件,我们的芯片 STM32F103ZET6 是大容量芯片。

7. 拷贝固件库文件到USER目录下

固件库STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面
将里面的三个文件 stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h,复制到我们的 USER
目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 复制到 USER 目录下面。

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

8. 将上述文件加入到工程

点击下面这个图标:

然后: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, 回到工程主界面。

9. 尝试编译工程

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

进行编译:

发现很多报错,因为找不到头文件

10. 添加头文件路径

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


11. 宏定义选择外设

我们再来编译工程,可以看到又报了很多同样的错误。

为什么呢?这是因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。点击魔术棒,定位到 c/c++界面,然后填写
“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。这里解释一下,如果你用的是中容量那么 STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。

12. hex文件生成

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

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

13. SYSTEM 文件夹

在正点原子 ALIENTEK 提供的实验中,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,存放的是每个实验都要使用到的共用代码。
首先,找到我们实验光盘,打开任何一个固件库的实验,可以看到下面有一个 SYSTEM 文件夹,进入 SYSTEM 文件夹,里面有三个子文件夹分别为delay,sys,usart,每个子文件夹下面都有相应的.c 文件和.h 文件。 我们接下来要将这三个目录下面的代码加入到我们工程中去。

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

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

STM32—建立工程模板相关推荐

  1. STM32编译环境、建立工程模板以及程序下载

    1.之前写51的程序我们一般都是用的keil5软件,现在写32程序,要用到keil MDK软件,但是keil5和keil MDK不兼容,也就是说在keil5里面我们没办法写STM32F1之类的程序,而 ...

  2. stm32建立标准的工程模板

    如何建立一个标准的工程模板,我用的是stm32F103C8芯片的 建立标准的工程模板 1.新建一个Template0文件夹,创建好后在该文件目录下分别创建CORE .FWLIB.OBJ.SYSTEM. ...

  3. STM32 Keil5建立工程模板步骤

    相关文章: * linux配置stm32开发环境概述 2017/7/9 UPDATED 强烈推荐使用CoIDE+GNU ARMg工具链开发STM32,全部是一键式点击就能新建完整的工程,不会像在KEI ...

  4. STM32标准工程模板建立

    以下内容皆是个人学习过程中的总结,记录一下整个过程,用于后期复习,如有不对之处,麻烦各位大佬指出~ (喜欢的朋友麻烦点个关注~~~ 后期还会进行持续更新) 小白以及新手在刚开始接触单片机的时候,想必遇 ...

  5. stm32单片机在keil中如何建立工程模板

    工程架构: 具体步骤: 1,建立工程文件夹,Keil中新建工程,选择型号(这里我们示范的是MD) 2,工程文件夹里建立Start.Library.User等文件夹,复制固件库里面的文件到工程文件夹 S ...

  6. STM32F103RCT6 基于STM32Cube_FW_F1_V1.8.0库建立工程模板

    1.下载STM32Cube_FW_F1_V1.8.0库文件 官方下载地址: https://www.st.com/content/st_com/en/products/embedded-softwar ...

  7. STM32建立固件库小结

    最近在复习固件库的使用,顺便写一下当作日记方便复习 1.找到固件库模板下载(已经上传) 2.新设置文件夹将模板里面的内容cv进去 3.打开keil,点击project建立new uvision pro ...

  8. 在 keil 建立基于STM32开发的工程模板--详细步骤

    手把手教你在keil建立STM32的工程模板 1 先说几句 1.1 什么是STM32? 1.2 什么是cortex? 1.3 什么是ARM? 1.4 什么是意法半导体? 2 硬件平台 2.1 STM3 ...

  9. 建立stm32工程模板及Keil设置(一)

    本次建立的工程模板以stm32f103zet6(大容量)单片机为例.模板中所用到的文件都是从stm32固件库V3.5中复制来的. 一.首先在电脑系统桌面上建立"工程模板"文件夹,此 ...

  10. ARM Keil MDK开发STM32工程模板

    使用Keil MDK开发STM32的工程模板 源代码工程 https://github.com/chenhaifeng2016/Band

最新文章

  1. arcengine 加载地图不显示_地图建筑建模制作与输出
  2. 如何在签约之前搞定难缠的客户
  3. linux下配置jdk+tomcat
  4. 数组排序c语言函数_C语言如何写出返回数组最大最小值之差的函数(C primer plus 10-5)...
  5. VSCode远程开发
  6. 睡觉时钱被转走、开房信息被叫卖、数字货币被篡改,你的安全感,还在吗?...
  7. 麦块未发现java怎么解决_教大家麦块我的世界盒子如何打开游戏
  8. 和 jQuery 说再见!Bootstrap 5 将移除对其依赖
  9. oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
  10. WPF仿微信保存与查看聊天记录
  11. OpenLayers 绘制,选中,鼠标悬浮
  12. 3个维度,帮助IT部门快速完成企业云盘选型!
  13. 三菱Q系列通过wifi联服务器,三菱Q系列PLC以太网通讯,三步可以搞定!
  14. 我在离天空最近的城市
  15. ESXI 7.0 安装教程
  16. (七)Java垃圾收集器详解
  17. IBM的三种异地容灾方案
  18. 武汉最牛批的互联网基本都在这了!
  19. 数人云开源Mesos调度器Swan
  20. 缅怀致敬 继往开来 | 萨师煊教授诞辰100周年纪念主题活动在京举行

热门文章

  1. 自己写的一个校验IP、IP掩码、IP段的方法封装到了JQ中,方便了使用者的使用...
  2. 使用CreatePen()创建自定义画笔
  3. PHP对接抖音开发平台接口
  4. ORA-00001: 违反唯一约束条件
  5. 微信小程序云数据库中变量作为字段名与字段取值、字段值取值
  6. 六 创建横断面图及采样线的编辑
  7. python appium+夜神模拟器 配置 笔记整理
  8. png和ico格式互相转换工具
  9. word公式编辑器复制粘贴未响应_Word公式编辑器使用中的常见问题的解决办法(图文教程)...
  10. 《微积分:一元函数积分学》——基本积分表