STM32学习笔记——了解固件库文件
1. 启动文件startup_stm32f10x_hd.s
- 堆栈以及堆的初始化
定义中断向量表
调用Reset Handler
为中断向量表成员赋值及中断服务程序定义(停止)
堆栈以及堆的初始化行为 - ARM m3 C是怎么调用startup_stm32f10x_hd.s文件的?
startup_stm32f10x_hd.s大部分内容不是被C调用的,而是在C程序之前运行的。m3上电之后会先从0地址处读取MSP,然后从0x4地址处读取复位向量,接着跳转到复位异常服务程序Reset_Handler(这些是m3内核自动做的,不需要编程)。如果你用MDK的话,在工程设置Debug下的run to main()上的勾去掉,然后进入调试,你会发现你运行的第一句就是Reset_Handler的第一句。
Reset_Handler就是在startup_stm32f10x_hd.s中定义的,它一般会对系统初始化,然后进入main函数。
向量表也是在startup.s中定义的,至于为什么程序编译之后向量表一定在0地址处,是因为向量表的前面会有类似AREA RESET, CODE, READONLY的声明。在MDK生成的分散加载文件中,RESET被设置在flash的0地址处,这样就规定了向量表的地址。
2. 时钟配置文件system_stm32f10x.c
将外部时钟8M倍频为72M
3. 内核相关文件CMSIS
core_cm3.c
- ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
- define compiler specific symbols定义编译器类型
ARM公司__CC_ARM(也就是keil软件使用的编译类型) - 在Keil中使用了__asm关键字后,编译器不会为函数增加返回指令,所以需要自己编写返回命令,也就是每个函数后面的 bx lr。
core_cm3.h
- 实现内核外设的寄存器映射
NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h
misc.c
4. 外设相关文件FWLIB
stm32f10x.h 实现内核之外的寄存器映射
stm32f10x_xx.c 外设驱动函数库文件
stm32f10x_xx.h 存放外设初始化结构体,外设初始化结构体成员参数列表,外设固件库函数声明
xx:GPIO、USART、I2C、SPI、FSMC
5. 头文件配置
stm32f10x_conf.h 将库函数头文件包含
6. 中断服务函数文件
stm32f10x_it.c
stm32f10x_it.h
参考: