【STM32学习笔记1】基于固件库的STM32_MDK工程模版
文章包含STM32固件库介绍和工程模板搭建两方面内容。
一、STM32固件库介绍
要建立工程模板,首先要对STM32的固件库有所了解。STM32的固件可以从ST官网下载,网址为:http://www.stmicroelectronics.com.cn/web/cn/catalog/tools/FM147/CL1794/SC961/SS1743,下载后的文件夹组织结构如图1所示。
图1 STM32固件库文件夹
为了更清楚的了解这个文件夹,我们把Libraries文件夹展开来看,如图2的所示。其中CMSIS文件夹提供了对STM32F10x系列芯片的Cortex M3的支持。Documentation下有个CMSIS_Core.htm文件,描述了Cotex Microcontroller Software Interface Standard(CMSIS)。CM3文件夹下的两个文件夹,在CoreSupport中的是位于CMSIS标准的核内设备函数层的M3核通用的源文件core_cm3.c和头文件core_cm3.h,它们的作用是为那些采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口,这两个文件在其它公司的M3系列芯片也是相同的。另外一个文件夹包括了为STM32F10x系列MCU写的设备外设访问层DPAL头文件stm32f10x.h以及设备外设访问层系统DPALS头文件system_stm32fx.h。
图2 Libraries文件夹
(1)stm32f10x.h
stm32f10x.h包括了STM32F10x系列处理器所有的外设寄存器定义、位定义和不同容量STM32F10x的内存映射。这里强调一点,如果选用外设库来编程,必须在编译器的PreProcessor Symbols的Define中写入STM32F10X_HD,USE_STDPERIPH_DRIVER,原因是在stm32f10x.h中有两条判断语句,如果不定义就会报错。
1 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) 2 #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" 3 #endif
1 #if !defined USE_STDPERIPH_DRIVER 2 /** 3 * @brief Comment the line below if you will not use the peripherals drivers. 4 In this case, these drivers will not be included and the application code will 5 be based on direct access to peripherals registers 6 */ 7 /*#define USE_STDPERIPH_DRIVER*/ 8 #endif
(2)system_stm32f10x
system_stm32f10x.c,是由ST公司提供的,遵守CMSIS标准。该文件的功能是设置系统时钟和总线时钟。system_stm32f10x.c在实现系统时钟的时候要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含了stm32f10x.h 这个头文件。
(3)startup文件夹
startup文件夹根据不同编译环境编写了启动的汇编代码,这些汇编文件根据不同内存容量的芯片来区分,根据自己芯片选择对应的启动文件。文件名的英文缩写的意义如下:
cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度(容量)产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,FLASH大于128
(4)STM32F10x_StdPeriph_Driver文件夹
Libraries\STM32F10x_StdPeriph_Driver文件夹下有inc(include的缩写)跟src(source的简写)这两个文件夹,这都属于CMSIS的设备外设函数部分。src里面是每个设备外设的驱动程序,这些外设是芯片制造商在Cortex-M3核外加进去的。
为了更好的理解STM32F10xxx标准外设库各个文件间的联系,我们绘出它的体系结构,如图3所示。图中很好的展示了各层以及具体文件之间的联系,各文件的具体功能说明如表2所示。
图3 STM32F10xxx标准外设库体系结构
表1 文件功能说明
从stm32f10x.h顺藤摸瓜,深刻理解结构图即可顺利的完成模版搭建。stm32f10x.h定义了芯片的类型及外设,并且在478、479、8297行包含另外三个头文件"core_cm3.h" 、 "system_stm32f10x.h" 和"stm32f10x_conf.h"。"stm32f10x_conf.h"是个起到开关作用的头文件,只需要用“//”注释掉不需要的外设头文件即可。stm32f10x_it是独立在库文件之外的,是STM32的中断函数。
二、STM32工程模板搭建
(1)新建文件夹
新建文件夹Template,在该文件夹下面建立四个文件夹,入下图4所示。
图4 新建文件夹
(2)复制库文件
将第一节介绍的固件库相关文件复制到下图所示文件夹中
图5 文件夹内容
(3)建立工程
新建工程的方法不再详述,关键讲解文件添加部分。如图6,右击Target1,单击Manage Componets。修改工程名为Temp,Groups中新建Project,CORE,FWLIB三个文件夹,各个文件夹添加文件如图7~9所示。
图6 管理组件 图7 Project中添加文件
图8 CORE中添加文件 图9 FWLIB中添加文件
(4)修改Main函数如下
1 #include "stm32f10x.h" 2 int main(void) 3 { 4 while(1) 5 { 6 ; 7 } 8 }
(5)Target Options编辑
单击魔法棒,选择Output,在Select Folder for Objects中选择第一步中建立的OBJ文件夹,图10。
图10 选择Objects文件夹
点击C/C++,在Define中输入STM32F10X_HD,USE_STDPERIPH_DRIVER,如图11。
图11 宏定义
将图12上面的3个目录添加进去。keil只会在一级目录查找,path一定要定位到最后一级子目录。
图12 添加头文件地址
(6)编译显示成功,工程模板建立完成,图13。
图13 编译通过
浙公网安备 33010602011771号