文章目录[隐藏]
一、文件与文件夹创建
准备工作(参考上一篇博文):
1、ST标准库的下载如图:
2、创建好如下文件夹:
1.1 CMSIS文件夹创建
在CMSIS文件夹中存放的是我们内核控制相关的文件,可以在之前我们下载好的ST标准库找到,如下图所示将文件复制粘贴进文件夹中:
名称 | 文件所在标准库中的位置 |
---|---|
core_cm3.c\h | en.stsw-stm32054_v3-6-0_v3.6.0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport |
stm32f10x.h、system_stm32f10x.c\h | en.stsw-stm32054_v3-6-0_v3.6.0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x |
stm32f10x_conf.h 、stm32f10_it.c\h | en.stsw-stm32054_v3-6-0_v3.6.0\STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA |
由于stm32f10x_conf.h 、stm32f10_it.c\h是异常处理程序和的模板和包含了库配置文件标准库的头文件,直接从ST下载的标准库中的提供的Project里找到,如上述表格路径。
1.2 FWLIB文件夹创建
FWLIB文件夹是存放ST标准库文件的地方,里面有ST编写的提供给用户调用的规范化代码,例如对引脚口、系统时钟、DMA等等的操作,如下所示:
inc存放头文件,src存放的是源文件,可以直接从ST标准库里面复制粘贴
名称 | 文件所在标准库中的位置 |
---|---|
inc、src | en.stsw-stm32054_v3-6-0_v3.6.0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver |
1.3 Project文件夹创建
Project文件夹和上一篇说的一样这里主要放置的是通过keil5创建项目生成的文件像.uvprojx就是工程文件,以及一些输出文件,这些文件都是创建工程时keil自动生成的文件和文件夹,我们只需要建立一个文件夹存放keil编译时的输出文件即可。
1.4 startup文件夹创建
startup文件夹存放芯片的启动文件,怎么选择对应的芯片的启动文件请参考上一篇理论篇,如图所示:
名称 | 文件所在标准库中的位置 |
---|---|
startup_stm32f10x_hd.s | en.stsw-stm32054_v3-6-0_v3.6.0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm |
1.5 user文件夹创建
user文件夹存放用户代码,我们这里先在里面新建main.c和main.h文件供后续keli工程建立时使用,如图所示:
1.6 readme文件创建
readme文件用来指示和注明本工程建立的目的,可以根据后续代码拓展新增加功能,如图是为了本次新建工程所用的工程文件的说明:
至此工程创建前的理论基础和实物基础都已经有了,接下来就是keil5软件里对工程的配置了~
二、keil5工程创建
第一步:打开keil5软件,依次点击Project—New uVision Project,如图所示:
第二步:继第一步后会弹出界面选择保存位置,这里我们将整个工程存放在Project文件夹中工程取名为template,注意工程的后缀名,点击保存,如图所示:
第三步:继第二步后会弹出如下框,是让我们选择芯片,我们用的是STM32F103VE,故依次选择STMicroelectronics—STM32F103—STM32F103VE—OK,这是芯片支持包提供的芯片种类,让编译器知道你用的是什么芯片,如果没有安装STM32F1的芯片支持包是没有芯片可以选择的。芯片支持包的获取见下一章。
第四步:继第三步后会弹出如下界面框Manage Run-Time Environment,可以用来配置 MDK 驱动和ST外设文件等,具体的作用我们后续博文再讲,大家也可以先搜一下他的功能,这里我们先点击Cancel,如下图所示:
完成后,可以在我们的Project文件夹看到keil创建的文件,以后我们就从Project—template进入我们的工程文件。
第五步:第四步后我们的工程就初步建立起来了,可以看到左侧的project项目区没有内容只有默认的文件(Target),接着点击如下按钮,开始在工程里面新建目录,将各个代码分类存放,如图所示:
点击左边区域的Target可以修改名称,这里我们修改为template,同理接着点击中间区域的Source Group1修改名称,点击第三个箭头处的新建按钮可以新建文件,依次建立如下文件,如下图所示:
序号①处是新建文件、②处是删除文件、③是上移选中的文件、④是下移选中的文件,创建完如下图所示的文件后点击OK完成创建,可以在左侧项目目录框看到我们新建好的目录结构,如下图所示:
第六步:接下来就要将我们上一章复制粘贴的文件与工程关联起来放入工程中,首先是把源文件(.c文件)引入工程,还是点击第五步的小按钮,如下图所示:
①先选中CMSIS,然后在②点击,添加文件,弹出界面,我们需要选中CMSIS中的源文件把他们添加进来,同理选中FWLB,点击Add Files…将FWLIB-src下的文件添加进来,添加startup文件时请注意,需要将寻找的类型换成所有文件,因为启动文件是.S结尾的,最后将新建的main.c也添加进user中,如下图所示:
将CMSIS文件夹中的源文件添加进来后,可以看到文件已经在右侧已经放进来了,同理完成后续的添加,如图所示:
FWLIB:
startup:
user:
最后点击下方的OK按钮,完成添加,完成后可以在左侧的项目框中看到我们添加的文件(FWLIB没展开,有点多),如图所示:
第七步:完成了源文件的添加,接着就是头文件的添加,点击魔术棒按钮,如下图所示:
点击后选中C/C++选项卡,在点击Include Paths后面的…按钮打开,如图所示:
点击①处新建后会出来②处空白的框在点击②处的…按钮添加路径,注意头文件的路径需要选择到头文件的根目录,我们把CMSIS、FWLIB-INC、main.h这些文件的路径包含进来。如下图所示:
如添加CMSIS文件夹中的头文件:
最后我们完成添加所有的头文件,点击确定如下图所示:
可以看到红框处已经完成了添加,最后点击OK完成头文件的引入:
第八步:添加完头文件和源文件后,基本完成的差不多了,只是现在还不能进行编译,我们还没有编写程序主函数main()函数,在左侧的Project项目框中,找到user,单击点开,双击打开我们新建并添加的main.c文件,编写main函数,如图所示:
main.c文件:
/*
STM32F103VET6
SYSCLK = 72M
HCLK = 72M
APB1 = 36M
APB2 = 72M
*/
#include "main.h"
int main(void)
{
while(1)
{
;
}
}
main.h文件:
#ifndef __MAIN_H
#define __MAIN_H
#include "stm32f10x.h"
#endif
第九步:编写好这两个文件后,这个时候去点编译的按钮,可以看到,如图所示:
序号①是编译当前文件,就是我们的main.c、序号②是快速编译、序号③是全编译,第一次打开工程时我们需要点击③全编译,后续修改工程我们可以按序号②缩短编译时间
当我们创建好文件点击序号③时,可能会出现如下提示:
一大堆问题,先别急,在按下序号②我们先看看现象,如下:
当我们只编译main.c就可以发现不会有错误,这是正确的,因为main.c没啥内容怎么会报错,如下:
当我们全局编译的时候会发送那么多错误和警告,这是为啥呢?原因是我们没有将必须要包含的预编译字让编译器包含。
第十步:点击魔术棒按钮,选择“C/C++”选项卡中所示红框中添加STM32F10X_HD,USE_STDPERIPH_DRIVER(中间用英文的“,”隔开)这样才能使编顺利通过,如图所示:
define这两个字有什么用呢,我们一个一个看,首先是USE_STDPERIPH_DRIVER,字面理解使用标准外设驱动,我们在使用STM32时不可避免的会用到外设,像最常用的是引脚,我们需要把头文件包含进来(#include “stm32f10x_gpio.h”),但是在写代码的时候我们往往不会这么操作,我们只会#include “stm32f10x.h”,就可以使用引脚的一些操作,这是为啥呢?原因很简单,我们在stm32f10x.h文件中查找USE_STDPERIPH_DRIVER,可以发现下面的代码:
如果我们定义了USE_STDPERIPH_DRIVER,就会把stm32f10x_conf.h文件包含进来,我们再看看stm32f10x_conf.h文件里面是什么,上一篇博客也提到过这份文件的作用,如图所示stm32f10x_conf.h文件把我们用的所有的标准外设头文件都包含进来了,所以我们只需要调用#include "stm32f10x.h"文件就能实现操作外设的作用,同时需要在C/C++选项卡定义USE_STDPERIPH_DRIVER:
再来看一下STM32F10X_HD,这像不像我们启动文件的命名,我们打开另一份文件systeam_stm32f10x.c和stm32f10x.h,查找STM32F10X_HD,会找到一些与芯片时钟频率有关的定义,以及一些中断号的定义与中断服务函数有关,如下两图所示:
所以综上这两个参数的定义是必须要设置的。
第十一步:最后我们再次全编译会发现没有错误没有警告,我们的工程模板顺利的创建完成了,如图所示:
三、芯片支持包下载
第一步:当然是先百度搜索我们的keil官网(网址):
第二步:点击首页的Project,会跳转如界面,再次点击Arm Cortex-M,如图所示:
第三步:点击后会再次跳转,这时候我们再次点击Public Software Packs,如图所示:
第四步:点击后会再次跳转,到我们最终寻找芯片包的网页( 懒人链接)我们只要仔细寻找就可以找到STM32F1,点击下载,下载起来有点点慢,如下图所示:
第五步:下载完成后双击打开会自动检索到安装的keil的芯片包文件夹,点击Next,开始安装,如图所示:
第六步:安装完成后可以在新建工程的时候看到如下芯片,由于我还安装了其他芯片支持包所以会多一些其他的东西,正常来说会有红框处的文件,安装成功:
四、小结
经过本章的内容学习,我们成功的创建了新的STM32F103的工程文件,也对里面的文件内容有了进一步的了解,后续的文章会开始对STM32的外设进行学习,下一章会讲令人头疼的时钟系统,欢迎讨论交流,一键三连哦~
版权声明:本文为CSDN博主「水水爱污污」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45857160/article/details/121062231
暂无评论