好多时候,在调试程序时,我们都会直接打开单片机资料里的某一个例程进行修改,没有自己建立过一个完整工程,以STM32F103系列为例,创建一个属于自己的模板,但在创建工程模板时,了解 STM32F10x_StdPeriph_Lib_V3.5.0 固件库的目录结构是非常重要的。固件资料可以参考购买单片机时的附带资料,也可以在官方下载。
1.固件库目录结构
STM32F10x_StdPeriph_Lib_V3.5.0固件库,其官方库目录结构如下:
STM32F10x_StdPeriph_Lib_V3.5.0/
├── Libraries/
│ ├── CMSIS/
│ ├── STM32F10x_StdPeriph_Driver/
│ └── ...
├── Project/
│ ├── STM32F10x_StdPeriph_Examples/
│ └── STM32F10x_StdPeriph_Template/
├── Utilities/
│ └── STM32_EVAL
└── stm32f10x_stdperiph_lib_um
Libraries包括CMSIS和STM32F10x_StdPeriph_Driver两个目录,这两个目录包含固件库核心的所有子文件夹和文件。CMSIS目录下面是启动文件;STM32F10x_StdPeriph_Driver放的是STM32固件库源码文件,其目录下面的inc目录存放的是stm32f10x_xxx.h头文件,无需改动,src目录下面放的是stm32f10x_xxx.c格式的固件库源码文件,每一个.c文件和一个相应的.h文件对应,这里的文件也是固件库的核心文件,每个外设对应一组文件。
Project包括STM32F10x_StdPeriph_Examples、STM32F10x_StdPeriph_Template。前者存放的ST官方提供的固件实例源码,在开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重要。后者存放的是工程模板。
Utilities为官方评估板的一些对应源码,可忽略。
根目录中还有一个stm32f10x_stdperiph_lib_um.chm文件,直接打开可以知道,这是一个固件库的帮助文档,在开发过程中,这个文档会经常被使用到。
2.固件库文件说明
而Libraries文件夹里面的文件在我们建立工程的时候都会使用到,因此着重介绍Libraries目录下面几个重要的文件。
在\Libraries\CMSIS\CM3\CoreSupport目录下面包括core_cm3.c和core_cm3.h,这个就是CMSIS核心文件,提供进入M3内核接口,这是ARM公司提供,对所有CM3内核的芯片都一样。开发者不需要修改这个文件。
在\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下面主要存放一些启动文件以及比较基础的寄存器定义以及中断向量定义的文件。
这个目录包括三个文件:system_stm32f10x.c,system_stm32f10x.h以及stm32f10x.h文件。其中system_stm32f10x.c和对应的头文件system_stm32f10x.h,该文件的功能是设置系统以及总线时钟,这个里面有一个非常重要的SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。
stm32f10x.h这个文件就相当重要了,只要你做STM32开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作。
在Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm是启动文件。我们可以看到8个startup开头的.s文件,是因为对于不同容量的芯片启动文件不一样。
对于103系列,主要是用其中3个启动文件(tip中说明不同型号对应的容量大小):
startup_stm32f10x_ld.s: 小容量产品:FLASH≤32K
startup_stm32f10x_md.s; 中容量产品:64K≤FLASH≤128K
startup_stm32f10x_hd.s; 大容量产品:256K≤FLASH
在\Project\STM32F10x_StdPeriph_Template文件中,会看到其他几个文件 stm32f10x_it.c、stm32f10x_it.h 、 stm32f10x_conf.h、main.c 等文件。
main .c在 STM32F103 开发中起着至关重要的作用。它不仅是程序的入口点,还负责系统初始化、主逻辑执行、资源管理和模块调用。
stm32f10x_it.c 里面是用来编写中断服务函数,中断服务函数也可以随意编写在工程里面的任意一个文件里面,此文件没太大意义。
stm32f10x_conf.h 文件打开可以看到一堆的#include,建立工程的时候,可以注释掉一些不用的外设头文件。例如,可以选择启用或禁用 GPIO、USART、ADC、SPI 等外设的驱动。
3.Tip
STM32F103系列产品的命名规则按照“STM32F103XXYY”的格式来定义,
①产品系列:STM32基于ARM Cortex-M3内核设计,属于32位微控制器。
②产品类型:F表示通用类型。
③产品子系列:103表示增强型,而101表示基本型,102表示USB基本型(USB全速设备),105或107表示互联型。
④引脚数目:第一个X代表引脚数,如T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚。
⑤闪存存储器容量:第二个X代表闪存存储器容量,如4代表16K,6代表32K,8代表64K,B代表128K,C代表256K,D代表384K,E代表512K。
⑥封装:第一个Y代表封装形式,如H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装,Y代表WLCSP64封装。
⑦温度范围:第二个Y代表温度范围,如6代表工业级温度范围-40°C到85°C,7代表工业级温度范围-40°C到105°C。