当前位置: 首页 > ops >正文

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.xdnf.cn/news/20073.html

相关文章:

  • 写给大学生的
  • 【开题答辩全过程】以 在线教育系统为例,包含答辩的问题和答案
  • 从安装到应用:GISBox与GeoServer的关键区别及用户适配指南
  • Gradle Task 进阶:Task 依赖关系、输入输出、增量构建原理
  • 一种用geoserver发布复杂样式矢量服务的方法
  • [bat-cli] 语法映射 | SyntaxMapping
  • 机器学习-决策树(下)
  • 2025年跨领域管理能力提升认证路径分析
  • JSON转义
  • 涉密图纸管理办法| 涉密图纸如何保护?这4个图纸防泄密方法,可以一试!
  • MOSFET SOA曲线评估
  • AI驱动开发:颠覆传统编程新范式
  • swoole 中 Coroutine\WaitGroup 和channel区别和使用场景
  • 问卷系统项目自动化测试
  • OpenCV: cv::warpAffine()逆仿射变换详解
  • 模型剪枝----ResNet18剪枝实战
  • Linux之Ubuntu桌面化操作系统的安装
  • AI生成内容的版权问题解析与实操指南
  • Sunlord破解AI服务器供电难题!揭秘高效、小型化电感黑科技
  • MQTT 认证与授权机制实践(二)
  • 盲盒抽卡机小程序功能版块设计的合理性评估维度
  • ZooKeeper vs Redis:分布式锁的实现与选型指南
  • Vulkan进阶系列11 - RenderPass 设置对渲染性能的影响
  • 批量生成角色及动画-角色动画转化为mixamo骨骼(二)
  • 深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)
  • 分类、目标检测、实例分割的评估指标
  • 数据结构基础之队列:数组/链表
  • 【C++】 list 容器模拟实现解析
  • 富文本编辑器:主流插件简介与wangEditor深度配置指南
  • 【c++】c++输入和输出的简单介绍