MDK Keil5 创建Stm32工程-理论篇(这里以Stm32F103Zet6为例)
一、文件夹创建与文件说明

整个工程可以粗略的划分为几个文件夹:
BSP | 底层驱动比如GPIO\Timer等驱动文件 |
CMSIS | 内核相关的文件 |
Firmware | 生成的固件下载文件 |
Mycode | 用户编写的相关文件,主要编写的文件都在这个文件夹里 |
Project | 工程文件 |
startup | 芯片启动文件 |
STM32F10x_FWLib | 标准库文件 |
USER | 主函数等文件 |
readme.md | 整个工程的版本说明、介绍、简介、更新记录等 |
1.1BSP文件夹
BSP文件夹:主要用来用放置底层接口驱动文件,比如GPIO初始化、定时器初始化、PWM、串口初始化等等配置

1.2CMSIS文件夹
CMSIS文件夹:CMSIS 标准英文全称是Cortex MicroControllerSoftware Interface Standard,翻译为中文意思就是ARM Cortex 微控制器软件接口标准。由于基于Cortex 核的芯片厂商很多,不只是ST 公司,为了解决不同厂家的Cortex 核芯片软件兼容的问题,ARM 和这些厂家就建立了这套CMSIS 标准,在这个文件夹下,一般是放置了如下一些文件:

文件名称 | 内容简述 |
stm32f10x.h | 很重要的文件,存放了f10x系列单片机寄存器定义、位定义和内存映射等 |
core_cm3.c /h | CMSIS Cortex-M3核心外设访问层源文件 |
system_stm32f10x.c /h | CMSIS Cortex-M3设备外围接入层系统源文件 |
stm32f10x_it.c /h | 提供了所有异常处理程序和的模板 |
stm32f0x_conf.h | 包含了库配置文件标准库的头文件 |
这些文件之间的相互调用将整个单片机的系统框架构建起来,使我们用户运用起来不必仔细探索底层文件,可以在用户层面上进行编写代码,实现功能。
1.3Firmware文件夹
Firmware文件夹:专门用来存放生产的Hex、bin等程序输出烧录文件
1.4Mycode文件夹
Mycode文件夹:用来存放自己添加的驱动子模块程序

1.5Project文件夹
Project文件夹:这里我主要放置的是通过keil5创建项目生成的文件像.uvprojx就是工程文件,以及一些输出文件,这些文件都是创建工程时keil自动生成的文件和文件夹,大家创建工程时可以观察观察每个文件夹的作用,像用的最多的就是Objects文件夹,要使用HEX烧录时编译器生成的.hex文件默认就在这个里面(也可以软件里设置存放自定义的文件夹)。找工程时就是通过看到这个Project文件夹我就知道了我的工程文件是在这里的。

1.6startup文件夹
startup文件夹:这个文件夹主要存放的是芯片的启动文件,我们用的是STM32F103VET6的芯片,每个不同的芯片都有自己的启动文件,启动文件不能选错,里面包含了中断向量表等信息不同的芯片略有差异,可以说启动文件是讲整个STM32运行起来的最重要的文件,起到将各个文件柔和在一起的作用,里面还有重要的SystemInit函数入口,可以看看下面的链接里面有详细的代码介绍链接: 启动文件详解
怎么选择我们对应芯片的启动文件呢,像我们F103系列的芯片对应的启动文件开头肯定是像startup_stm32f10x…,但是启动文件又在f10x后又分了很多,如下图:

具体怎么选择启动文件,需要看我们芯片对应的flash大小:

1.7STM32F10x_FWLib文件夹
STM32F10x_FWLib文件夹:FWLIB叫做STM32的固件库,也叫做标准库,里存放了很多的.C和.H文件,如图:

主要用于存放STM32的一些寄存器的定义及一些底层驱动函数。用户使用时可以直接调用固件库封装的函数实现需要的功能,比如操作GPIO端口置位的函数GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)就在stm32f10x_gpio.c文件中,固件库的安装下载下一节会讲。
1.8user文件夹
user文件夹:这个文件夹主要是用来存放自己编写的.C和.H文件,一般我会将main.c和main.h文件放在user根目录下,或者在添加操作系统等Task文件夹等其他文件夹

1.9Readme文件
Readme文件:这里主要是对整个工程的说明,对每个文件夹的说明,让看工程的人知道,我这一份代码是做什么用处的,对整个工程的解释说明。参考如下图是我之前写的一些简单的说明:

小结
至此我们将要建立工程的每个文件夹都进行了较详细的解读,为后续工程的创建打下基础,后续的工程模板创建就是基于上述的规范上来进行的,实现项目代码规范简洁明了。
二、标准库文件下载
第一步:打开ST官网:https://www.st.com/content/st_com/zh.html


这里网速会比较卡,等左边栏出现点击选择:选择STM32标准外设软件库:

点击好就会出现下图,让你选择那个系列:我们选择F1系列

选择F1系列后:我们在选择最新版本的库文件3.6,然后在点击Get latest

许可协议点接受后,之前在ST官网没下载过的用户,需要通过邮箱来获取下载的资格如图:

邮箱务必填写正确,之后会收到邮件:

最后点击下载就OK。
三、附录
STM32标准库文件V3.6最新版本百度云链接下载:
链接:https://pan.baidu.com/s/1RfEfVfK1_Pw5pFHWbgJ6qQ
提取码:kf3y
相关文章:

MDK Keil5 创建Stm32工程-理论篇(这里以Stm32F103Zet6为例)
一、文件夹创建与文件说明整个工程可以粗略的划分为几个文件夹:BSP底层驱动比如GPIO\Timer等驱动文件CMSIS内核相关的文件Firmware生成的固件下载文件Mycode用户编写的相关文件,主要编写的文件都在这个文件夹里Project工程文件startup芯片启动文件STM32F…...

应届大学生学什么技术好?哪些技术适合年轻人?
到了毕业季,应届大学生面临的就是就业问题,很多专业的大学生难以找到对口的工作,或是不得已随便就业,或者是学个技术高薪就业,那么,问题来了,应届大学生学什么技术好?哪些技术适合年…...

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编
日前,“数据安全推进计划”(DSI)正式发布《智能网联汽车数据分类分级实践指南》(下文简称“指南”),旨在以合规为主要导向,明确智能网联汽车数据分类分级的方法论,为数据全生命周期的…...

Nginx学习 (2) —— 虚拟主机配置
文章目录虚拟主机原理域名解析与泛域名解析(实践)配置文件中ServerName的匹配规则技术架构多用户二级域名短网址虚拟主机原理 为什么需要虚拟主机: 当一台主机充当服务器给用户提供资源的时候,并不是一直都有很大的用户量&#…...

Java 动态代理简述和实例
Java动态代理是一种在运行时动态创建代理对象的技术。它可以让我们在不修改原始代码的情况下,对原始对象进行增强或者添加额外的行为。这种代理方式可以用于很多场景,例如AOP编程、RPC框架等。动态代理是基于Java反射机制实现的,它允许程序在…...

Unity编译器扩展(Advanced Editor Scripting)
Untiy编译器扩展允许我们对编译器的增加自己编写的的功能菜单栏MenuItemContextMenu和ContextMenuItemContextMenuContextMenuItemMenuItem 该属性允许您将菜单项添加到主菜单和检查器窗口上下文菜单。 该属性将任何静态函数转换为菜单命令。只有静态函数可以使用该属性。 Men…...
AFR机制及流程介绍
AFR(Auto Fast Return)不符合3GPP协议标准,因此终端默认是disable状态。如果运营商有要求可以配置开启。 AFR有两种场景 2G或者3G AFR到4G4G AFR到5G3G AFR TO 4G AFR到LTE功能的作用就是终端从LTE Handover或者重定向到3G进行业务,等业务做完后能够快速回到LTE网络。...

9.Hbase 部署
9.Hbase部署 注意事项: 1:必须事先安装 Hadoop分布式集群,zookeeper分布式集群 2:查看版本号: hbase version1、解压文件并改名 tar -zxvf /opt/software/hbase-2.2.3-bin.tar.gz -C /usr/app/ mv hbase-2.2.3/ hba…...

【maven 学习记录】
maven 学习记录一、maven基础1. maven是什么2. maven的作用3. maven的下载安装4. maven仓库5. maven坐标6. 第一个maven项目 手工实现7. maven插件8. 依赖管理9. 生命周期二、maven进阶一、maven基础 1. maven是什么 maven的本质是一个项目管理工具,将项目开发和管…...

NB-IOT宣传这么多年,这次总算用好了吧
一、方案概述随着实体经济快速发展,石化、港口、货场、工地等区域规模日益扩大,厂区面积广阔、环境复杂、作业人员和车辆众多,如无法实时掌握工作人员状态及外来人员位置、外来车辆情况等问题,将存在非常大的安全隐患。今天小编介…...

sort函数对结构体|pair对组|vector容器|map排序|二维数组的第x列 的排序
目录 sort对 vector容器 sort对 vector<pair<int,int>>对组 sort对 结构体 结构体外部规定排序 结构体内部运算符重载 map容器的排序 map的键排序 map的值排序 sort对二维数组的排序 sort对 vector容器 sort()函数可以用于对vector容器进行排序。具体来…...

Java定时器Timer的使用
一、Timer常用方法 Timer应用场景: 1、每隔一段时间执行指定的代码逻辑(即按周期执行任务) 2、指定时间执行指定的代码逻辑 为方便测试并查看运行效果,首先先建一个类并继承TimerTask,代码如下: package timerTest…...

MySQL安装和配置
下载官网下载mysql解压版本:配置环境变量下载完成后直接解压到需要放的文件夹,根据文件夹来配置环境变量;新建系统变量,变量名自取,值是MySQL的目录编辑path环境变量,加上MySQL的bin目录 %MYSQL_HOME%\bin配…...

openpnnp - 载入板子后,要确定板子的放置角度
文章目录openpnnp - 载入板子后,要确定板子的放置角度概述用openpnp提供的功能来确定被夹住的板子的左下角原点位置和板子的角度备注ENDopenpnnp - 载入板子后,要确定板子的放置角度 概述 设备是有夹具的, 用百分表打过, 夹具本身在Z方向的平行度是没问题的. 但是, PCB板子的…...

HCIP知识点(前三天)
复习HCIA: 一、TCP/IP模型,OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址(无标准格式) 传输层 TCP/UDP – 分段(受MTU限制)、端…...

模板学堂丨妙用Tab组件制作多屏仪表板并实现自动轮播
DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…...

C++:初识函数模板和类模板
目录 一. 泛型编程 二. 函数模板 2.1 什么是函数模板 2.2 函数模板的实例化 2.2.1 函数模板的隐式实例化 2.2.1 函数模板的显示实例化 2.3 函数模板实例化的原理 2.4 模板函数调用实例化原则 三. 类模板 3.1 什么是类模板 3.2 类模板的实例化 一. 泛型编程 泛型编程…...
3.8妇女节如何做好TikTok网红营销?
3月8日是国际妇女节,这一节日已经成为全球关注女性权益和平等的标志性日子,TikTok上话题#internationalwomensday累计播放超10亿次,话题#WomensDay2023累计播放量也将近300万次。 这个特别的日子为品牌提供了一个很好的营销机会。据Nox聚星了…...

使用Advanced Installer打包程序及运行环境
Advanced Installer 工具版本:20.1.1 设置产品信息 选中右侧【Product Details】输入产品信息 设置文件和文件夹 添加使用VS发布之后的程序文件夹 设置文件夹刷新 选中文件夹,右键选择属性,选中Synchronize标签。启用“Synchronize conten…...
华为OD机试真题Python实现【计算堆栈中的剩余数字】真题+解题思路+代码(20222023)
计算堆栈中的剩余数字 题目 向一个空栈中依次存入正整数 假设入栈元素N(1<=N<=2^31-1) 按顺序依次为Nx … N4、N3、N2、N1, 当元素入栈时,如果N1=N2+...Ny(y的范围[2,x],1 <= x <= 1000) 则 N1 到 Ny 全部元素出栈,重新入栈新元素M(M=2*N1) 如依次向栈存储6、1、…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...