【STM32开发指南】手把手带你从零开始搭建工程(标准库版)

【前言】

       本文将带领大家通过STM32标准库,一步步创建并配置一个Keil工程,无论是初学者还是有一定经验的开发者,希望都能从中获得实用的指导和启发。本文以STM32F103芯片开发为例,从环境搭建开始,逐步到项目配置、代码编写与编译调试,让每一位读者都能掌握基于STM32标准库在Keil环境下的工程创建方法。

阅读本教程前期准备:

1.完成KEIL的安装

     可参考博客KEIL安装步骤
【KEIL安装指南】一文搞定!同时支持ARM与C51双平台开发icon-default.png?t=N7T8http://t.csdnimg.cn/0v6o9

2.固件库(标准库)文件

       STM32F10x_StdPeriph_Lib  (本文以STM32F103芯片为例)

     

     可到ST官网获取 

             ST官网链接   https://www.st.com/content/st_com/en.html

     或到我的主页资源处下载【STM32开发】STM32标准库及工程搭建步骤icon-default.png?t=N7T8https://download.csdn.net/download/debug602/89638250?spm=1001.2014.3001.5501

     更加简单粗暴的方法点个关注后可以后台私信我获取 ~

准备就绪后,我们开始进行工程搭建

1)在建立工程之前先在电脑的某个盘建立一个文件夹,用于存放STM32工程文件,然后在这里面再新建一个文件夹Template作为工程文件夹。文件命名和路径中尽量不要有中文。

2)打开Keil,点击上方的菜单:Project—>New uVision Project,

然后将目录定位到刚刚建立的Template文件夹下,在这个目录下建立子文件夹USER(用来存放代码工程文件),然后定位到USER目录下,把工程文件存放到USER文件夹下,工程命名为Template,点击保存。

点击保存之后弹出选择CPU的界面,就是选择我们用的芯片型号,如下图所示,我们用到的单片机型号为STM32F103RCT6,所以在这里选择STMicroelectronic→STM32F103→STM32F103RC(如果使用其他型号的芯片,选择其他芯片即可,一定要安装对应器件的pack才会显示这些内容!如果没显示,请关闭MDK,然后安装对应的芯片包)

3)点击OK,MDK会弹出Manage Run-Time Environment对话框,如下图所示:

这是MDK5新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,直接点击Cancel即可。得到如下图界面:

到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c文件等。

4)现在我们看看USER目录下面包含3个文件夹和2个文件,如下图所示:

Template.uvprojx 是工程文件,不能轻易删除。Listings和Objects文件夹是MDK自动生成的文件夹,用于存放编译过程产生的中间文件。这里,为了跟 MDK5.1之前版本工程兼容,我们可以把两个文件夹删除,我们会在下一步骤中新建一个OBJ文件夹,用来存放编译中间文件。当然,我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。

5) 接下来,我们在Template工程目录下面,新建3个文件夹CORE, OBJ以STM32F10x_FWLib。

CORE用来存放核心文件和启动文件;

OBJ是用来存放编译过程文件以及hex文件;

STM32F10x_FWLib文件夹顾名思义用来存放ST官方提供的库函数源码文件。

已有的USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等。

6)将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。

打开官方固件库包,定位到我们之前准备好的固件库包的目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,将目录下面的src,inc文件夹拷贝到我们刚才建立的 STM32F10x_FWLib文件夹下面。

src存放的是固件库的.c文件,inc存放的是对应的.h文件,每个外设对应一个.c文件和一个.h头文件。

7)将固件库包里面相关的启动文件复制到我们的工程目录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\arm下面,将里面startup_stm32f10x_hd.s文件复制到CORE下面。

不同容量的芯片使用不同的启动文件,我们的芯片STM32F103RCT6是大容量芯片,所以选择这个启动文件。

8)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目录下面。

9)前面8个步骤,将需要的固件库文件复制到了工程目录下面,下面将这些文件加入到工程中。右键点击Target1,选择Manage Project Items。

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

点击OK,弹出如下界面:

11)下面往Group里面添加我们需要的文件。按照步骤10的方法,右键点击Tempate,选择选择Manage Project Itmes,然后选择需要添加文件的Group,这里第一步选择 FWLIB,然后点击右边的Add Files, 定位到我们刚才建立的目录STM32F10x_FWLib/src下面,将里面所有的文件选中(Ctrl+A),然后点击Add,然后Close。可以看到 Files 列表下面包含我们添加的文件。

这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如只用GPIO,可以只用添加 stm32f10x_gpio.c 而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢。

12)用同样的方法,将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,返回工程主界面,可以看到工程栏中文件已经添加完成。

13)接下来编译工程,在编译之前首先要选择编译中间文件编译后的存放目录。

方点击菜单栏Projetc->Option for Target"Template"...。

然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的OBJ目录。

这里大家注意,如果我们不设置Output路径,那么默认的编译中间文件存放目录就是MDK自动生成的Objects目录和Listings目录

14)下面点击编译按钮

编译工程,可以看到很多报错,因为找不到头文件。

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

三个目录添加完成后如下图所示

16)接下来,再次编译工程,可以看到又报了很多同样的错误。因为3.5版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。按照步骤15,定位到 c/c++界面,然后填“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面

请注意,两个标识符中间是逗号不是句号,如果您不能确定您输入的是正确的,请直接复制。这里解释一下,如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD。

点击Tartget菜单,将ARM编译器选择为版本5,点击OK。

17)下面打开工程 USER 下面的 main.c 文件,复制下面代码到 main.c覆盖原有代码,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告),可以看到,这次编译已经成功了。

#include"stm32f10x.h"
int main(void)
{
    while(1)
    {
    }
}

18) 至此一个STM32F103的工程模版建立完毕。下面还需要配置,让编译之后能够生成hex文件。同样点击魔术棒,进入配置菜单,选择Output。然后勾上下三个选项。

其中Create HEX file是编译生成 hex文件,Browser Information是可以查看变量和函数定义。

19) 重新编译代码,可以看到生成了hex文件在OBJ目录下面。到这里,一个基于固件库V3.5的工程模板就建立完成啦。

相信看到这里,有些小伙伴已经累坏了,感觉创建STM32工程好麻烦,不过大家别担心,工程创建一次熟悉了创建流程就好啦,在后续的项目开发工作中,可以直接复制整个工程文件夹,只需要修改下工程名,然后根据项目功能修改main.c中的关键代码,或添加其他接口文件就好啦。

如果感觉这篇文章对你有帮助的话,请记得点赞收藏 ! ! ! 

工程创建过程中有任何问题,也可在下方留言。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值