文章包含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. 浅谈C++中指针和引用的区别

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...

  2. asp.net预览图片

    Aspx code <table> <tr> <td class="style3"> <asp:Label ID="Label1 ...

  3. Oracle EBS DBA常用SQL - 安装/补丁【Z】

    Oracle EBS DBA常用SQL - 安装/补丁 检查应用补丁有没有安装:select bug_number,last_update_date from ad_bugs where bug_nu ...

  4. Spring-----Spring Jar包

    转载自:http://blog.csdn.net/hekewangzi/article/details/51713110

  5. Java并发编程实践(读书笔记) 任务执行(未完)

    任务的定义 大多数并发程序都是围绕任务进行管理的.任务就是抽象和离散的工作单元.   任务的执行策略 1.顺序的执行任务 这种策略的特点是一般只有按顺序处理到来的任务.一次只能处理一个任务,后来其它任 ...

  6. 使用cmake安装mysql5.5.13

    MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 安装cmake : tar zxvf ...

  7. JavaScript瀑布流代码

    function osCode(){ var boxWidth = parseInt($(".item").css('width')), marginTop = parseInt( ...

  8. QT中进度条的使用

    在QT中可以用QProgressBar或着QProgressDialog来实现进度条. QProgressBar的使用 首先在designer中拖一个按钮和进度条部件,按下面初始化 //补充:下面两句 ...

  9. Qt:基于TCP和UDP的局域网P2P(局域网)通讯封装

    封装了一个类,可以进行在局域网进行P2P通讯(仅局域网可用) 也就是说,假设局域网中有10台电脑,那么从本机发出的数据,将依次派发到这10台电脑(目前的设计中包括自己这台) 在使用方面,构造的时候给端 ...

  10. VIM+qmake编译示例程序HelloQt出错问题的解决(文件名一定要使用.cpp,否则就会默认使用gcc编译,当然通不过)

    之前看到很多初学Qt的Linux友们在使用qmake编译第一个HelloQt或者HelloWorld程序时报错,并且始终找不到原因. 前几天我也遇到了同样的问题,我用的是<精通Qt4编程> ...