欢乐家园 发表于 2023-3-28 17:21

STM32固件库介绍和新建基于固件库的 MDK5工程模板

什么是固件库?

STM32 固件库就是函数的集合

为了能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex Microcontroller Software Interface Standard) ,翻译过来是“ARM Cortex™ 微控制器软件接口标准”。

CMSIS 分为 3 个基本功能层:

    核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
    中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
    外设访问层:定义硬件寄存器的地址以及外设的访问函数。

CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库
函数必须按照 CMSIS 这套规范来设计。

小夏天的大西瓜 发表于 2023-3-28 17:35

STM32标准外设库之前的版本也称固件函数库或简称固件库

欢乐家园 发表于 2023-3-29 01:15

新建基于固件库的 MDK5 工程模板

    建立一个文件夹,并在其下新建USER目录

keil5新建项目在USER下



删除USER下的objects和Listings

在根目录下新建CORE,OBJ,以及LIB文件夹

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,
将目录下面的* src,inc 文件夹 *复制 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。

目录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 文件复制到 CORE 下面。

定位为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 目录下面

下面我们将这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Components

欢乐家园 发表于 2023-3-29 01:16



    Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target名字以及 Groups 情况。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNjHaPI5-1663773677099)(file://C:\Users\lym\AppData\Roaming\marktext\images\2022-09-21-18-22-46-image.png?msec=1663773666350)]

    选择选择 Manage Components.然后选择需要添加文件的 Group,这里第一步我们选 择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。

欢乐家园 发表于 2023-3-29 01:17

将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10x_hd.s

USER 目录下面需要添加的文件为 main.c,stm32f10x_it.c,system_stm32f10x.c.

欢乐家园 发表于 2023-3-29 01:17

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

欢乐家园 发表于 2023-3-29 01:17

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

欢乐家园 发表于 2023-3-29 01:19

将正点原子的SYSTEM文件将.c和.h文件导入项目

欢乐家园 发表于 2023-3-29 01:20

本文源代码:https://download.csdn.net/download/qq_36831734/86615348

jiaxw 发表于 2023-3-30 20:41

怎么能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容

zhuhuis 发表于 2023-3-30 20:47

外设访问层呢

songqian17 发表于 2023-3-30 20:53

定义硬件寄存器的地址以及外设的访问函数

huanghuac 发表于 2023-3-30 21:05

中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。

shimx 发表于 2023-3-30 21:14

欢乐家园 发表于 2023-3-29 01:16
Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Grou ...

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNjHaPI5-1663773677099)(file://C:\Users\lym\AppData\Roaming\marktext\images\2022-09-21-18-22-46-image.png?msec=1663773666350)]

这是啥意思?

51xlf 发表于 2023-4-2 16:39

一个完整的嵌入式系统软件开发解决方案

fengm 发表于 2023-4-2 17:30

提供了完整的硬件驱动框架,可以满足开发者实现各种功能的应用

earlmax 发表于 2023-4-2 17:43

通过包含头文件和链接库文件,可以调用固件库中提供的函数和API,快速实现对硬件外设的控制和操作。

tabmone 发表于 2023-4-2 17:52

STM32固件库包含了各种微控制器型号的驱动程序和库文件,可以直接引用到工程中。

everyrobin 发表于 2023-4-2 18:01

对于每个STM32系列微控制器,STMicroelectronics都会提供相应的固件库

wangdezhi 发表于 2023-4-2 18:34

在实际开发过程中,还可以根据需要添加其他文件和文件夹,例如外设驱动代码、应用程序逻辑代码等。
页: [1] 2
查看完整版本: STM32固件库介绍和新建基于固件库的 MDK5工程模板