我们使用STM32固件库,就需要了解官方提供的固件库包结构。
文件夹介绍:
固件库包的Libraries下有CMSIS和STM32F10x-StdPeriph-Driver两个目录,这其中包含了所以固件库核心的所有子文件夹河子文件。
STM32F10x-StdPeriph-Driver //目录下为固件库源代码;
CMSIS //启动文件,有inc和src两文件夹,放置stm32f10x-xxx.h和stm32f10x-xxx.c,每个外设对应一个文件;
Project //存放ST官方提供实例源码;
文件介绍:
core-cm3.c core-cm3.h //提供进入Cortex-M3内核接口,Coresupport目录下
system-stm32f10x.c system-stm32f10x.h //设置系统以及时钟总线,DeviceSupport目录下
stm32f10x.h //多结构体以及宏定义,DeviceSupport目录下
startup-stm32f10x-ld.s
startup-stm32f10x-md.s
startup-stm32f10x-hd.s //对于103系列主要有三个启动文件分别为小、中、大容量
system-stm32f10x.c system-stm32f10x.h //设置系统以及时钟总线,DeviceSupport目录下
stm32f10x.h //多结构体以及宏定义,DeviceSupport目录下
startup-stm32f10x-ld.s
startup-stm32f10x-md.s
startup-stm32f10x-hd.s //对于103系列主要有三个启动文件分别为小、中、大容量
启动文件主要是进行堆栈之类的初始化、中断向量表以及中断函数定义。启动文件要引导进入main函数。Rest-Handler中断函数是唯一实现的中断处理函数,其他的中断函数基本是死循环:
Rest handler
Reset-Handler PROC
EXPORT Reset-Handler
IMPORT --main
IMPORT SystemInit
LDR R0,=SystemInit
BLX R0
LDR R0,=--main
BX R0
ENDP
如上这段代码在系统启动之后,首先调用SystemInit系统初始化函数,再进入main函数。