参考: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
目录
- 固件库的使用
- 创建固件库文件夹
- 固件库官方源文件拷贝到相应文件夹
- Libiraries(FWLIB)
- CORE
- USER
- 新建工程
- 将固件库文件导入到工程
- 工程下创建文件夹
- 文件夹内添加文件
- 生成.hex文件
- 添加头文件路径
- STM32固件库文件树结构简介
- Libraries 文件夹
- Project 文件夹
- 固件库的帮助文档
- STM32固件库内部结构功能简介
- 1. 汇编编写的启动文件
- 2. 时钟配置文件
- 3. 外设相关的
- 4. 内核相关的
- 5. 头文件的配置文件
- 6. 专门存放中断服务函数的c文件
固件库的使用
固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(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