文章目录
1. 固件库认知
1.1 启动文件
汇编语言编写的,
startup_stm32f10x_md.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C库函数_main最终去C的世界
1.2 时钟配置文件
system_stm32f10x.c: 把外部时钟HSE=8MHz,经过PLL倍频为72MHz
1.3 外设相关的文件
stm32f10x.h: 实现了内核之外的外设寄存器的映射
xxx: I2C、SPI、USART、FSMC等
stm32f10x_xx.c: 外设的驱动函数文件
stm32f10x_xx.h: 存放外设的初始化结构体,外设初始化结构体成员的参数列表。外设固件库函数的声明。
1.4 内核相关的文件
内核文件编写的标准:CMIS-Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_cm3.c:实现了内核里面外设的寄存器映射
ST自己封装的内核库:
NVIC(嵌套中断向量控制器)、SysTick(系统滴答定时器)
misc.h
misc.c
1.5 头文件的配置文件
stm32f10x_conf.h: 头文件的头文件
其中包含有:
stm32f10x_gpio.h
stm32f10x_usart.h
stm32f10x_i2c.h
stm32f10x_spi.h
stm32f10x_fsmc.h
......
1.6 专门存放中断服务函数的C文件
stm32f10x_it.c
stm32f10x_it.c
中断服务函数你可以放在任意位置,并不一定需要放在stm32f10x_it.c。
2. 官方固件库文档
2.1 从ST官网下载固件库源码
参考https://blog.csdn.net/xzzszka/article/details/123768623下载STM32固件库,并且可以创建一个固件库编成的项目例程。
下载成功后打开固件库目录,可以看到有如下内容:
目录名 | 目录介绍 |
---|---|
_htmresc | 里面只有一些LOG |
Libraries | 固件库主要内容,我们所关注的重点 |
Project | 一些工程模板,有不同编译器的模板,参考例程 |
Utilities | 官方评估板的例程,我们不关心 |
Package_license.html | |
Package_license.md | |
Release_Notes.html | |
stm32f10x_stdperiph_lib_um.chm | 固件库手册,可直接查看各函数的使用方法 |
2.2 1启动文件分析选择
- 启动文件选择参考https://blog.csdn.net/XYJ_Tiger/article/details/124741844?spm=1001.2014.3001.5502 的1.1章节
Libraries目录内容:
目录名 | 介绍 |
---|---|
CMSIS | 内核驱动文件,包含启动文件等内容 |
STM32F10x_StdPeriph_Driver | 各外设的驱动函数文件 |
3. 创建固件库工程模板
模板目录如下:
工程创建方法参考:https://blog.csdn.net/XYJ_Tiger/article/details/124741844?spm=1001.2014.3001.5502
拷贝lib固件库库的源码到工程目录:
保留内容如下图:
然后将文件添加到工程中,具体添加的方法在这里不在说明。若有不懂的可参考https://blog.csdn.net/XYJ_Tiger/article/details/124741844?spm=1001.2014.3001.5502。
其中USER目录下的stm32f10x_conf.h 、stm32f10x_it.h 、 stm32f10x_it.c这几个文件可以自己创建,也可以从固件库提供的例程代码中拷贝。
添加所需要包含的头文件,添加方法如下:
上图中所定义的两个宏分别是,在上图所示位置定义避免后面每个文件使用是重复定义。
STM32F10X_MD:表示使用的STM32的芯片的类型容量大小,在stm32f10x.h文件中,使用不同容量大小的stm32芯片,这里的宏定义不同,具体如下:
USE_STDPERIPH_DRIVER:stm32f10x_conf.h 包含所有外设驱动的头文件,
软件配置:
- 勾选下图内容, 后面采用printf调试时,printf属于MicroLIB,对程序不会有影响
- 连上板卡,在设置里面勾选下图选项,否则程序下载成功之后还需要在手动复位运行,勾选之后程序下载完成之后会自动运行。
附录
可以通过这里定义宏,在所有文件中使用都有效、