文章包含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中有两条判断语句,如果不定义就会报错。

 #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)
#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
#endif

STM32F10X_HD

 #if !defined  USE_STDPERIPH_DRIVER
/**
* @brief Comment the line below if you will not use the peripherals drivers.
In this case, these drivers will not be included and the application code will
be based on direct access to peripherals registers
*/
/*#define USE_STDPERIPH_DRIVER*/
#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函数如下

 #include "stm32f10x.h"
int main(void)
{
while()
{
;
}
}

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

【STM32学习笔记1】基于固件库的STM32_MDK工程模版的更多相关文章

  1. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  2. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  3. STM32F1固件库文件讲解与基于固件库新建MDK工程模板

    操作系统:win10 1.文件目录 (在cmd下用"cd 文件夹" 进入到要显示的文件夹,如cd d:\en.stsw-stm32054,然后输入tree 回车就会出现上图的目录结 ...

  4. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  5. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  6. STM32学习笔记——新建工程模板步骤(向原子哥学习)

    1.  在创建工程之前,先在电脑的某个目录下面建立一个文件夹,我们先把它命名为Template,后面建立的工程可以放在这个文件夹下.在 Template 工程目录下面,新建 3 个文件夹USER , ...

  7. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  8. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  9. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

随机推荐

  1. Caused by: java.lang.UnsupportedClassVersionError: com/zy/example/domain/Student : Unsupported major.minor version 51.0

    JVM的版本比jdk的版本老,即JVM的版本低于jdk的版本.换个新版本的就可以解决问题.

  2. CDH(cdh5.7) 上集成 kafka

    CDH 可以在线下载: 离线安装

  3. tomcat的catalina

    Tomcat的核心分为3个部分: (1)Web容器---处理静态页面: (2)catalina --- 一个servlet容器-----处理servlet; (3)还有就是JSP容器,它就是把jsp页 ...

  4. Java格式化输出

    Java的格式化输出等同于String.Format,与C有很大的相似,比如 System.out.printf("%8.2f", x);在printf中,可以使用多个参数,例如: ...

  5. javascript自定义日期函数

    1.格式化日期(YYYY-MM-DD) 代码: var DateFormat = function (date) { if (!(date instanceof Date)) { date = dat ...

  6. SilverLight搭建WCF聊天室详细过程

    收藏SL双工通信例子教程 SilverLight 4正式版发布给开发人员带来了更多功能,并且4已经支持NET.TCP协议,配合WCF开发高效率的交互应用程序已经不再是难事,本系列文章主要针对已经完成的 ...

  7. linux LVM 逻辑卷

    fdisk pvcreate vgcreate lvcreate 查看显示 创建 删除 扩容 激活 扫描查找 LV lvdisplay lvcreate lvremove lvextend lvcha ...

  8. Orchard 源码探索(Module,Theme,Core扩展加载概述)

    参考: http://www.orchardch.com/Blog/20120830071458 1. host.Initialize(); private static IOrchardHost H ...

  9. Asp.net MVC学习

    一.mvc项目的创建并运行 1.启动vs2010 2.新建项目 3.选择Asp.net mvc应用程序 4.不创建测试用例 5.创建之后的效果 6.运行后的mvc程序

  10. python进阶--打包为exe文件

    一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...