STM32标准外设库的文件结构解析

发布者:DreamyMoon最新更新时间:2024-08-21 来源: elecfans关键字:STM32  标准外设库  文件结构 手机看文章 扫描二维码
随时随地手机看文章

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


1.1 基于标准外设库的软件开发

1.1.1 STM32标准外设库概述

STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,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 使用标准外设库开发的优势

简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。


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

在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的3.5版本,开发环境中自带的标准外设库为2.0.3版本,本书中以比较稳定而且较新的V3.4版本为基础介绍标准外设库的结构。


可以从ST的官方网站下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图 5?3所示。3.0以上版本的文件结构大致相同,每个版本可能略有调整。

STM32标准外设库的文件结构解析

图 5?3 STM32F10XXX V3.4标准外设库文件结构

表 5?4中介绍了每个文件夹所包含的主要内容。

表 5?4 STM32F10XXX V3.4标准外设库文件夹描述

STM32F10x_StdPeriph_Lib_V3.4.0

_htmresc

本文件夹包含了所有的html页面资源

Libraries

CMSIS

见表 5?6

STM32F10x_StdPeriph_Driver

inc

标准外设库驱动头文件

src

标准外设库驱动源文件

Project

Examples

标准外设库驱动的完整例程

Template

MDK-ARM

KEIL RVMDK的项目模板示例

RIDE

Raisonance RIDE的项目模板示例

EWARM

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所示。

STM32标准外设库的文件结构解析

图 5?4 STM32F10xxx标准外设库体系结构

表 5?5 文件功能说明

文件名

功能描述

具体功能说明

core_cm3.h

core_cm3.c

Cortex-M3内核及其设备文件

访问Cortex-M3内核及其设备:NVIC,SysTick等

访问Cortex-M3的CPU寄存器和内核外设的函数

stm32f10x.h

微控制器专用头文件

这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等

system_stm32f10x.h

system_stm32f10x.c

微控制器专用系统文件

函数SystemInit,用来初始化微控制器

函数Sysem_ExtMemCtl,用来配置外部存储器控制器。它位于文件startup_stm32f10x_xx.s /.c,在跳转到main前调用

SystemFrequncy,该值代表系统时钟频率

startup_stm32f10x_Xd.s

编译器启动代码

微控制器专用的中断处理程序列表(与头文件一致)

弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖) 该文件是与编译器相关的

stm32f10x_conf.h

固件库配置文件

通过更改包含的外设头文件来选择固件库所使用的外设,在新建程序和进行功能变更之前应当首先修改对应的配置。

stm32f10x_it.h

stm32f10x_it.c

外设中断函数文件

用户可以相应的加入自己的中断程序的代码,对于指向同一个中断向量的多个不同中断请求,用户可以通过判断外设的中断标志位来确定准确的中断源,执行相应的中断服务函数。

stm32f10x_ppp.h

stm32f10x_ppp.c

外设驱动函数文件

包括了相关外设的初始化配置和部分功能应用函数,这部分是进行编程功能实现的重要组成部分。

Application.c

用户文件

用户程序文件,通过标准外设库提供的接口进行相应的外设配置和功能设计。

2. 基于CMSIS标准的软件架构

根据调查研究,软件开发已经被嵌入式行业公认为最主要的开发成本。对于ARM公司来说,一个ARM内核往往会授权给多个厂家,生产种类繁多的产品,如果没有一个通用的软件接口标准,那么当开发者在使用不同厂家的芯片时将极大的增加了软件开发成本,因此,ARM与Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER和ST等诸多芯片和软件厂商合作,将所有Cortex芯片厂商产品的软件接口标准化,制定了CMSIS标准。此举意在降低软件开发成本,尤其针对新设备项目开发,或者将已有软件移植到其他芯片厂商提供的基于Cortex处理器的微控制器的情况。有了该标准,芯片厂商就能够将他们的资源专注于产品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。

如图 5?5所示,基于CMSIS标准的软件架构主要分为以下4层:用户应用层、操作系统及中间件接口层、CMSIS层、硬件寄存器层。其中CMSIS层起着承上启下的作用:一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。也正是如此,CMSIS层的实现相对复杂。

STM32标准外设库的文件结构解析

图 5?5 CMSIS标准的软件架构

层主要分为以下3 个部分:

(1) 核内外设访问层(CPAL,Core Peripheral Access Layer):该层由ARM 负责实现。包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。由于对特殊寄存器的访问以内联方式定义,所以针对不同的编译器ARM 统一用来屏蔽差异。该层定义的接口函数均是可重入的。

(2) 片上外设访问层(DPAL, Device Peripheral Access Layer):该层由芯片厂商负责实现。该层的实现与CPAL 类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL 层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。

(3) 外设访问函数(AFP, Access Functions for Peripherals):该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。

对一个Cortex-M 微控制系统而言,CMSIS 通过以上三个部分实现了:

l 定义了访问外设寄存器和异常向量的通用方法;

l 定义了核内外设的寄存器名称和核异常向量的名称;

l 为RTOS 核定义了与设备独立的接口,包括Debug 通道。

这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进

行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。CMSIS中的具体文件结构如表 5?6所示。

表 5?6 CMSIS文件夹结构

CMSIS

Core

Documentation

CMSIS文档

CM3

Startup

arm

MDK ARM编译器启动文件

startup_stm32f10x_hd.s: 大容


关键字:STM32  标准外设库  文件结构 引用地址:STM32标准外设库的文件结构解析

上一篇:STM32 RTC实时时钟(一)
下一篇:基于STM32定时器输入捕获解析

推荐阅读最新更新时间:2024-11-02 00:11

STM32—RCC时钟
前言: 最近在调试STM32L152芯片,本文总结下STM32L152的RCC时钟配置方法。 硬件平台:STM32L152 软件平台:keil v5+cubeMX 函数库:HAL库 内容: RCC:Reset and Clock Control,复位与时钟控制系统。系统复位有三种:系统复位、电源复位、RTC domain复位。复位内容本文暂不详解,本文重点详解Clock Control部分。下面看下STM32L152芯片的时钟框图和cubeMX软件中的时钟框图。 如上图所示,在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI:High Speed Internal,
[单片机]
<font color='red'>STM32</font>—RCC时钟
STM32的SPI时钟
1)fPCLK不是CPU频率,而是外设总线的频率。 2)STM32的SPI时钟最快是18MHz,这是芯片设计时决定的。 3)STM32的SPI1在APB2上,SPI2和SPI3在APB1上,APB1的最高频率是36MHz,APB2的最高频率是72MHz;因此,为了不超过最高18MHz的设计要求,配置SPI2和SPI3时可以使用fPCLK/2的选项,而配置SPI1时则不能使用fPCLK/2的选项。
[单片机]
使用STM32固件操作控制LED灯(CMSIS)(STM32_03)
直接使用寄存器地址来进行STM32开发要对每一个寄存器的地址通过查找芯片手册,对每一个寄存器的各个位的含义也要查清楚,然后决定对那个地址的哪些位进行怎样的设置。这种编程效率低,程序的可移植性差,程序的可读性差。 一、CMSIS 基于cortex系列的处理器内核都是一样的,区别在于除内核以外的外设的差异,由于这些差异,导致不同处理器移植起来比较麻烦,所以ARM与芯片厂商建立了CMSIS标准。ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller SoftwareInterface Standard) 。 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层,使用CMSIS
[单片机]
使用<font color='red'>STM32</font>固件<font color='red'>库</font>操作控制LED灯(CMSIS)(STM32_03)
STM32高级开发(10)-搭架你自己的libopencm3工程
在上一篇中,我们介绍了下载和使用libopencm3固件库的官方例程,同时我们也介绍了官方历程中的makefile等文件结构和引用方式,不知道大家注意到没有,实际上在我们使用的makefile中的目标里,是有flash等通过调试器下载的操作的,但是由于在rules.mk的文件下存在一些错误,所以可能工作并不正常。而且在我们实际的使用中不会涉及到那么多的MCU型号和开发板,所以在这篇中我们就来教大家,改写官方样例工程的makefile文件,来搭架自己的工程。 下参考我的样板工程 首先,同样的,cd进入工作目录,下载我再GitHub上托管的工程,并更新下载其中libopencm3的自模块,并编译libopencm3库。 $ c
[单片机]
使用IAR+Jlink开发STM32关于下载Flash的一点发现
1、使用Jlink下载程序的使用,没有进行Flasah整片擦除, 2、基于1, 出现以下这种情况, 当第一次下载一个较大程序例如30k, 第二次下载一个小程序例如10k, 那么 第二次下载后,Flash区域有20K的Flash区域不是0XFF,而且是没有意义的数据 以上两点已得到证实
[单片机]
stm32基础知识学习——系统架构及时钟
1.stm32系统架构 stm32主要由两个主模块和四个从模块构成 1 二个主模块 : Cortex-M0 内核及先进高性能总线(AHB bus) 通用DMA ( GP-DMA – general-purpose DMA) 2 四个从模块 : 内部SRAM 内部闪存存储器 AHB 到APB 的桥, 所有的外设都挂在APB 总线上 专门用于连接GPIO 口的AHB2 内部由一个多层AHB 互联的系统总线 从上图中可以看出UART,I2C,RTC这些外设都是连接再APB总线上的,所以这些设备也就ABP外设
[单片机]
<font color='red'>stm32</font>基础知识学习——系统架构及时钟
STM32 AM2305高精度温湿度传感器驱动
最近用到的温湿度传感器,AM2305驱动,单总线,上电后至少要延时2S才能读取温湿度,温度精度很高,跟DS18B20一样,数据带校验,不会出现DS18B20那样,并且时序要求不高 /************************************************************************************************************* * 文件名: AM2305.c * 功能: STM32 AM2305高精度温湿度传感器驱动 * 作者: cp1300@139.com * 创建时间: 2014-09-20 * 最后
[单片机]
STM32 定时器中断配置心得【自用】
1.IO配置 略 2.TIM配置 void TIM2_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period =359999; TIM_TimeBaseStructure.TIM_Prescaler = 99; TIM_TimeBas
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved