第六章 STM32库函数架构剖析 (1)
6.1 STM32库函数到底是什么 (1)
6.2 STM32库函数的好处 (2)
6.3 千人大项目如何分配工作 (2)
6.4 STM32库结构剖析 (3)
6.4.1 CMSIS标准 (3)
6.4.2 库目录,文件简介 (4)
6.4.3 关于core_cm3.c文件 (5)
6.4.4 system_stm32f10x.c文件 (6)
6.4.5 stm32f10x.c文件 (7)
6.4.6 启动文件 (7)
6.4.7 STM32F10x_StdPeriph_Driver文件夹 (9)
6.4.8 stm32f10x_it.c、 stm32f10x_conf.件 (10)
6.4.9 库各文件间的关系 (11)
6.4.10 常用官方资料 (13)
6.4.11 库函数帮助文档使用 (13)
第六章 STM32库函数架构剖析
本章通过简单介绍STM32库的各个文件及其关系,让读者建立STM32库的概念,看完后对库有个总体印象即可,在后期实际开发时接触了具体的库时,再回头看看这一章,相信你对STM32库又会有一个更深刻的认识。
6.1STM32库函数到底是什么
STM32的库函数是ST公司已经封装好一个软件封装库,也就是很多基础的代码,在开发产品的时候只需要直接调用这个ST库函数的函数接口就可以完成一系列工作;例如,你
原来要自己烧饭洗衣服,现在ST库函数就好像一个保姆,你只需要使唤一声就有饭吃,有干净的衣服了。
6.2STM32库函数的好处
在51单片机的程序开发中,我们直接配置51单片机的寄存器,控制芯片的工作方式,如中断,定时器等。配置的时候,我们常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置1还是置0。这些都是很琐碎的、机械的工作,因为51单片机的软件相对来说较简单,而且资源很有限,所以可以直接配置寄存器的方式来开发。
STM32库是由ST公司针对STM32提供的函数接口,即API (Application Program Interface),开发者可调用这些函数接口来配置STM32的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。
当我们调用库的API的时候可以不用挖空心思去了解库底层的寄存器操作,就像当年我们学习C语言的时候,用prinft()函数时只是学习它的使用格式,并没有去研究它的源码实现,如非必要,可以说是老死不相往来。
实际上,库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。
6.3千人大项目如何分配工作
其实大多数项目产品研发都是用类似库函数的方式进行分解的,如果有1000个开发人员来负责开发板windows操作系统,那么怎么做?一定是有一人负责最底层的硬件级,寄存器的读写封装,包括显示器的点亮,图形刷写;然后另外一人根据底层这人提供的接口,同步做二次开发。
所以库函数的理念完全被广泛应用于各种实际的项目和产品中,因为这样才可以使得多
人协同工作,才能做更大的项目产品。
6.4STM32库结构剖析
6.4.1CMSIS标准
我们知道由ST公司生产的STM32采用的是Cortex-M3内核,内核是整个微控制器的CPU。该内核是ARM公司设计的一个处理器体系架构。ARM公司并不生产芯片,而是出售其芯片技术授权。ST公司或其它芯片生产厂商如TI,负责设计的是在内核之外的部件,被称为核外外设或片上外设、设备外设。如芯片内部的模数转换外设ADC、串口UART、定时器TIM等。内核与外设,如同PC上的CPU与主板、内存、显卡、硬盘的关系:
因为基于Cortex的某系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准(Cortex MicroController Software Interface Standard)。
所谓CMSIS标准,实际是新建了一个软件抽象层。见下图:
CMSIS标准中最主要的为CMSIS核心层,它包括了:
z内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供
z设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供
可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是有极大的好处的。STM32的库,就是按照CMSIS标准建立的。
6.4.2库目录,文件简介
STM32的3.5版库可以从获得,也可以直接从本书的附录光盘得到。本书主要采用最新版的3.5库文件,在高级篇的章节有部分代码是采用3.0的库开发的,因为3.5与3.0的库文件兼容性很好,对于旧版的代码我们仍然使用用3.0版的。
解压后进入库目录:stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0
各文件夹内容说明见图:system的头文件
Libraries文件夹下是驱动库的源代码及启动文件。
Project 文件夹下是用驱动库写的例子跟一个工程模板。
还有一个已经编译好的HTML文件,是库帮助文档,主要讲的是如何使用驱动库来编写自己的应用程序。
说得形象一点,这个HTML就是告诉我们:ST公司已经为你写好了每个外设的驱动了,想知道如何运用这些例子就来向我求救吧。不幸的是,这个帮助文档是英文的,这对很多英文不好的朋友来说是一个很大的障碍。但要告诉大家,英文仅仅是一种工具,绝对不能让它成为我们学习的障碍。其实这些英文还是很简单的,我们需要的是拿下它的勇气。
网上流传有一份中文版本的库帮助文档,但那个是2.x版本的,但3.x以上版本的目录结构和库函数接口跟2.x版本的区别还是比较大的,这点大家要注意下。
在使用库开发时,我们需要把libraries目录下的库函数文件添加到工程中,并查阅库帮助文档来了解ST提供的库函数,这个文档说明了每一个库函数的使用方法。
进入Libraries文件夹看到,关于内核与外设的库文件分别存放在CMSIS和
STM32F10x_StdPeriph_Driver文件夹中。
Libraries\CMSIS\CM3文件夹下又分为CoreSupport和DeviceSupport文件夹。
6.4.3关于core_cm3.c文件
在CoreSupport中的是位于CMSIS标准的核内设备函数层的M3核通用的源文件core_cm3.c和头文件core
_cm3.h,它们的作用是为那些采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口。这两个文件在其它公司的M3系列芯片也是相同的。至于这些功能是怎样用源码实现的,我们可以不用管它,我们只需把这个文件加进我们的工程文件即可,有兴趣的朋友可以深究。
core_cm3.c文件还有一些与编译器相关条件编译语句,用于屏蔽不同编译器的差异,我

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。