keil5新建STM32工程文件--实践篇手把手教学(以STM32F103为例)_keil新建芯片包例程-程序员宅基地

技术标签: stm32  STM32学习  嵌入式硬件  单片机  

一、文件与文件夹创建

准备工作(参考上一篇博文):
  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.cmain.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的外设进行学习,下一章会讲令人头疼的时钟系统,欢迎讨论交流,一键三连哦~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45857160/article/details/121062231

智能推荐

浅谈计算机辅助数学教学论文,论文浅谈对计算机辅助数学教学的认识.doc-程序员宅基地

文章浏览阅读201次。论文浅谈对计算机辅助数学教学的认识.docXx师范学院本科生毕业论文(设计)题 目专 业院 部学 号姓 名指 导 教 师答 辩 时 间论文工作时间: 年 月 至 年 月摘 要:计算机辅助教学(CAI)在小学数学教学中,有着广泛的应用,它可以解决很多教学问题,所以在教学中的优越性不可忽视。但是在实际运..._浅谈计算机辅助数学教学

windows xshell6启动时msvcp110.dll、msvcr110.dll、mfc110u.dll丢失解决_xshell6运行报错:由于找不到mfc110u.dll、msvcr110.dll无-程序员宅基地

文章浏览阅读7.3k次,点赞6次,收藏13次。经过重重的磨难,终于解决了,真是踩了好多坑。启动xshell时程序报错如下: 无法启动此程序,因为计算机中丢失MSVCR110.dll。尝试重新安装该程序以解决此问题。尝试了好多种办法:1、百度下载修复工具失败。2、下载360安全卫士进行dll修复,解决了一个。3、又出现了找不到的dll安装Visual C++ Redistributable for Visual Studio 2..._xshell6运行报错:由于找不到mfc110u.dll、msvcr110.dll无

机器学习找工作,学历到底多重要?业内顶尖开发者持这个态度!-程序员宅基地

文章浏览阅读403次。 半路出家的机器学习求职者,有出路么?了解一点机器学习的同学都知道,人工智能领域是非常开放的,国内外很多的资源、教程、数据集等等都可以免费获取到。在这里给大家推荐一个python系统学习q群:250933691有免费开发工具以及初学资料,(数据分析,爬虫,机器学习,神经网络)每天有老师给大家免费授课,欢迎一起交流学习这种优势不仅促进了该领域的极速发展,也使得越来越多的人能够通过...

HTML中的背景设置(上)_html background-color-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏12次。HTML中的背景设置(上)_html background-color

36.(leaflet之家)leaflet+turf截取线上线段_leaflet加turf生成等值线图-程序员宅基地

文章浏览阅读173次。听老人家说:多看美女会长寿 leaflet之家总目录(订阅之前建议先查看该博客)文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。效果如下所示:下面献上完整代码,代码重要位置会做相应解释<!DOCTYPE html><html><head> <meta charset=utf-8 /> <title>Historic Topographic Maps</title> <meta nam_leaflet加turf生成等值线图

java 怎么保证余额_高并发下怎么做余额扣减?-程序员宅基地

文章浏览阅读2.8k次。余额操作在大多数系统都是不可缺少和不允许出现问题的 如何修改余额 , 这个问题可能在实际项目中 没那么简单;如何修改余额假设一个用户数据 :id⇒12 | user_name⇒放放 | fee⇒ 30 | updated_at ⇒ 2019-09-06 15:51:33修改余额//消费金额$spend = 10;//查询用户余额$user = select id,fee from `..._java下单检查余额事务

随便推点

STM32入门(十五)----SysTick系统定时器_实验十五 systick-系统定时器-程序员宅基地

文章浏览阅读497次。SysTick系统定时器SysTick简介SysTick框图SysTick定时实验程序SysTick简介SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。《STM32参考手册》里的一句话:关于Cortex-M3核心、 SysTick定时器和NVIC的详细说明,请参考另一篇ST的文档和一篇ARM的文档:《STM32F10xxx Cortex-M3编程手册》和《Cortex-M3技术参考手册》。SysTick框图co_实验十五 systick-系统定时器

秦俊东北计算机博士,秦 俊 教授-云南大学省部共建教育部自然资源药物化学重点实验室...-程序员宅基地

文章浏览阅读434次。秦俊,博士研究方向:药物化学和有机化学学位:博士毕业学校:The University of Vermont, USA(美国佛蒙特大学化学系)职称:教授/博导电子邮件:[email protected]职业经历2013/07-现在:教授—云南大学化学科学与工程学院,昆明。2009/11-2013/06:副主任科学家—Merck Research Laboratories, New Jersey20..._云南大学秦俊

福建建材学校计算机专业学费,福建省民办学校的收费标准 2017年中小学收费标准一览...-程序员宅基地

文章浏览阅读547次。原标题:福建省民办学校的收费标准 2017年中小学收费标准一览福建省民办学校的收费标准,2017年中小学收费标准一览,今秋泉州公办中小学收费标准确定,公办学校免学费,具体内容详解请看下文。三所市直民办校收费标准出炉根据日前市物价局印发的有关文件,今年秋季泉州实验中学、泉州外国语中学、泉州市第三实验小学这三所市直民办校的收费标准已经确定。根据文件规定,今年秋季泉州实验中学、泉州外国语中学两所学校的学..._福州建材中专学费

Pygame基础知识(5)-颜色_pygame颜色数值-程序员宅基地

文章浏览阅读2.5k次,点赞8次,收藏7次。欢迎来到pygame大讲堂,这次我们将给大家介绍颜色。光线有三种主要颜色,分别是红色,绿色和蓝色,不同于美术中的三原色,所以不要搞混了。你可以将这些颜色按不同比例结合起来,组合出不同的颜色。在pygame中,每一种颜色的范围在0-255之间,我们可以使用一个包括三个整数的元组来表示一种颜色,第一个整数表示红色,第二个整数表示绿色,第三个整数表示蓝色,这就称为RGB值。如果你想表示颜色,你可以..._pygame颜色数值

《scikit-learn机器学习》 Python代码的埃拉托斯特尼筛法:找出一定范围内所有的素数_埃筛法求区间素数python-程序员宅基地

文章浏览阅读770次。埃拉托斯特尼筛法先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个素数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个素数5筛,把5留下,把5的倍数剔除掉;不断重复下去…import numpy as np a= np.arange(1, 101) n_max = int(np.sqrt(len(a))) is_prime = np.ones(len(a),dtype=bool) #创建 100 个元素的数组,用来 示记是否为质数is_prime[0] = False for i i_埃筛法求区间素数python

怎么拿到BERT任意层的embedding结果_transformers框架如何提取bert模型的embedding-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏15次。本方法基于hugginface的transformers项目改造过程其实很简单,基于TFBertMainLayer下的call函数做了改造,如果直接用self.bert的输出其实就是CLS token 的结果。使用时同样可以使用from_pretrained来加载下载好的BERT模型参数,然后把输入的数据整理为input_ids, attention_mask,token_type_ids格式即可。使用tf.datasets也可。from transformers.modeling_t_transformers框架如何提取bert模型的embedding