一、固件库文件分析
1.汇编编写的启动文件
startup_stm32f10x_hd.s:设置堆栈指针、设置pc指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界。
2.时钟配置文件
system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。
3.外设相关的文件
stm32f10x.h:实现了内核之外的外设的寄存器映射。
xxx:GPIO、USRAT、I2c、SPI、FSMC
stm32f10x_xx.c:外设的驱动函数库文件
stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明。
4.内核相关的文件
CMSIS - Cortex微控制器软件接口标准
core_cm3.h:实现了内核里面的外设的寄存器映射。
core_cm3.c:实现内核外设的驱动固件库
NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h
misc.d
5.头文件的配置文件
stm32f10x_conf.h:头文件的头文件
stm32f10x_usart.h stm32f10x_i2c.h stm32f10x_spi.h
stm32f10x_adc.h stm32f10x_fsmc.h stm32f10x_gpio.h
6.专门存放中断服务函数的c文件
stm32f10x_it.c
stm32f10x_it.h
中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c
二、CMSIS 标准及库层次关系
1.库目录、文件简介
STM32F10x_StdPeriph_Lib_V3.5.0\
Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就 在这个文件夹里面。
Project :文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我 们非常有用,我们在学习的时候就可以参考这里面的例程,非常全面,简直就是穷尽了外 设的所有功能。
Utilities:包含了基于 ST 官方实验板的例程,不需要用到,略过即可。
stm32f10x_stdperiph_lib_um.chm:库帮助文档,这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明,非常详细。这是一个已经编译好的 HTML 文件。
在使用库开发时,我们需要把 libraries 目录下的库函数文件添加到工程中,并查阅库帮助文档来 了解 ST 提供的库函数,这个文档说明了每一个库函数的使用方法。
(1)CMSIS 文件夹
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\文件夹展开内容见图 CMSIS 文件夹内容 。目 录:Libraries\CMSIS\
core_cm3
在 CoreSupport 文件夹中有 core_cm3.c 和 core_cm3.h 两个文件。Core_cm3.h 头文件里面实现了内核的寄存器映射,对应外设头文件 stm32f10x.h,区别就是一个针对内核的外设,一个针对片上 (内核之外)的外设。core_cm3.c 文件实现了一下操作内核外设寄存器的函数,用的比较少。
我们还需要了解的是 core_cm3.h 头文件中包含了“stdint.h”这个头文件,这是一个 ANSI C 文件, 是独立于处理器之外的,就像我们熟知的 C 语言头文件“stdio.h”文件一样。位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义。
启动文件
启动文件放在 startup/arm 这个文件夹下面,这里面启动文件有很多个,不同型号的单片机用的启动文件不一样。
我们开发板中用的 STM32F103VET6 或者 STM32F103ZET6 的 FLASH 都是 512K,属于基本型的大容量产品,启动文件统一选择 startup_stm32f10x_hd.s。
Stm32f10x.h
这个头文件实现了片上外设的所有寄存器的映射,是一个非常重要的头文件,在内核中与之想对应的头文件是 core_cm3.h。
system_stm32f10x.c
system_stm32f10x.c 文件实现了 STM32 的时钟配置,操作的是片上的 RCC 这个外设。系统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的 SystemInit 函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成 72M。
(2)STM32F10x_StdPeriph_Driver 文件夹
文件目录:Libraries\STM32F10x_StdPeriph_Driver
STM32F10x_StdPeriph_Driver 文件夹下有 inc(include 的缩写)跟 src(source 的简写)这两个文件夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分。src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件。src 及 inc 文件夹是 ST 标准库的主要内容,甚至不少人直接认为 ST 标准库就是指这些文件,可见其重要性。
这两个文件夹中,还有一个很特别的 misc.c 文件,这个文件提供了外设对内核中的 NVIC(中断向量控制器) 的访问函数,在配置中断时,我们必须把这个文件添加到工程中。
(3)stm32f10x_it.c、stm32f10x_conf.h 和 system_stm32f10x.c 文件
文件目录:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要 添加这个目录下的 stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h 和 system_stm32f10x.c 这四个文件。
stm32f10x_it.c:这个文件是专门用来编写中断服务函数的。
system_stm32f10x.c:这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数。
stm32f10x_conf.h:这个文件被包含进 stm32f10x.h 文件。
stm32f10x_conf.h 文件配置软件库
#include "stm32f10x_adc.h" #include "stm32f10x_bkp.h" #include "stm32f10x_can.h" #include "stm32f10x_cec.h" #include "stm32f10x_crc.h" #include "stm32f10x_dac.h" #include "stm32f10x_dbgmcu.h" #include "stm32f10x_dma.h" #include "stm32f10x_exti.h" #include "stm32f10x_flash.h" #include "stm32f10x_fsmc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_i2c.h" #include "stm32f10x_iwdg.h" #include "stm32f10x_pwr.h" #include "stm32f10x_rcc.h" #include "stm32f10x_rtc.h" #include "stm32f10x_sdio.h" #include "stm32f10x_spi.h" #include "stm32f10x_tim.h" #include "stm32f10x_usart.h" #include "stm32f10x_wwdg.h" #include "misc.h"
2.库各文件间的关系
库文件是直接包含进工程即可,丝毫不用修改,而有 的文件就要我们在使用的时候根据具体的需要进行配置。接下来从整体上把握一下各个文件在 库工程中的层次或关系,这些文件对应到 CMSIS 标准架构上。