三、Keil安装芯片包、下载固件库、建立STM32工程模板

news2024/11/17 5:30:44

目录

一、首先在Keil软件上安装好芯片包

二、下载官方固件库

三、建立基于固件库的Keil5工程模板


一、首先在Keil软件上安装好芯片包

        STM32有很多系列的芯片,我们平常用的最多的是STM32F1系列的,因此安装F1系列的芯片包在我们初学时,只按照人家下载好的来进行安装,现我们可以自行安装想要的系列的芯片包。以下就是关键步骤:

①打开Keil软件,点击红框中的魔术棒

②点击红框中的Device,可以看到我之前安装好的F1系列的芯片包,现我们手里的芯片不再是F1系列的芯片,想要开发F0系列的芯片,就需要安装F0系列的芯片包

③若想要安装F0或者F4系列的芯片包,点击红框中的地址链接,是keil的官网,去官网下载芯片包

④进入该界面

该界面不是下载芯片包的界面,需要点击右上角的 CMSIS Packs 进入以下界面:

 ⑤下载方式有两种:

(1)直接搜索你要的安装包,比如,在所搜框输入 STM32F0 点击搜索:

(2)点击Vendor下拉框,选中Keil,右边的下拉框选择Devices,翻页就可以找到你想要下载的芯片包

⑥下载F0系列芯片包,点击下载,随便选择一个文件夹

⑦安装芯片包 ,找到下载好的芯片包,双击

它会自动找到你的Keil所安装的目录底下,所以只需要点击next,就完成了芯片包的下载

若此时你已经有一个打开的keil工程,点击关闭时,弹出是否要重新加载芯片包,点击确定

若此时你已经把Keil工程关闭了,只需要重新打开keil就可以看到,已经安装好你想要的芯片包了

二、下载官方固件库

还是以上为例,想要STM32F0系列的固件库

(1)登陆 ST 的官网:点击ST官网

(2)点击红框,需要登陆该网站,若没有账号,可以自行注册,若看不懂英文,右上角可以切换为中文

(3)登陆成功后,按照红框中依次点击 Products —> Microcontrollers&Microprocessors –> STM32 Mainstream MCUs

(4)页面跳转后,看左侧,找打你要下载的固件库,例如,点击STM32F0x1

(5)页面跳转后,点击 Tools & Software --> MCU & MPU Embedded Software

(6)找到要下载的固件库,点击Open software page

 (7)页面跳转后,下滑,找到这里,点击 Get lastest

(8)点击ACCEPT 就可以下载标准库

三、建立基于固件库的Keil5工程模板

(1)在建立工程之前,建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工
程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。

(2)打开 keil5 ,点击菜单:Project –>New Uvision Project 

然后将目录定位到刚才建立的文件夹 Template 之下

在这个目录下面建立子文件夹 USER(我们的代码工程文件都是放在 USER目录)

然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为
Template,点击保存

接下来会出现一个选择 CPU 的界面,就是选择我们的芯片型号。如图下图所示,根据我们自己的开发板型号,选择对应的芯片,以 STM32F103ZET6 为例,所以在这里我们选择
STMicroelectronics → STM32F1 Series→ STM32F103 →STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件芯片包 pack 才会显示这些内容,如果没得选择,请参考上边的内容安装芯片包。

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

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

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

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

这里我们说明一下:

Template.uvprojx 是工程文件,非常关键,不能轻易删除;

Listings 和 Objects文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。这里,我们把两个文件夹删除,我们会在下一步骤中新建一个 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 文件夹 copy 到我们刚才建立的 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 (若你的开发板是 C8T6这里选择startup_stm32f10x_md.s,若你的开发板是 RCT6这里选择startup_stm32f10x_hd.s)文件复制到 CORE 下面。这里我们我之前已经解释了不同容量的芯片使用不同的启动文件,我们的芯片 STM32F103ZET6 是大容量芯片,所以选择这个启动文件。

FLASH容量:
STM32F103ZET6  512K     STM32F10X_HD
STM32F103RCT6  256K    STM32F10X_HD
STM32F103C8T6  64K       STM32F10X_MD

小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

现在看看我们的 CORE 文件夹下面的文件: 

(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 情况。

(11)下面我们往 Group 里面添加我们需要的文件。我们按照步骤 10 的方法, 右键点击点击
Tempate,选择选择 Manage Components。然后选择需要添加文件的 Group,这里第一步我们
选 择 FWLIB , 然 后 点 击 右 边 的 Add Files,定 位 到 我 们 刚 才 建 立 的 目 录
STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close。
可以看到 Files 列表下面包含我们添加的文件。
这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不
用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而
其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样
的坏处是工程太大,编译起来速度慢,用户可以自行选择。

找到刚 才 建 立 的 目 录 STM32F10x_FWLib/src 下面

(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)接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
方法是点击魔术棒,然后选择 “Output” 选项下面的 “Select folder for objects…”,然后选
择目录为我们上面新建的 OBJ 目录。这里大家注意,如果我们不设置 Output 路径,那么
默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。

双击OBJ

点击 OK

(14)下面我们点击 编译 按钮 编译工程,可以看到很多报错,因为找不到头文件。

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

需要往下点击出现蓝色条框,再点击右侧的虚线框,再次添加

(16)接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢?这是因为 3.5 版
本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的
宏定义变量。按照步骤 16,定位到 c/c++界面,然后填写
“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。
这里解释一下,如果你用的是中容量那么 STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。

STM32F103ZET6 选择 STM32F10X_HD

STM32F103C8T6 选择 STM32F10X_MD

(17)这次在编译之前,我们记得打开工程 USER 下面的 main.c,删除main.c底下的所有代码,复制下面代码到 main.c 中,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告),可以看到,这次编译已经成功了。

#include "stm32f10x.h"
void Delay(u32 count)
{
	u32 i=0;
	for(;i<count;i++);
}

int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);  //使能 PB,PE 端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 									//LED0-->PB.5 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 							//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;							//IO 口速度为 50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure); 										//初始化 GPIOB.5
	GPIO_SetBits(GPIOB,GPIO_Pin_5); 											//PB.5 输出高
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;									//LED1-->PE.5 推挽输出
	GPIO_Init(GPIOE, &GPIO_InitStructure); 										//初始化 GPIO
	GPIO_SetBits(GPIOE,GPIO_Pin_5); 											//PE.5 输出高
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		GPIO_SetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
	}
}

(18) 这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击
魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编
译生成 hex 文件,Browser Information 是可以查看变量和函数定义。

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

(20)实际上经过前面 19 个步骤,我们的工程模板已经建立完成。但是正点原子提供的实验中,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,存放的是我们每个实验都要使用到的共用代码,该代码是由正点原子编写,我们这里只是引入到工程中,方便后面的实验建立工程。随便找一个正点原子的工程文件,把底下的 SYSTEM 文件夹拷贝到我们自己建的Template文件下。

打开 SYSTEM 文件夹可以看到三个文件里面有三个子文件夹分别为delay,sys,usart,每个子文件夹下面都有相应的.c 文件和.h 文件。我们接下来要将这三个目录下面的代码加入到我们工程中去。

用我们之前讲解步骤 13 的办法,在工程中新建一个组,命名为 SYSTEM,然后加入这三
个文件夹下面的.c 文件分别为 sys.c,delay.c,usart.c,如下图:

然后点击“OK”之后可以看到工程中多了一个 SYSTEM 组,下面有 3 个.c 文件。

接下来我们将对应的三个目录(sys,usart,delay)加入到 PATH 中去,因为每个目录下面都有相应的.h 头文件,这请参考步骤 15 即可,加入后的截图是:

最后点击 OK。这样我们的工程模板就彻底完成了,这样我们就可以调用正点原子提供的
SYSTEM 文件夹里面的函数。到这里,可以参考我根据以上步骤建立好的 STM32F103ZET6 工程模板:STM32F103ZET6 工程模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分页符 分页

【插入】---【分页符】 目录和一级标题得新起一页

java--static的注意事项

1.使用类方法、实例方法时的几点注意事项 ①类方法中可以直接访问类的成员&#xff0c;不可以直接访问实例成员。 ②实例方法中既可以直接访问类成员&#xff0c;也可以直接访问实例成员。 ③实例方法中可以出现this关键字&#xff0c;类方法中不可以出现this关键字的。

Hook技术(钩子技术)

HOOK&#xff08;钩子技术&#xff09; 这里的hook我理解的意思就是通过拦截指令&#xff0c;将指令换成自己想要的指令&#xff0c;从而做道绕过原本的程序指令&#xff0c;要修改这个指令&#xff0c;要用汇编技术&#xff0c;从二进制入手。 扩展&#xff1a; 木马病毒之…

基于单片机的光伏发电并网系统设计(论文+源码)

1.系统设计 片作为主控制器。由于太阳能板本身的能量输出受到负载影响&#xff0c;因此需要在太阳能板后面加入一级DC/DC电路&#xff0c;来实现最大功率跟踪&#xff0c;以提高整个系统的效率。接着&#xff0c;由于光伏逆变器需要产生220V的交流电给居民使用&#xff0c;因此…

生命周期评估(LCA)与SimaPro碳足迹分析

SimaPro提供最新的科学方法和数据库以及丰富的数据&#xff0c;使您可以收集和评估产品和流程的环境绩效。通过这种方式&#xff0c;您可以将改变公司产品生命周期的想法提交给您的同事&#xff0c;以便阐明您的业务未来。 SimaPro软件的特点和功能&#xff1a; 完全控制产品生…

SpringBoot——感谢尚硅谷官方文档

SpringBoot——感谢尚硅谷官方文档 1 Spring与SpringBoot1、Spring能做什么1.1、Spring的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2、为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3、时代背景3.1、微服务3.2、分布式分…

计算机网络——路由

文章目录 1. 前言&#xff1a;2. 路由基础2.1. 路由的相关概念2.2. 路由的特征2.3. 路由的过程 3 路由协议3.1. 静态路由&#xff1a;3.2. 动态路由&#xff1a;3.2.1. 距离矢量协议3.2.2. OSPF协议&#xff1a;3.2.2.1.OSPF概述OSPF的工作原理路由计算功能特性 3.2.2.2.OSPF报…

【EI会议投稿】第九届电子技术和信息科学国际学术会议(ICETIS 2024)

第九届电子技术和信息科学国际学术会议&#xff08;ICETIS 2024&#xff09; The 9th International Conference on Electronic Technology andInformation Science&#xff08;ICETIS 2024&#xff09; ICETIS会议始于2016年&#xff0c;先后吸引众多来自国内外高等院校、科…

HPV公共卫生风险评估|特邀劲松中西医医院HPV专家谭巍主讲

坐地铁是否会感染HPV&#xff0c;这个问题涉及到公共卫生和感染途径等多个方面因素。一般来说&#xff0c;HPV主要通过性接触传播&#xff0c;此外&#xff0c;还可以通过直接接触感染&#xff0c;例如皮肤接触感染者的病变部位或者接触感染者的衣物、生活用品等。但在地铁中&a…

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开&#xff1a;Bias and Debias in Recommender System: A Survey and Future Directions。 下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Posit…

亚马逊防关联要注意什么?看这一篇,防关联有技巧!

亚马逊账号关联的问题&#xff0c;对于跨境电商来说都不陌生&#xff0c;店铺的安全问题往往和账号关联有关&#xff0c;一旦亚马逊账号被关联就很可能导致我们的店铺被封&#xff0c;对于被亚马逊封店的卖家都会有申诉机会&#xff0c;如果无法成功申诉&#xff0c;那将永久被…

C/C++ 递归指数型枚举

个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;算法_仍有未知等待探索的博客-CSDN博客 目录 一、前言 二、递归指数型枚举 1、题目信息 题目描述 输入格式 输出格式 样例 提示 2、解析 3、代码 一、前言 之前进行枚举…

亚马逊智能机器人Astro新升级!可为中小企业提供巡逻服务

原创 | 文 BFT机器人 Astro是Amzon近年来推出的一种新型的家用机器人&#xff0c;由智能助手Alexa驱动&#xff0c;主要用于家庭监控&#xff0c;如检查炉子、水龙头是否开着&#xff0c;以及其他任务。它将人工智能、计算机视觉、传感器技术以及语音和边缘计算方面的新进展汇…

windows11下安装Tensor RT,并在conda虚拟环境下使用

建议仔细读一读NVIDIA官方出的安装教程&#xff0c;里面有windows、linux等安装教程&#xff0c;非常详细&#xff0c;这里再做一下简要总结。 TensorRT主要有三种安装模式、五种安装方式 毫无疑问&#xff0c;在windows系统中&#xff0c;我们只能选择zip安装。 安装tensorR…

深度解析 Docker Registry:构建安全高效的私有镜像仓库

文章目录 什么是Docker Registry&#xff1f;Docker Hub vs. 私有RegistryDocker Hub&#xff1a;私有Registry&#xff1a; 如何构建私有Docker Registry&#xff1f;步骤一&#xff1a;安装Docker Registry步骤二&#xff1a;配置TLS&#xff08;可选&#xff09;步骤三&…

SiP封装、合封芯片和芯片合封是一种技术吗?都是合封芯片技术?

合封芯片、芯片合封和SiP系统级封装经常被提及的概念。但它们是三种不同的技术&#xff0c;还是同一种技术的不同称呼&#xff1f;本文将帮助我们更好地理解它们的差异。 一、合封芯片与SiP系统级封装的定义 首先合封芯片和芯片合封都是一个意思 合封芯片是一种将多个芯片&a…

selenium 简单案例 <批量下载文件> <网页自动化点击上报>

一、批量下载文件 网页分析 点击跳转到下载页面 from selenium import webdriver import timedef get_link_list():# 创建浏览器对象driver webdriver.Chrome(executable_pathrC:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe)url https://www…

vscode提交代码到Gitee(保姆教程)

Visual Studio Code&#xff08;VSCode&#xff09; 提交代码到Gitee&#xff08;保姆教程&#xff09; 1 环境配置1.1 git本地安装1.2 Vscode安装1.3 配置注册gitee账号 2 Vscode代码提交到Gitee2.1 新建仓库2.2 Vscode提交代码 1 环境配置 电脑需要已经安装好的Vscode已经配…

交直流一体化电源系统测试步骤详解

交直流一体化电源拥有高度适应性&#xff0c;可以用于不同的电力需求领域。但是为了确保其质量和性能&#xff0c;需要对交直流一体化电源进行各项测试以保证正常工作。本文纳米软件将介绍交直流一体化电源的测试方法&#xff0c;以及如何用交直流一体化电源测试系统进行测试。…

Mapbox中点图层和面图层点击事件重叠,禁止点击穿透方案

使用mapbox的小伙伴们可能都遇到过这个问题,就是当地图上有两个图层,一个面图层一个点图层,二者相重合的时候。假设我们想点击点位弹窗展示一些内容,也想点击面图层的时候弹窗展示一些内容,这时候一个有意思的问题就产生了,就是点击点位弹窗的时候面图层对应的弹窗也会弹…