好文档 - 专业文书写作范文服务资料分享网站

STM32固件库详解

天下 分享 时间: 加入收藏 我要投稿 点赞

STM32固件库详解

最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,

最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便 于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我 理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉 你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很 大的局限性,具体不足欢迎指正。 1.1基于标准外设库的软件开发 1.1.1 STM32标准外设库概述

STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程 序、数据结构和宏组成,包括了微控制器所有外设的性能特征。 的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间 无需深入掌握底层硬件细节, 开发者就可以轻松应用每一个外设。 组函数覆盖了该外设所有功能。每个器件的开发都由一个通用 ng

in terface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 ST公司2007年10月发布了 V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。2008 年6月发布了 V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用 V2.0 版本的固件库。V3.0以后的版本相对之前的版本改动较大, 本书使用目前较新的 V3.4版本。 1.1.2使用标准外设库开发的优势

简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件 细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从 I2C、SP、UART和ADC等等的所有标准外设。对应的 开发和应用。

1.1.3 STM32F10XXX标准外设库结构与文件描述

1.标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势, 因此对标准外设库的熟悉程度直接

影响到程序的编写,下面让我们来认识一下 为2.0.3版本,本书中以比较稳定而且较新的

STM32F10XXX的标准外设库。 STM32F10XXX的

3.5版本,开发环境中自带的标准外设库

3.4版本标准外设库的文

V3.4版本为基础介绍标准外设库的结构。

标准外设库经历众多的更新目前已经更新到最新的

GPIO到定时器,再到 CAN、

C源代码只是用了最基本的

C编程的

该函数库还包括每一个外设 API,通过使用固件函数库,

因此,使用固态函数库可

API (applicati on programmi

以大大减少用户的程序编写时间, 进而降低开发成本。 每个外设驱动都由一组函数组成,

知识,所有代码经过严格测试, 易于理解和使用,并且配有完整的文档,非常方便进行二次

可以从ST的官方网站下载到各种版本的标准外设库,首先看一下

件结构,如图 5-3所示。3.0以上版本的文件结构大致相同,每个版本可能略有调整。

首上 STM 32F 10x.£ldPe6ph,U b,U3A0

!. _htmr

;!

Libraries.

e A CMSIS

I a-1 cm! ardSvpRrf OtviceSuppor^

& ST

-,

p j.卡 rm gcc_nde7 ,.TrueSHJDlO

D&eum?nt>!ion

9 拙 IT M

j., tnc

10x_$td t>en p h .Driver

T Pvojeci

t J、STK132f lOw^&td^riph^E ■: jmples

*

$T M )2f l(hc_Std Pie-rip h_T trnpi^te

亠:” UtflitiM

? “ STMJ2.EVAL

Common .STM521O& EVAL

卜 STM321DC.EVAL

? STM3210E.EVAL i. STM321W&.EVAL L?艙斑《嶄戒戸「母客

_

图5-3 STM32F10XXX V3.4标准外设库文件结构 表5-4中介绍了每个文件夹所包含的主要内容。 表5-4 STM32F10XXX V3.4标准外设库文件夹描述 STM32F10x_StdPeriph_Lib_V3.4.0 _htmresc Libraries STM32F10x_StdPeriph_Driver src CMSIS inc 标准外设库驱动源文 件 Examples MDK-ARM Raiso nance RIDE 的项 目模板示例 本文件夹包含了所有的 html页面资 源 见表5-6 标准外设库驱动头文件 Project Template RIDE EWARM 标准外设库驱动的完整例程 KEIL RVMDK的项目模板示例 IAR EWARM的项目模 板示例 本文件夹包含了用于 Utilities STM3210-EVAL STM3210B-EVAL 禾口 STM3210E-EVAL 评估板的专用驱动 标准外设库的第一部分是 CMSIS和STM32F10x_StdPeriph_Driver, CMSIS是独立于供应商的 Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接

口,简化了软件复用工作,降低了 对应包括了所有外设对应驱动函数, 调用的函数接口,供开发者使用。

Cortex-M上操作系统的移植难度,并减少了新入门的微

STM32F10x_StdPeriph_Driver则包括了分别

这些驱动函数均使用 C语言编写,并提供了统一的易于 Project文件夹中则包括了 ST官方的所有例程和基于不同

STM32的重要参考。Utilities包含了相关评估板

很多驱动函数同样可以作为学习

控制器开发者的学习曲线和新产品的上市时间。

编译器的项目模板,这些例程是学习和使用

的示例程序和驱动函数,供使用官方评估板的开发者使用, 的重要参考。

STM32F10xxx标准外设库体系结构如图 的联系,各文件的具体功能说明如表

5-4所示。图中很好的展示了各层以及具体文件之间 5-5所示。

P㈣YK治1 by ARM

■ on

WE\◎誣典命m应才毎自

图5-4 STM32F10xxx标准外设库体系结构 表5-5文件功能说明 文件名 功能描述 具体功能说明 访问Cortex-M3内核及其设备: core_cm3.h core_cm3.c Cortex-M3内核及其 等 设备文件 访问Cortex-M3的CPU寄存器和内核外设的函 数 NVIC, SysTick 这个文件包含了 STM32F10X全系列所有外设寄 存stm32f10x.h 微控制器专用头文 件 器的定义(寄存器的基地址和布局) 义、中断向量表、存储空间的地址映射等 system stm32f10x.h 、位定 微控制器专用系统 函数SystemInit,用来初始化微控制器 system_stm32f10x.c 文件 函数Sysem_ExtMemCtl,用来配置外部存储器 控制器。它位于文件 startup_stm32f10x_xx.s /.c,在跳转到main前调用 SystemFrequ ncy,该值代表系统时钟频率 微控制器专用的中断处理程序列表 startup_stm32f10x_Xd.s 编译器启动代码 一致) 弱定义(Weak)的中断处理程序默认函数(可以 被用户代码覆盖)该文件是与编译器相关的 通过更改包含的外设头文件来选择固件库所 使用的stm32f10x_co nf.h 固件库配置文件 外设,在新建程序和进行功能变更之前 应当首先修改对应的配置。 用户可以相应的加入自己的中断程序的代码, 对于stm32f10x_it.h stm32f10x_it.c 外设中断函数文件 指向同一个中断向量的多个不同中断请 求,用户可以通过判断外设的中断标志位来确 定准确的中断源,执行相应的中断服务函数。 stm32f10x_ppp.h stm32f10x_ppp.c 包括了相关外设的初始化配置和部分功能应 用函数,这部分是进行编程功能实现的重要组 成部分。 用户程序文件,通过标准外设库提供的接口进 行相应的外设配置和功能设计。 (与头文件 外设驱动函数文件 Applicati on.c 用户文件 2.基于CMSIS标准的软件架构

根据调查研究,软件开发已经被嵌入式行业公认为最主要的开发成本。 么当开发者在使用不同厂家的芯片时将极大的增加了软件开发成本, 作,将所有 Cortex芯片厂商产品的软件接口标准化,制定了 低软件开发成本,尤其针对新设备项目开发,

对于ARM公司来说,

因此,ARM

CMSIS标准。此举意在降

一个ARM内核往往会授权给多个厂家,生产种类繁多的产品,如果没有一个通用的软件接 口标准,那与 Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGEF和 ST等诸多芯片和软件厂 商合

或者将已有软件移植到其他芯片厂商提供的基

互相不兼容的标

4层:用户应用层、操作系统及

于Cortex处理器的微控制器的情况。有了该标准,芯片厂商就能够将他们的资源专注于产 品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、 准的需求,从而达到降低开发成本的目的。

如图5-5所示,基于CMSIS标准的软件架构主要分为以下 寄存器层进行统一实现,屏蔽了不同厂商对

中间件接口层、CMSIS层、硬件寄存器层。其中 CMSIS层起着承上启下的作用:一方面该层 对硬件

Cortex-M系列微处理器核内外设寄存器

简化了应用

也正是如此,CMSIS

的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口, 程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。 层的实现相对复杂。

州户

应用堆f?

图5-5 CMSIS标准的软件架构 层主要分为以下3个部分:

(1)核内外设访问层(CPAL Core Peripheral Access Layer):该层由 ARM负责实现。包括对 寄存器名称、地址的定义,对核寄存器、 寄存器的访问接口(例如:

NVIC、调试子系统的访问接口定义以及对特殊用途

CONTROL xPSR)定义。由于对特殊寄存器的访问以内联方式定

义,所以针对不同的编译器 ARM统一用来屏蔽差异。该层定义的接口函数均是可重入的。

⑵片上外设访问层(DPAL, Device Peripheral Access Layer):该层由芯片厂商负责实现。该 层的实现

与 CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用

CPAL层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断 请求。

⑶ 外设访问函数 (AFR Access Functions for Peripherals):该层也由芯片厂商负责实现,

是提供访问片上外设的访问函数,这一部分是可选的。

对一个Cortex-M微控制系统而言,CMSIS通过以上三个部分实现了: I定义了访问外设寄存器和异常向量的通用方法; I定义了核内外设的寄存器名称和核异常向量的名称; I为RTOS核定义了与设备独立的接口,包括

Debug通道。

这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进 行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。 的具体文件结构如表 5-6所示。 表5-6 CMSIS文件夹结构 CMSIS 主要

CMSIS中

Core Docume ntati on CMSIS 文 档

STM32固件库详解

STM32固件库详解最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量
推荐度:
点击下载文档文档为doc格式
5k93933ohw7b3ef97wu606i7k4fff900zje
领取福利

微信扫码领取福利

微信扫码分享