【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
STM32F10X_HD
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
USE_STDPERIPH_DRIVER

  (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  }
main

  (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  编译通过

posted @ 2013-12-25 12:49  jiaq  阅读(1215)  评论(0)    收藏  举报