keil 5 STM32工程介绍

目录

一、工程文件介绍

1.自动生成的文件

2.自建文件

(1)USER 文件夹

(2)FWLIB 文件夹

(3)CMSIS 文件夹

二、工程创建教程

1.下载固件库

2.创建工程

(1)创建不完善的工程

(2)移植文件

(3)配置工程


一、工程文件介绍

        如下图所示是一个 STM32 的 keil 5 工程文件,其中包含了其他 keil 5 工程文件基本都包含的文件,其他工程可能还有其他文件,但并非基本文件。部分文件夹是用户自定义的,名称可能不完全一致,但内容文件应当是类似的。接下来将一一介绍其中的文件。

1.自动生成的文件

        如上图所示,除了文件夹 CMSISFWLIBUSER 外,其他文件均为创建工程和编译后产生的。

  1. 最下面绿色标的 .uvprojx 文件是工程的本体,双击该文件即可打开 keil 5 并进入工程。
  2. 倒数第二个.uvoptx文件是工程的选项配置文件,它存储了针对该工程的所有软件配置,包括编译器的优化等级和警告级别、汇编器和链接器的设置、头文件包含路径、预处理宏定义、Flash 下载算法的选择等,即Options for Target设置页面中的内容。若删除此文件,再次打开工程时,Keil 会重新生成一个使用所有默认设置的新的.uvoptx文件。
  3. 顺数第二个 DebugConfig 文件夹中有一个 DBGCONF 文件,它保存的是Options for Target设置页面的Debug调试设置,在较新版本的 Keil MDK 中会自动生成这个文件,其将调试相关的设置从传统的上面讲的 .uvoptx 文件中分离出来独立管理。若删除此文件,再次打开工程时,Keil会重新生成一个使用默认 Debug 设置的 DebugConfig 文件夹和DBGCONF 文件。
  4. 倒数第三个 .uvguix 文件是工程的用户界面配置文件,保存了用户的个性化 IDE 设置,如窗口的布局和位置、工具栏的显示和隐藏、代码编辑器的字体和颜色主题、项目浏览器等视图的状态以及其他所有个性化设置。若删除此文件,再次打开工程时,Keil 会重新生成一个使用默认界面配置的新文件,工程代码和编译设置完全不受影响,只是个人界面布局需要重新设置。
  5. 工程中自动生成的 Listings 文件夹和 Objects 文件夹分别和 Options for Target 设置页面中的 Output 和 Listing 设置有关,可以安全删除,暂不做详细介绍。

2.自建文件

        这里要介绍的是USERFWLIBCMSIS三个文件夹。

(1)USER 文件夹

        USER 文件夹是自己创建的文件,可以用来存放用户代码,例如 main.c,以及其他自建源文件、头文件,像如果要设计一个电机控制模块 motor_control.c/.h,可以存放在这里。当然了,这取决于个人习惯,可以根据习惯创建其他文件夹用于存放编写完成的应用程序。

(2)FWLIB 文件夹

        FWLIB 文件夹是自己创建的文件,表示Firmware Library(固件库),可以用来存放外设标准库,并使用 inc 子文件夹和 src 子文件夹将头文件和源文件分开,文件夹内容如下图所示:        

        上述文件中的 stm32f10x_ppp.c/.h 是对应外设的库文件,有了这些库文件就可以使用对应外设的标准库函数了。其中另有 misc.c/.h 文件,这里面定义了NVIC的相关配置函数(如 NVIC_Init() 等)以及一个配置 SysTick 的时钟源的函数。若要使用标准库开发STM32,这些文件是必不可少的,若使用直接操作寄存器的方式开发STM32,这些文件是不需要的。

(3)CMSIS 文件夹

        接下来介绍自建的 CMSIS 文件夹中的内容。文件夹内容如图所示:

        首先是 core_cm3.c/.h 文件,它们是ARM公司提供的 CMSIS 核心文件,它们为所有基于Cortex-M3内核的芯片提供了一套统一的、标准化的软件接口,用于访问和控制内核本身的核心功能,如中断控制器(NVIC)、系统定时器(SysTick)、特殊指令以及CPU寄存器,从而实现了对处理器底层硬件的抽象,为不同厂商的芯片库和应用程序(如RTOS)提供了可移植的基础。

        然后是 startup_stm32f10x_hd.s 文件,这是一个使用汇编语言编写的启动文件,STM32 上电或者复位后首先执行这个文件,负责进行最底层的硬件初始化,包括初始化堆栈指针、初始化中断向量表、执行复位处理程序(Reset_Handler())和跳转到 main 函数。

        接着是 stm32f10x.h 文件,其在标准外设库开发中扮演着基石和总枢纽的角色,其作用主要有芯片型号选择与配置、定义外设寄存器结构体和内存映射、定义外设寄存器位定义等等。

        下面是 stm32f10x_conf.h 文件,这个文件中,前半部分是标准外设库头文件的包含,后半部分是断言相关的宏定义。如果不适用标准外设库开发,这个文件是不需要的。

        再后面到 stm32f10x_it.c/.h 文件,这个文件中包含了一些异常的中断处理函数模板,但都是空函数,实际上我们可以在其他地方定义中断服务函数,所以这个文件不是必要的。但可以保留,以集中管理中断服务程序,取决于个人。

        最后是 system_stm32f10x.c/.h 文件,这个文件中有大量的和时钟配置有关的函数定义,是非常重要的一个文件,即使是使用直接操作寄存器的方式开发STM32也建议保留,当然也可以自己自定义初始化时钟代码。

二、工程创建教程

1.下载固件库

        首先,搜索“ST官网”,进入中国大陆地区官网:

        进入官网后,依次选择“工具与软件”、“嵌入式软件”、“STM32嵌入式软件”。如下图所示:

        接着,在网页左侧选择“STM32标准外设软件库”,并选择需要的芯片系列,我将以STM32F103RCT6为例,选择“F1”。如下图所示:

        至此,就可以选择版本下载固件库了。下载需要登陆,没有注册过的可以注册一个,不难。下载界面如下图:

        得到的文件包打开后如下图所示,其中主要需要第二个 Libraries 文件夹中的文件。第一个_htmresc文件夹是一些官方图标,不重要。第三个 Project 文件夹包含各个外设的使用示例和空的工程模板,有耐心的话可以做参考用。第四个Utilities文件夹是ST评估板的相关示例和驱动,如果有用ST官方指定的开发板的话可以使用。最下面的stm32f10x_stdperiph_lib_um文件是一个已编译的HTML帮助文件,是标准外设库的官方离线文档,用于查询所有库函数的详细用法、参数和示例代码,可以做学习使用。

2.创建工程

        记住如下步骤,即可自己手动创建基于标准库开发的STM32 keil工程,而不用再跟着教学视频做。现在以STM32F103RCT6为例创建工程。

        首先,记住下面这些文件,这些是建议工程要包含的文件:

  • ① stm32f10x.h
  • ② stm32f10x_conf.h
  • ③ system_stm32f10x.c/.h
  • ④ stm32f10x_it.c/.h
  • ⑤ core_cm3.c/.h
  • ⑥ startup_stm32f10x_hd.s
  • ⑦ 外设标准库文件

        现在,创建工程分成三大步,一是使用 keil 5 生成一个不完善的工程,二是添加上述文件,三是做简要配置。

(1)创建不完善的工程

        第一小步,创建一个工程文件夹,可以在桌面等处创建,如下图所示:

        第二小步,在这个文件夹中创建三个文件夹(CMSIS、FWLIB、USER),认为麻烦也可以只创建两个文件夹(FWLIB、USER),然后把上述①~⑦的文件全塞 FWLIB 里。怎么做完全取决于个人。如下图所示:

        第三小步,打开keil 5 MDK,选择 “Project”、“New μVision Project”。然后选择进入刚刚创建的工程文件夹内。

        第四小步,在弹出的芯片选择界面选择对应的芯片系列,我这里选择“STM32F103RC”。如果没有下载芯片支持包的可以点这里的 “Pack Installer” 进行下载。选择完芯片直接关掉弹出来的“Manage Run-Time Environment” 界面,这个界面若感兴趣的可以自己去了解下。

(2)移植文件

        打开从ST官网下载的外设固件库,打开Libraries文件夹。得到如图所示页面:

        第二个文件夹 STM32F10x_StdPeriph_Driver 里面的就是上面标的第七点“外设标准库文件”了。打开,将里面的inc文件夹(装着外设标准库头文件)和src文件夹(装着外设标准库源文件)直接复制粘贴到我们创建的FWLIB文件夹中。如果认为有哪些外设根本不用的话,也可以将其源文件和头文件从中剔除。

        然后打开固件包的CMSIS文件夹,可以在其中找到这几个需要的文件:①、③、⑤、⑥,都比较好找,自己找一下也好更多的了解一下这个固件包的文件结构。要注意的是,其中⑥ startup_stm32f10x_hd.s 文件从STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup来到如下这个页面:

这里分为不同编译器需要使用的启动文件,第一个是keil中的ARMCC/ARMClang编译器,我们创建的是keil工程,需要选择这里面的启动文件。下面分别是GCC编译器、IAR的ICCARM编译器和某个编译器对应所需的启动文件。至于里面的启动文件选择什么,这个取决于芯片的FLASH容量,使用一款芯片时应当对自己这款芯片的FLASH容量大小有所了解,随便一搜即有结果,这里先不多介绍。

        剩余② stm32f10x_conf.h、④ stm32f10x_it.c/.h 在这个文件夹里是没有的,如果开发不是那么深的话,④是没必要的其实,中断处理程序放在哪里都行,这个文件主要是给了一些中断处理程序模板。但我们还是都加入进去吧。

        ②和④可以在固件包中的工程模板中找到。如下图所示:

        将①②③④⑤⑥这些文件都放入我们创建的CMSIS文件夹中后,现在工程已经完整了,接下来只需要简单配置一下工程即可。

(3)配置工程

        点击“Manage Project Items”图标,如下图所示:

        在弹出的页面中将自动生成的 Source Group 1 组双击改名为 CMSIS,并增加两组 FWLIB 和 USER,对应我们自己创建的三个文件夹。然后选中某一组,在右侧点击 “Add Files”,将对应文件夹中的所有文件加入到组中。注意文件夹不能被加入,然后要将所有源文件、头文件和启动文件加入到组中。需要选择文件类型,否则有的文件不显示,如下图所示:

        然后点击 “Options for Target”,选择 “C/C++”页面,加入头文件包含路径(点击右侧的三个点)。如下图所示:

有头文件的文件夹路径都要包含,包括USER、CMSIS、FWLIB的inc文件夹这三个地方。如下图所示:

        然后,还是同样的 “C/C++” 页面,在上方的 “Define” 框中写入 USE_STDPERIPH_DRIVERSTM32F10X_HD,使用英文逗号隔开,如下图所示:

        前者 USE_STDPERIPH_DRIVER 宏是使用标准外设库必须要定义的,这在 stm32f10x.h 文件中有说明,如下图所示:

        当然了,也可以不在上面的预处理器定义框中去定义,可以在文件中定义,只是建议还是在预处理器中定义的好。

        至于第二个宏 STM32F10X_HD,显然这和芯片类型有关(HD和前面的FLASH容量大小有关,同样在stm32f10x.h文件中显示需要定义这个宏,如下图所示,不定义这个宏编译时将会报错。不过,不在上面说的预处理器中预定义也不会报错,这可能是在选择了芯片之后在哪里会自动定义这个宏。所以不定义这个宏也没问题。

        至此,我们已经完成了工程的创建,可以自己编写 main 文件和其他源文件、头文件并放入 USER 组中来开发 STM32 了。

        最后,建议有时间还是自己去钻研一下上面谈到的文件①~⑦,文件并不算太难看懂,看完会对 STM32 有更深的理解,这其实也是学习 STM32 的一个必要的过程。

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

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

相关文章

AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变

AI大模型重塑日常:从智能办公到生活服务的5个核心改变一、引言• 简述AI大模型技术的快速发展背景,说明其已从技术领域逐步渗透到大众日常生活• 提出核心观点:AI大模型正从办公和生活服务两大场景,深度改变人们的行为模式与…

迈威通信从送快递角度教你分清网络二层和三层

还在为网络里的二层、三层概念头大?其实就像送快递那么简单!今天迈威通信用最接地气的方式给你讲明白~网络传输 送快递?没错!二层网络:本地送货员负责同小区的包裹配送(局域网传输),就像小区里的快递站(对应设备:交换机)&#…

【Linux】网络安全管理:SELinux 和 防火墙联合使用 | Redhat

本专栏文章持续更新,新增内容使用蓝色表示。 往期相关内容 【Linux】权限管理详解(三):SELinux安全性管理 | Redhat-CSDN博客 【Linux】网络安全管理:Netfilter、nftables 与 Firewalld | Redhat_linux netfilter-C…

微论-构建完整的智能环:具身智能系统的层级化架构探析

### **构建完整的智能环:具身智能系统的层级化架构探析**#### **引言:迈向与现实交互的智能**人工智能的发展正经历一场从“虚拟”走向“现实”的范式迁移。具身智能,作为这一浪潮的核心,强调智能体必须拥有“身体”,并…

Spring如何解决循环依赖:深入理解三级缓存机制

Spring如何解决循环依赖:深入理解三级缓存机制 引言 在我们之前的文章中,我们探讨了什么是循环依赖以及它带来的问题。作为Java生态系统中最重要的框架之一,Spring Framework在处理循环依赖方面有着独特而精妙的解决方案。今天,让…

HTML第六课:表格展示

HTML第六课&#xff1a;表格展示学生花名册学生花名册 效果示列 代码展示 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta …

医疗行业API管理优化:使用QuickAPI提高数据安全与接口性能

背景与挑战在医疗行业&#xff0c;特别是医院信息系统&#xff08;HIS&#xff09;或其他相关部门&#xff08;如实验室信息系统LIS、药品管理系统等&#xff09;&#xff0c;数据安全和隐私保护一直是核心问题。然而&#xff0c;许多医疗机构仍然面临着以下问题&#xff1a;数…

docker 部署RustDesk服务

最近要用到远程桌面服务&#xff0c;网上的资料很丰富&#xff0c;但是和我的情况有点点区别&#xff0c;我是要搭一台局域网使用的远程桌面服务。 首先是源的问题&#xff1a; 很多都是不能用的&#xff0c;我用的docker桌面版&#xff0c; 其他的不重要&#xff0c;源地址&…

Kubernetes 中为 ZenTao 的 Apache 服务器添加请求体大小限制

本文将详细介绍如何通过修改 Apache 配置模板并在 Kubernetes 中使用 ConfigMap,为 ZenTao 系统添加请求体大小限制(LimitRequestBody)。 背景介绍 在企业级项目管理软件 ZenTao 的部署过程中,我们经常需要对 Apache 服务器进行安全加固。其中一个重要的安全措施是限制客户…

综述 | Agentic RL for LLM的最新进展与未来挑战,idea满满

近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;和强化学习&#xff08;RL&#xff09;的融合正在彻底改变我们构建和部署AI系统的方式。早期的LLM强化学习&#xff08;LLM-RL&#xff09;主要关注如何通过人类反馈&#xff08;如RLHF&#xff09;让模型生成更符合人…

【代码随想录算法训练营——Day3】链表——203.移除链表元素、707.设计链表、206.反转链表

LeetCode题目链接 https://leetcode.cn/problems/remove-linked-list-elements/ https://leetcode.cn/problems/design-linked-list/ https://leetcode.cn/problems/reverse-linked-list/ 题解 203.移除链表元素 重要的是创立头结点&#xff0c;这点在写题前已经经受过提示。 注…

CI/CD流水线驱动自动化流程深度解析:选型、竞品、成本与资源消耗

目录 一、CI/CD是什么&#xff1f;核心定位与价值 二、选型与竞品分析 (GitLab CI vs. Jenkins vs. GitHub Actions vs. GitLab CI) 三、部署成本分析 四、服务器资源消耗分析 五、给您的最终建议 一、CI/CD是什么&#xff1f;核心定位与价值 CI/CD&#xff08;持续集成/…

工厂办公环境如何实现一台服务器多人共享办公

在现代化工厂的办公环境中&#xff0c;如何通过一台服务器实现多人共享办公是一个既实用又高效的需求。这种方案不仅能降低硬件成本&#xff0c;还能简化IT管理&#xff0c;提高数据安全性。在工厂办公环境中&#xff0c;通过云飞云共享云桌面实现一台服务器多人共享办公&#…

系统性学习数据结构-第三讲-栈和队列

系统性学习数据结构-第三讲-栈和队列1. 栈1.1 栈和队列1.2 栈的实现2. 队列2.1 概念与结构2.2 队列的实现3. 栈和队列算法题3.1 [有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)3.2 [用队列实现栈](https://leetcode.cn/problems/implement-stack-…

硬件(三) 通信方式、串口通信

一、通信类型&#xff08;一&#xff09;并行通信多个比特通过并行线同时传输&#xff0c;传输速率快&#xff0c;但会大量占用芯片资源&#xff0c;在对资源敏感的场景下不太适用。&#xff08;二&#xff09;串行通信把数据拆成单个比特&#xff0c;按顺序在一根总线上发送。…

vsan default storage policy 具体是什么策略?

vSAN Default Storage Policy&#xff08;vSAN 默认存储策略&#xff09;是 VMware vSAN 部署后自动创建的基础存储策略&#xff0c;其核心目标是在“通用性”和“可靠性”之间取得平衡&#xff0c;为大多数虚拟机提供默认的数据保护和存储服务&#xff0c;无需管理员手动创建策…

雨后阳光为何更强烈?

1. 降雨后的辐射是否会增强一般来说&#xff0c;降雨时天空多云&#xff0c;云层对太阳辐射有强烈削弱作用&#xff0c;所以降雨时的短波辐射显著下降。但雨后&#xff0c;空气湿度大、颗粒物被冲刷、天空转晴时&#xff0c;大气透明度会提高&#xff0c;短波辐射相较于降雨前往…

美团发布 | LongCat-Flash最全解读,硬刚GPT-4.1、Kimi!

一、导读 本报告解析了美团LongCat团队推出的LongCat-Flash模型&#xff0c;一个拥有5600亿参数的混合专家模型&#xff08;Mixture-of-Experts, MoE&#xff09;。面对大规模语言模型在计算资源和效率上的挑战&#xff0c;LongCat-Flash旨在实现计算效率与高级智能体&#xf…

Ubuntu 18.04 上升级 gcc 到 9.4

18.04 默认的源中可能没有 GCC-9.3 或更新版本&#xff0c;在终端运行以下命令来添加 PPA&#xff1a; sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update2.安装 GCC 和 G sudo apt install gcc-9 g-93.更新替代版本 如果系统中安装了多个 GCC 版本&#x…

.NET GcPDF V8.2 新版本:人工智能 PDF 处理

一、GcPDF 产品简介 GcPDF&#xff08;GrapeCity Documents for PDF&#xff09;是葡萄城&#xff08;GrapeCity&#xff09;推出的一款功能强大的 .NET PDF 开发组件&#xff0c;旨在为开发人员提供高效、灵活的 PDF 文档处理解决方案。无论是创建全新 PDF 文档、编辑现有 PD…