基于STM32+使用标准库创建工程--手把手纯新手教学

前言

        这个博客的意义就是为了帮助新手快速创建一个基于STM32的工程模板,主要记录从零创建一个全新的STM32F103的项目过程,大部分是自己收集和整理,如有侵权请联系我删除。

交流群:717237739

如果觉得有用点赞关注收藏三连,多谢支持

本博客内容原创,创作不易,转载请注明

(1)建一个目录存放工程

        在电脑上随意创建一个文件夹(比如STM32F103),不能带有中文的,这个文件夹的作用就是用来存放目标工程.。

然后在这个文件夹目录下创建五个子文件夹,这样取名只是为了方便识别。用来存储特定的类型的文件,能帮助我们快速找到对应的文件并应用。至于这些文件夹名字,实际上是可以任取的,

至于这些文件夹为什么要这样分类,下面创建工程的时候会一步一步讲到。

STM32F103目录下创建五个子文件夹:CORE,FWLIB,STM32F10x_FWLib,SYSTEM,USER,如下图:

 2)打开keil软件--然后在文件的左上角找到

创建完文件夹之后,就要创建我们的Keil的工程了---打开Keil--Project – New μVison Project

    然后在弹出来的界面中,选择我们刚才创建的目录下的USER目录下,也就是...\STM32F103\USER路径下,然后输入文件名,我这里和我自己的工程名称一致,是stm32f103,然后点击保存。

 

 工程保存之后,在软件界面就会弹出来一个芯片选择框让我们选择芯片,因为我们使用的是STM32F103ZETx,所以我们选择这个芯片,点击OK

(在选择芯片之前,一定要确认自己已经安装了对应型号的PACK包,否则无法选择对应的芯片型号)

建立工程一定要看清楚自己的单片机芯片型号再进行选择,不然建立工程会报错。

然后接下来的Manager Run-Time Environment界面直接点击Cancel就行了。

到此,我们的工程框架就创建好了,现在在工程里,只有一个Target1 下的 source Group 1
然后我们在系统中点开文件夹,发现在USER目录下多了几个文件:
MDK5.14生成的工程文件是以.uvprojx 为后缀。这个不能删除
Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。这两个文件不用管它

(3)工程建立好之后,我们就要把库文件复制到我们的工程里才能使用。

1.官方的库文件一般在ST官网可以下载,标准库是st公司提供的。

(不过这些资料网上已经很多了,可以选择去正点或者野火的官网去搜索获取,或者在我评论区拿取)

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

 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,还有一个html文件是一个说明文件

直接复制这两个文件放在这个目录下:

找到官方的启动文件,在\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目录下,把这两个文件复制到CORE 文件夹下。

然后再找到芯片的容量大小的文件,通过\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm这个文件夹下选择自己芯片对应的容量大小文件。

 那我们怎么才能知道自己芯片的容量大小是多少呢?

 我们可以通过在ST官网的ST32选型手册去查看,也可以通过下图选择:

因为我们使用的是STM32F103ZET6,是512K的大容量产品,所以选择hd.s的文件。

 把芯片需要的启动文件和芯片文件复制到CORE文件夹下面:

          CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件
以及 hex 文件
        STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文
件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c, 以及其他包
system_stm32f10x.c 等等。        
下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
打开官方固件库包,定位到我们之前准备好的固件库包的目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,
将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。
src 存放的是固件库的 .c 文件, inc 存放的是对应的 .h 文件,您不妨打开这两个文件目录过目一
下里面的文件,每个外设对应一个 .c 文件和一个 .h 头文件。
定位到目录:
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 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将
这些文件加入我们的工程中去。右键点击 Target1 ,选择 Manage Components

(4)打开Keil,添加我们需要的库文件

下面我们还要将这些文件加入我们的工程中去。

   这个时候,就要打开我们的Keil软件了,在软件的里,添加源文件对应的头文件,哪里有xxx.c文件,就添加这个文件所在的目录

在MDK5中,右键点击 Target1,选择 Manage Project Items
然后在Project Targets一栏,我们双击Target将名字修改为 STM32F103,然后在 Groups 一栏删掉一个 Source Group 1,建立三个 Groups:USER,CORE,STM32F10x_FWLib。然后点击 OK,可以看到我们的 Target名字以及 Groups 情况如下图:

接下来我们就要在STM32F10x_FWLib这个文件夹下添加我们需要的库函数文件,找到我们刚才复制在这个文件夹上的两个文件,在src这个文件夹上存放的是我们需要的.C文件,一般来说你需要那个就添加那个,不过新手我还是建议全部添加,不多BB,上图:

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

设置头文件

 接下来要在 MDK 里面设置头文件存放路径。
也就是告诉 MDK 到那些目录下面去寻找包含了的头文件。
这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。

设置目录

先进入 PATH 配置界面,选择C/C++标签,然后点击Include Paths

在弹出的界面中,点击New(Insert),然后添加点击添加路径
这里我们需要添加的头文件路径包括:\CORE, \USER\, \FWLIB\inc
这里大家务必要仔细,固件库存放的头文件子目录是\STM32F10x_FWLib\inc,不是src。
很多朋友都是这里弄错导致报很多奇怪的错误。添加完成之后如下图

添加标识符

接下来对于 STM32F40 系列的工程,还需要添加一个全局宏定义标识符。
添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入: 

STM32F10X_HD,USE_STDPERIPH_DRIVER   用 , 隔开的。

那么这两个东西是有什么用呢,在文件哪里可以找到呢?

我怎么知道我这个芯片用那个?

 USE_STDPERIPH_DRIVER:在C/C++预定义中加入“USE_STDPERIPH_DRIVER”就是允许“使用标准外设驱动”了。我们找到stm32f10x.h这个文件:

然后在这个文件里就能找到这个驱动的定义了

STM32F10X_HD :这个是根据自己芯片容量大小选择,一般来说如果需要移植的话,也是需要改动这个定义的。根据芯片大小确定

 只有我们定义了STM32F10X_HD这个宏,才可以顺利编译,进而,根据定义的这个宏,定义将会用到的与外设有关的宏!!!

(5)创建一个main.c文件,编写一个函数确定工程是否创建成功

1.新建一个xxx.c(main.c)文件,包含函数int main()

这个文件是工程的主函数,一切代码都是从这个函数开始执行到结束,创建完成后把他放在我们的工程下。

编译 

接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
方法是点击魔术棒 ,然后选择Output选项下面的 Select folder for objects…
然后选择目录为我们之前新建的 OBJ 目录。
同时将下方的三个选项框都勾上,如下图:

这里说明一下勾选的意义。
Create HEX File 选项选上是要求编译之后生成 HEX 文件。
Browse Information 选项选上是方便我们查看工程中的一些函数变量定义。 

现在我们放上测试代码,执行一下看有没有错误吧:

 这样的话,一个工程的建立就基本结束了,也可以正常使用了。

注意

     我们在上面的时候,创建了五个子文件夹,很多人应该有疑问为什么SYSTEM没用到,其实这个文件夹主要是为了分辨,我把用到时钟的函数都放在这里了,比如延时,滴答定时器,RTC等等。放的是每个实验都要使用到的共用代码。

 

所以我们不必纠结,而且在后面开发的时候,我们也可以再创建一个文件夹,用来存放应用实现的函数,这样我们调试的时候就很方便了。

总结

STM32工程的创建太麻烦了,不过这是学习的必要一环,等之后的项目就是在此基础上的增加了 

                

交流群:717237739

如果觉得有用点赞关注收藏三连,多谢支持

本博客内容原创,创作不易,转载请注明

  • 22
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值