STM32F10x固件库简介

本人以前接触过一些 STM32 的东西,也做过一些项目,但更多的是专注于项目本身,而没有过多的思考一个完整的 STM32 工程究竟需要哪些文件,仅仅是使用一些开发板自带的工程模板,直接进行项目开发。现在想更深入的学习 STM32 的知识,为更高级的项目做准备,于是打算从头学起,从基础的学起。遇到的第一个问题便是基于固件库的 STM32 工程创建,经过一段时间的研究,初步了解了相关的知识,所以打算用两篇博文分别介绍 STM32 的固件库和基于固件库的 STM32 工程组成及原因。本人以前接触过一些 STM32 的东西,也做过一些项目,但更多的是专注于项目本身,而没有过多的思考一个完整的 STM32 工程究竟需要哪些文件,仅仅是使用一些开发板自带的工程模板,直接进行项目开发。现在想更深入的学习 STM32 的知识,为更高级的项目做准备,于是打算从头学起,从基础的学起。遇到的第一个问题便是基于固件库的 STM32 工程创建,经过一段时间的研究,初步了解了相关的知识,所以打算用两篇博文分别介绍 STM32 的固件库和基于固件库的 STM32 工程组成及原因。

一、固件库的来历

  做过51单片机开发的朋友可能知道,大多数时候我们可以通过直接操作单片机的寄存器来实现对单片机的控制。但是对于STM32这种级别的MCU来说,寄存器有上百个,组合出的功能更是数不胜数。因此,意法半导体(ST)发布了针对MCU的固件库,将底层对于寄存器的操作进行封装,并未开发人员提供函数接口。开发人员通过调用固件库中的相应函数便可以实现特定的功能,从而大大地简化了开发难度。

二、STM32F10x固件库(V3.5)简介

 在意法半导体官网上我们可以下载到特定MCU的固件库。解压后打开文件夹我们可以看到如图的文件。
在这里插入图片描述
 其中 ,Libaraies为固件库的核心,包含了对于芯片及其外设操作的各种文件,每个项目都会用到此文件内的文件;Project为ST官方提供的一些固件实例和模板;Utilities为官方评估板的一些对应源码。下面对每个文件内的文件进行详细的解释:

1、Libraries文件夹

打开Libraries文件键我们看到如下文件:
在这里插入图片描述
CMSIS内包含的是与芯片操作相关的文件。
 打开CMSIS,里面包含一个CM3文件夹和几个说明文档(Document文件夹和htm文件,英文的,能看懂就看看,看不懂就忽略),之所以命名为CM3是因为STM32F10x系列MCU采用的是ARM公司的Cortex-M3内核,由此可以想到此文件内是与芯片内核相关的文件。
 打开CM3文件夹,里边包含两个文件夹,即
在这里插入图片描述
 CoreSupport文件夹见名知义,为核心支持文件,即Cortex-M3内核工作所需文件。文件夹内包含两个文件 Core_cm3.c 和 Core-cm3.h,分别为源代码和头文件(关于源代码和头文件,即.c 和.h文件的区别,可参考http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html。这两个文件由ARM公司提供,是M3内核的接口,我们不需要改动这个文件,了解它的功能即可 。
 DeviceSupport文件夹命名为设备支持,根据本人的理解,此处的设备支持主要是指对MCU的支持。一个完整的STM32 MCU包括ARM公司提供的内核设计,即Cortex-M3;还包括芯片制造商(对于STM即为意法半导体)围绕内核设计的相关组件,即
STM32F10x固件库简介_第1张图片
 对于内核的支持上文已经提到了,此处的设备支持指的就是对内核外围设备及整个芯片的支持。
一直打开到最后,出现如图文件
STM32F10x固件库简介_第2张图片
 startup文件夹内提供了针对不同平台不同类型芯片的启动文件,使用时根据自己的实际情况,选取其中一个即可。
 stm32f10x.h头文件是整个固件库的入口文件,在我们项目文件中第一个要包含的就是这个头文件。它包含相当多的结构体以及宏定义,还有对系统寄存声明等文件。它的目的就是在将库函数的各种声明定义引入开发人员的项目,供项目中的库函数使用。
 system_stm32f10x.c和.h文件,一头一源,主要目的就是设置系统以及总线的时钟。可以理解为,startup文件将芯片进行启动,之后调用system文件中的相关函数对芯片进行初始化设置。
STM32F10x_StdPeriph_Driver文件夹包含的是芯片功能操作的文件
打开文件夹,里边包含inc和src两个文件夹,src内包含的是所有.c文件,而inc文件夹内包含的是与之对应的.h文件。我们打开其中一个进行查看
STM32F10x固件库简介_第3张图片
 从文件命名我们就可以看出,这些文件主要是对芯片各种功能操作的封装,它是固件库设计目的的体现,也是我们在开发中关系最密切的文件。比如stm32f10x_gpio文封装了对芯片GPIO的操作;stm32f10x_adc则封装了对芯片数模转换的操作。我们在实际使用时,只需要在工程中引入相应的文件,然后便可以调用其中的函数来完成不同的操作,是不是比直接操作寄存器要简单的多。

 至于Project是ST官方提供的一些使用固件库开发的例程和项目模板,我们在开发时想要使用某一功能可能第一个想到的是去百度,而不是去看例程,所以这个文件夹对我们这些菜鸟级开发者来说用处不大。而Utilities则是一些官方评估板的源码,跟我们就更没多大关系了。

对于固件库的介绍就到此为止,文章内容来源于正点原子的《stm32开发手册》和网上的一些资料,由个人理解整理而来,如果有错误欢迎大佬们指正。下一篇将介绍如何使用固件库建立工程,其中哪些文件是必须的,哪些是要选择的,并给出解释,欢迎捧场。

你可能感兴趣的:(STM32)