STM32F103构建固件库模板(PS固件库文件树介绍)

参考:STM32F103ZE新建固件库模板
作者:追兮兮
发布时间:2020-10-14 10:31:45
网址:https://blog.csdn.net/weixin_44234294/article/details/109065495
参考博文:https://blog.csdn.net/visual_eagle/article/details/104126122

固件库的使用

固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(API)。在 51的开发中我们常常的作法是直接操作寄存器,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法 半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API) 供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可

以本博的学习板STM32F103ZET6为例,固件库(库函数的集合)是由官方提供的,这个官方是ST公司,而不是正点原子官方。也就是说不仅仅这一型号单片机,ST系列其他型号的单片机库函数依旧可以适用。所以不必担心更换板子后不知如何去编程。

任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,如果想要把 STM32 学透,光读 STM32 固件库是远远不够的,你还是要了 解一下 STM32 的原理。

创建固件库文件夹

新建一个文件夹Template(自己随意起),该目录下四个文件夹如图(名字也可以自己起)

  • Core:一些核心文件和启动文件(或者分开为:CMSIS和STARTUP)
  • Libiraries(FWLIB):固件库(外设驱动)
  • Project:工程文件,keil创建的工程保存在此
  • User:main函数,应用程序
  • Doc:创建readme.txt工程项目描述文件
  • 将生成的.hex文件存在于OBJ目录下

不同人习惯不同,放置的位置会有一些区别,不过无伤大雅。


在这里插入图片描述

固件库官方源文件拷贝到相应文件夹

Libiraries(FWLIB)

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下有inc(头文件)和src(.c文件)两个文件copy到Template文件夹下的Libiraries内,里面都是外设的一些驱动,如下所示。


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

CORE

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目录下两个文件copy到之前新建的文件Template下的CORE文件下。

在这里插入图片描述
在这里插入图片描述

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录下还要copy一个启动文件到CORE。
(>128kFLASH大容量的用hd,中等的用md,<64kFLASH小的用ld)战舰板子就用hd

在这里插入图片描述
在这里插入图片描述

Core目录完成,内部显示如下:

在这里插入图片描述

USER

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下copy三个文件到USER文件。

在这里插入图片描述

在这里插入图片描述

\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下复制以下四个文件到USER。

在这里插入图片描述
在这里插入图片描述

新建工程

打开MDK5新建工程

在这里插入图片描述

目录选择之前新建的template下的User,文件名字自己取

在这里插入图片描述

选择芯片型号,我这里是STM32F103ZE。

江江视频里此处选的STM32F103C8

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目新建后的目录

在这里插入图片描述

此时点击之前新建的文件Template下的USER后:(会出现以下文件,点开前两个都是空文件)

在这里插入图片描述

将固件库文件导入到工程

工程下创建文件夹

此时固件库内容的复制已经完成,现在就要在MDK5中将文件导入到工程。在工程下创建文件夹。

江江视频里的方法:
工程下创建文件夹:右键选择Add Group,挨个添加,鼠标长按进行修改名字。
向文件夹内添加文件:直接在主界面双击文件夹,弹出添加界面进行文件的添加。

右键选择Manage Project items…创建三个文件夹(Keil
主界面魔术棒右边是这个快捷键)。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

文件夹内添加文件

FWLIB:Add Files… \LibLIbiiraries\src(全部文件)

在这里插入图片描述
USER:Add Files… \USER(3个.c文件)
在这里插入图片描述
COREc:Add Files… \CORE(.c文件+.s文件)

在这里插入图片描述

生成.hex文件

点击魔术棒将生成的.hex文件存在于Project(大部分人之前这个文件夹都取名为OBJ)

在这里插入图片描述
在这里插入图片描述

添加头文件路径

此时编译会出现找不到头文件的error。

需添加头文件路径,编译时自动就把头文件包含进来。

在这里插入图片描述

发现编译再次出错

在这里插入图片描述

原因:实际上User目录下的这个.h文件是没有被导入进去的

在这里插入图片描述
在这里插入图片描述

上面这句话说明只有定义了USE_STDPERIPH_DRIVER才会包含这个头文件,所以需要添加宏定义到Define,点击ok。

在这里插入图片描述

再次编译就不报错了

在这里插入图片描述

STM32固件库文件树结构简介

STM32固件库文件树及构成详解(库版本:STM32F10x_StdPeriph_Lib_V3.5.0)

库减压后所有文件夹构成如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Libraries 文件夹

有 CMSIS 和 STM32F10x_StdPeriph_Driver 两个目录,这两个目录包含 固 件 库 核 心 的 所 有 子 文 件 夹 和 文 件 。 其 中 CMSIS 目 录 下 面 是 启 动 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件库源码文件。源文件目录下面的 inc 目录存放的是 stm32f10x_xxx.h 头文件,无需改动。src 目录下面放的是 stm32f10x_xxx.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库的核心文件,每个外设对应的一组文件。

Project 文件夹

有两个文件夹,顾名思义, STM32F10x_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重STM32F10x_StdPeriph_Template 文件夹下面存放的是工程模板。Utilities 文件下就是官方评估板的一些对应源码。

固件库的帮助文档

根目录中还有一个 stm32f10x_stdperiph_lib_um.chm 文件,直接打开可以知道,这个文档学习过程中非常有用

STM32固件库内部结构功能简介

这里可参照视频学习:【150集-野火F103霸道/指南者视频教程】
P16 初识STM32固件库—我们认为固件库应该是什么样子的

1. 汇编编写的启动文件

startup_ stm32f10x_ hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用c库函数_ main最终去到c的世界

 
 
  • 1

2. 时钟配置文件

system_ stm32f10x.c: 把外部时钟HSE=8M, 经过PLL倍频为72M。

 
 
  • 1

3. 外设相关的

stm32f10x.h: 实现了内核之外的外设的寄存器映射
XXX: GPIO、 USRAT、 I2C、 SPI、 FSMC 
stm32f10x_ xx.c: 外设的驱动函数库文件
stm32f10x__xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明

 
 
  • 1
  • 2
  • 3
  • 4

4. 内核相关的

CMSIS - Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_ _cm3.c .
NVIC(嵌套向量中断控制器)、sysTick(系统滴答定时器)
misc.h
misc.c

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5. 头文件的配置文件

stm32f10x_ _conf.h: 头文件的头文件
/ /stm32f10x_ _usart.h
/ /stm32f10x_ _i2c.h
/ /stm32f10x_ spi.h
/ /stm32f10x_ adc.h
/ /stm32f10x_ fsmc.h

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6. 专门存放中断服务函数的c文件

stm32f10x_ it.c
stm32f10x_ it.h
中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c

 
 
  • 1
  • 2
  • 3
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行稳方能走远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值