《嵌入式-STM32开发指南》第一部分 入门篇 - 第5章 STM32新建工程及配置

发布者:Asawen最新更新时间:2024-12-17 来源: elecfans关键字:嵌入式  STM32  新建工程  配置 手机看文章 扫描二维码
随时随地手机看文章

5.1 新建文件

5.1.1 新建文件夹

在 STM32-Template 文件夹下,我们新建四个文件夹,分别为DIF、Doc、Listing、Output、User。其中DIF中包含两个文件夹CMSIS和Fwilb, CMSIS 用来存放库为我们自带的启动文件和一些 M3系列的通用文件。CMSIS文件里存放的文件适合任何M3内核的单片机,CMSIS 的 缩写为:Cortex Microcontroller Software Interface Standard,是 ARM Cortex 微控制器 软件接口标准,是 ARM 公司为芯片厂商提供的一套通用的且独立于芯片厂商 的处理器软件接口;FWlib 用来存放 STM32 库里面的 inc 和 src 这两个文件,这两个文件包 含了芯片上的所有驱动。Listing 用来存 放一些编译过程中产生的文件。Output 用来保存软件编译后输出的文件。USER 用来存放工程文件和用户代码,包括主函数main.c。另外,再把文件名为keilkilll的文件放到STM32-Template 文件夹用来清除不必要的文件。新建文件夹如下图所示:

图1 新建文件夹

5.1.2 添加文件

在3.5.0目录下
3.5.03.5.0STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver 的 inc 跟 src 这两个文件夹拷贝到 STM32-TemplateDIFFWlib 文件夹 中。

图2 FWlib 文件夹目录

3.5.03.5.0STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm 的全部文件拷贝到 STM32-TemplateCMSISstartup(需先在 CMSIS 新建好 startup 文件夹)文件夹下。 这些是用汇编写的启动文件。野火 M3 开发板用的 CPU 是 STM32F103VE,V表示100脚,E = 512K字节的闪存存储器;其中 512KFlash,属于大容量的,所以等下我们把startup_stm32f10x_hd.s添加到我们的工程中。根据 ST 的官方资料:Flash 在 16 ~32 Kbytes 为小容量,64 ~128 Kbytes为 中容量,256 ~512 Kbytes为大容量,不同大小的 Flash 对应的启动文件不一 样,这点要注意。

图3 CL-VL-XL-LD-MD-HD含义

3.5.03.5.0STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport 的 core_cm3.c 和 core_cm3.h 也拷贝到 STM32-TemplateCMSIS 文件夹 下。

3.5.03.5.0STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x 的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷贝到STM32-TemplateCMSIS 文件夹下。

图4 CMSIS文件夹

3.5.03.5.0STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的 main.c、stm32f10x_conf.h、 stm32f10x_it.h、 stm32f10x_it.c 、system_stm32f10x.c 拷贝到 STM32-TemplateUSER 目录下,再在STM32-TemplateUSER目录下新建Libraries和Project ,其中Libraries用来存放库函数,Project用来存放工程文件。

图5 User文件夹

5.2新建的MDK 工程

5.2.1新建工程

1、点击桌面 UVision4图标,启动软件,在工具栏 Project->New μVision Project…新建我们的工程文件,我们将新建的工程文件保存在STM32-TemplateUSERProjectRVMDK(uv4)文件夹下(先在Project文件夹下建立RVMDK(uv4)文件),文件名取为STM32-MINI(这款32是MINI板,所以取名STM32-MINI),名字可以随便取,点击保存。

图6 新建工程

2、窗口是让我们选择公司跟芯片的型号,我们用的芯片是 ST 公司的STM32F103VE,有64K SRAM,512K Flash,属于高集成度的芯片。按如下选择即可。

图7 选择处理器

3、窗口问我们是否需要拷贝 STM32 的启动代码到工程文件中,这份启 动代码在 M3 系列中都是适用的,一般情况下我们都点击是,但我们这里用 的是 ST 的库,库文件里面也自带了这一份启动代码,所以为了保持库的完 整性,我们就不需要开发环境为我们自带的启动代码了,稍后我们自己手动添加,这里我们点击否。

图8 启动代码选择

4、将 Target 改为 STM32-MINI(不改也行)在 STM32-DEMO 上右键选中 Add Group…选项,新建四个组,分别命名为STARTUP、 FWlib、 CMSIS 、USER。STARTUP 从名字就可以看得出我们是用它来放我们的启动代码的,FWlib 用来 存放库文件, CMSIS 用来存放 M3 系列单片机通用的文件,USER 用来存放用户自定义的应用程序。然后添加相应文件,修改主函数main后如图所示:

图9 main函数

5.2.2配置 MDK 的配置选项

<1>点击工具栏中的魔术棒按钮

图10 配置

<2>在弹出来的窗口中选中Output点击 Select Folder for Objects... 设置编译后输出文件保存的位置(放在STM32-TemplateOutput文件夹下)。同时把 Create HEX File 和 Browse information 这两个选项框也选上。

图11 output文件路径

<3>同样在 Listing 这个选项卡中,我们也点击 Select Folder listings…定位到模板中 的 Listing 文件夹。

<4> 在C/C++选项卡,在 Define 里面输入添加 USE_STDPERIPH_DRIVER,STM32F10X_HD。添加 USE_STDPERIPH_DRIVER 是为了屏蔽编译器的默认搜索路径,转而使用我们添加到工程中的 ST 的库,添加 STM32F10X_HD 是因为我们用的芯片是大容量的,添加了STM32F10X_HD 这个宏之后,库文件里面为大容量定义的寄存器我们就可以用了。芯片是小或中容量的时候宏要换成STM32F10X_LD 或者 STM32F10X_MD。其实不管是什么容量的,我们只要添加上 STM32F10X_HD 这个宏即可,当你用小或者中容量的芯片时,那些为大容量定义的寄存器我不去访问就是了,反正也访问不了,关于这两个宏的详细解释参看后文的小贴士。在 Include Paths 栏点击,在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路径。

图12 添加宏定义

图13 添加开头文件路径

5.2.3硬件调试配置

接着以上操作,这个工程默认的是软件仿真,如果开发板要用 J-LINK (ST-LINK同理)调试的话,还需要在 开发环境中做如下修改。实际上,我们开发程序的时候 80%都是在硬件上调试的。在 Debug 选项里

图14 Debug设置

图15 仿真工具选择

图16 添加硬件信息

图17 选择硬件

单击OK,大功告成!

小贴士:

关于STM32 MDK中USE_STDPERIPH_DRIVER, STM32F10X_HD问题的解释
初学STM32,在MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题。出现如下警告或错误提示:

warning: #223-D: function 'assert_param' declared implicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx));



这时候我们需要在“Target Options”中的“C/C++”选项卡中如图18所示红框中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。这样才能使编顺利通过。

图 18 添加宏

知其然了,我们还得知其所以然。下面就笔者给大家一一道来。我们知道,程序的执行是从“main.c”文件开始的,其中必须包含有头文件“stm32f10x.h”。我们打开“stm32f10x.h”,按下“Ctrl+F”键,查找USE_STDPERIPH_DRIVER,在“Find What”栏中输入“USE_STDPERIPH_DRIVER”。值得注意的是在查找之前工程必须是编译过了的。如图19所示。点击“Find Next”,出现“USE_STDPERIPH_DRIVER”对应的代码行,我们能在第8296-8298行找到如图20所示代码段。

图19

图20

这段代码的意思是,只有用预编译指令预定义了“USE_STDPERIPH_DRIVER”,才会将'stm32f10x_conf.h'包含进“stm32f10x.h”中,从而被'main.c'用到。这就解释了,为什么我们没有在“main.c”中包含'stm32f10x_conf.h',而在编译之后却被包含进了'main.c'中,出现如图-5所示的情况。'stm32f10x_conf.h'文件相当于一个开关文件,如果要用到STM32固件库驱动标准外设,则外设驱动头文件是必不可少的,如“stm32f10x_gpio.h”。在'stm32f10x_conf.h'中我们通过代码#include 'stm32f10x_gpio.h'来实现这个操作。

说到这儿估计大家已经对“USE_STDPERIPH_DRIVER”的来龙去脉有个清晰的认识了吧?其实单从字面意思理解就是“使用标准外设驱动”,在C/C++预定义中加“USE_STDPERIPH_DRIVER”就是允许“使用标准外设驱动”了。至于加入的“STM32F10X_HD“同样能在文件”stm32f10x.h“通过如上所述的方法通过功能查找来进行解释,其实它也是对于对应硬件的某些定义起开关作用罢了。其实写在这里,他的名字叫define。 也就跟你在工程里面写define XXX是一样的。。只不过写在这里的话,是全局的而已。


关键字:嵌入式  STM32  新建工程  配置 引用地址:《嵌入式-STM32开发指南》第一部分 入门篇 - 第5章 STM32新建工程及配置

上一篇:《嵌入式-STM32开发指南》第一部分 入门篇 - 第7章 STM32固件库与STM32Cube产品介绍
下一篇:《嵌入式-STM32开发指南》第一部分 入门篇 -第6章 STM32下载程序及调试

推荐阅读最新更新时间:2026-03-25 12:08

STM32CubeMX新建工程+基本IO配置过程
Ⅰ、写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍、下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeMX新建工程的过程。最终通过STM32CubeMX工具配置完成一个驱动IO(点亮LED)的软件工程,也就是通过STM32CubeMX配置完成之后,打开工程直接下载就能点亮LED的工程。 本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装最新版本的软件,具体过程可以参考我的一篇文章: MDK-ARM下载与安装 关于本文的更多详情请往下看。 Ⅱ、STM32CubeMX新建工程
[单片机]
STM32CubeMX<font color='red'>新建</font><font color='red'>工程</font>+基本IO<font color='red'>配置</font>过程
STM32新建汇编工程2
上一篇文章里写了新建工程的过程中,使用了keil提供的文件,也可以不使用,自己手动拷贝,这样工程会更简单一些,只需要拷贝启动文件一个即可,如下界面里不做选择 新建工程的时候不选软件部件 然后直接新建工程,新建完工程后,再去之前的工程中,只将startup_stm32f10x_hd.s文件拷贝过来,放置到新建的工程目录下,然后在界面中加入已经存在的文件,然后新建一个main.s文件,将上篇文章中的代码拷贝过来,如下图 由于没有系统时钟配置部分的c代码,需要修改启动代码中调用了系统时钟初始化的部分,注释掉即可,如下图 注释掉启动文件中的调用系统时钟初始化的部分 然后编译,启动调试,可以看到依然会停到main.s中的B
[单片机]
stm32新建工程编译老出问题
Issue1:使用的正点原子的STM32例程,但是库文件使用 stm32官网或论坛的HALlib里的.c和.h 文件编译老出问题!!! 由于正点原子的库文件,sys.h等头文件是自己写的,并非官方自带的,所以如果使用的是正点原子论坛里的模板,则库文件和一些头文件需要从正点原子的源码例程里添加,而非添加官方的文件!!! 如: keil编译报错:#include file”..SYSTEMsyssys.h”includes itself Issue2: ..OBJTEMP01.axf: Error: L6200E: Symbol HAL_MspDeInit multiply defined (by stm32f1xx_
[单片机]
STM32新建工程步骤
1、 新建工程,然后选择芯片型号。 选定芯片后添加启动文件.s文件。 2、 将文件添加组进行分类: 其中包含ASM组、USR组、FWlib组合CMSYS组。 l ASM组为.s启动文件; l USR组为用户程序文件组,一般至少需要有main.c,如需要使用中断,将stm32fxxx_it.c也放在该组中; l FWlib组为ST公司提供的官方库文件,如下图所示, 将SRC中的.c文件进行有选择的选入,只选择需要的,免得编译过程太费时,inc文件夹中文.h头文件,可在Target Options中设置包含头文件的路径,将在Target Options设置中具体说明。SRC资源如下所示。 CMSYS组由系统内核文件以及芯片
[单片机]
基于keil5新建STM32F10x寄存器版本工程
一、前言 前面文章分享了很多关于STM32F103系列知识点、物联网相关的小项目,工程都采用的是寄存器方式编写;很多小伙伴接触STM32开始都采用库函数编程,不清楚如何使用寄存器方式开发STM32;这篇文章就讲一下如何新建寄存器风格的STM32工程,并介绍需要用到哪些官方系统文件等。 比较具有代表性的几篇物联网教程: 1. 智慧农业项目(基于腾讯物联网服务器) 2. 遥控小车项目 3. 智能门锁项目(基于腾讯物联网服务器) 4. 物联网项目(基于阿里云物联网服务器) 5. 智能家居项目(基于中国移动OneNet物联网服务器) 二、环境介绍 开发环境: keil5.25 编程语言: C语言 操作系
[单片机]
基于keil5<font color='red'>新建</font>STM32F10x寄存器版本<font color='red'>工程</font>
msp432快速入门第四节之新建工程(从keil新建工程)
(一)相对路径和绝对路径的区别 之前写的程序都是绝对路径,因为TI用的是绝对路径,需要修改的文件比较多,所以没改,但是后来发现点击鼠标实在令人厌烦,遂决定修改为相对路径,这篇推文记录了这个过程! 相对路径和绝对路径的主要区别就是能否自由移动工程,keil的路径一般都是基于工程存在,那个特别长的路径正是因为TI的某些文件中的相对路径过长导致的,如下: 这个路径够长了吧! 而且多个文件中都有这种路径,过于烦人,所以最好还是直接从keil建立新的工程比较好,下面会指出如何创建新的空工程。 (二)从Keil创建新工程 1. 建立空工程文件夹 首选建立新的工程文件夹 命名为: empty demo 然后在文件夹中建立四个文件夹
[单片机]
msp432快速入门第四节之<font color='red'>新建</font>空<font color='red'>工程</font>(从keil<font color='red'>新建</font><font color='red'>工程</font>)
IAR新建STM8工程
1、准备标准库函数文件,官方的标准库函数为stsw-stm8069,解压后如下图: 2、新建一个文件夹,本例子命名为stm8-project,新建四个子文件夹,分别命名为APP、Readme、USER、STM8S_StdPerph_Driver: 3、从库函数例程以下目录拷贝文件 inc和src两个文件夹以及内容至STM8S_StdPerph_Driver目录。 4、从库函数例程以下目录拷贝文件 main.c、stm8s_conf.h、stm8s_it.c 、stm8s_it.h到USER目录。 5、在Readme目录下新建一个文本文件,命名为readme.txt,这个主要用来记录开发进度: 6、打开IAR,新
[单片机]
IAR<font color='red'>新建</font>STM8<font color='red'>工程</font>
图文详解STM32F0xx基于标准库新建工程
之前从来没有接触过F0系列,更没有基于STM32F0标准库函数新建工程的经历,但是新建F1系列那还都是家常便饭,可是没有想到折腾了大半天才成功,最后记录一下吧。保证可以从无到有,详细记录每一个步骤。 一、环境 1.IDE开发环境::uVision V5.25.2.0 2.标准库:STM32F0xx_StdPeriph_Lib_V1.5.0 3.单片机:STM32F072RBT6 4.仿真器:JLINK_OB 二、图文详解新建工程步骤 1.新建工程文件夹并命名,例如test。 2.打开工程文件夹test,在里面新建五个文件夹。 INC: 用于存放 .h头文件 SRE: 用于存放 .c 源文件 MDK: 用于存放工程文件 OU
[单片机]
图文详解STM32F0xx基于标准库<font color='red'>新建</font><font color='red'>工程</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved