STM32固件库详解

合集下载

STM32固件库使用手册

STM32固件库使用手册

STM32固件库使用手册随着嵌入式系统在各个领域的越来越广泛的应用,各种芯片和处理器的类型也逐渐增多。

在这些芯片中,ST公司的STM32系列尤其受到了大量开发者们的追捧,其功能强大、性能优越、可编程性高等优点使得其成为了嵌入式系统设计的首选。

在STM32系列芯片中,固件库是其重要的组成部分,提供了独立的硬件抽象层和应用程序接口。

这些功能丰富的API库可用于快速搭建程序架构,以及简便地实现一些常见的操作。

节省开发人员大量的开发时间。

对于初学者,欲了解STM32芯片开发的话,学习STM32固件库的使用是第一步,因此在这里我将分享一些该库的基础内容。

一、固件库的启用在使用STM32固件库之前,我们需要先了解如何启用它。

首先,在安装Keil或IAR等IDE环境后,我们需要将官方提供的固件库下载到本地,并将其解压。

解压后,将库文件夹中的 inc 和src 文件夹添加至Keil或IAR的相关项目目录中,从而ermöglichen 制定了。

接下来,在IDE环境中选择对应的芯片,我们需要设置相关的固件库路径。

具体来说,我们打开Keil或IAR的属性管理器,设置 C/C++ -> Directories 中的 Include Paths 为stm32f10x_stdPeriph_driver/inc,设置配置管理器中的包含路径为上述inc文件夹的全路径。

这样就可以启用了 STM32 固件库,开始进行我们的嵌入式系统开发。

二、基础应用程序在信息时代的今天,眼前各种各样的计算机系统和程序都涌现在眼前。

但是无论是最基础的窗口显示,还是复杂的人脸识别技术,都需要一些基本的芯片和系统支持,而 STM32 芯片就是这一系统之一。

其基础应用程序包括了:GPIO 端口配置:GPIO(PIN)模式配置、输出配置、输入配置。

其中GPIO(PIN)模式配置是对GPIO端口输出模式进行设置,包括推挽、开漏等多种模式,GPIO口的作用是用于输入/输出操作。

STM32固件库说明

STM32固件库说明

STM32固件库说明
l版本:v2.0.3l发布时间:09/22/2008
l功能::给出了STM32微控制器片内所有外设的驱动函数,使用户把更多的时间花在应用程序的开发上,以加快产品上市时间。

(实质上是将各种寄存
器的参数配置定义成宏,并以结构体的方式给寄存器赋值,这样既方便又易懂)
l特点:
由函数、数据结构和宏组成,包括了微控制器所有外设的功能特征,还包括了每个外设的驱动描述和应用实例按照ANSI-C编写的,不受开发环境的影响,仅启动文件取决于开发环境(即程序和数据在寄存器中是如何配置的得根据所使用的开发环境),非常易于移植。

每个外设驱动都由一组函数组成,这组函
数覆盖了该外设所有功能。

函数和参数名称都进行了标准化(函数名就代表了该函数的功能,即见名可知其义)STM32固件库组成
STM32firmwarelibraryv2.0.3包含如下4个内容
resc;stm32lib_contents.htm;version是对库进行说明的文件
在文件夹STM32F10xFirmwareLibrary(FWLib)下,包含3个文件夹
──文件夹examples
对应STM32的每个外设,都包含一个文件夹,这些子文件夹包含了整套源
文件,来示范如何使用对应外设有:
main.c:例程主函数
stm32f10x_int.c:包含了所有中断服务程序(未使用的中断,则其函数体为空)
stm32f10x_int.h:该头文件包含了所有的中断服务程序函数的原型。

认识固件库(一)

认识固件库(一)

认识固件库(⼀)我们使⽤STM32固件库,就需要了解官⽅提供的固件库包结构。

⽂件夹介绍:固件库包的Libraries下有CMSIS和STM32F10x-StdPeriph-Driver两个⽬录,这其中包含了所以固件库核⼼的所有⼦⽂件夹河⼦⽂件。

STM32F10x-StdPeriph-Driver//⽬录下为固件库源代码;CMSIS //启动⽂件,有inc和src两⽂件夹,放置stm32f10x-xxx.h和stm32f10x-xxx.c,每个外设对应⼀个⽂件;Project //存放ST官⽅提供实例源码;⽂件介绍:core-cm3.c core-cm3.h //提供进⼊Cortex-M3内核接⼝,Coresupport⽬录下system-stm32f10x.c system-stm32f10x.h //设置系统以及时钟总线,DeviceSupport⽬录下stm32f10x.h //多结构体以及宏定义,DeviceSupport⽬录下startup-stm32f10x-ld.sstartup-stm32f10x-md.sstartup-stm32f10x-hd.s //对于103系列主要有三个启动⽂件分别为⼩、中、⼤容量启动⽂件主要是进⾏堆栈之类的初始化、中断向量表以及中断函数定义。

启动⽂件要引导进⼊main函数。

Rest-Handler 中断函数是唯⼀实现的中断处理函数,其他的中断函数基本是死循环:Rest handlerReset-Handler PROCEXPORT Reset-HandlerIMPORT --mainIMPORT SystemInitLDR R0,=SystemInitBLX R0LDR R0,=--mainBX R0ENDP如上这段代码在系统启动之后,⾸先调⽤SystemInit系统初始化函数,再进⼊main函数。

STM32固件库的学习(重要要常看)

STM32固件库的学习(重要要常看)

1. stm32的编程中,在stdperiph_drive中添加的文件是干什么用的啊?因为STM32 版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了中,实际上是代替原来的。

2. STM32F10XXX 标准外设库文件夹描述标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project 文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。

3.文件功能说明4.CMSIS文件夹结构在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库(StdPeriph_Lib):(1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。

用户只需要配置文件””,并使用相应的文件”.c”即可。

(2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。

5. STM32F10XXX标准外设库的使用标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。

STM32固件库详解

STM32固件库详解

STM32固件库详解1.1 基于标准外设库的软件开发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以上版本的文件结构大致相同,每个版本可能略有调整。

标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

STM32 固件库的使用

STM32 固件库的使用

2012-03-14 10:40iar for stm32 固件库的学习笔记系统、源程序文件和头文件命名都以“stm32f10x-”作为开头寄存器作为常量处理外设函数的命名以外设的缩写加下划线开头每个单词的开头字母大写每个函数名只有一个下划线分隔外设缩写和函数名的其他部分ppp_Init :::根据PPP_InitTypeDef中指定的参数,初始化外设PPP。

PPP_DeInit::::复位外设PPP的所有寄存器至缺省值PPP_StructInit :::其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能PPP_Cmd:::使能或失能外设PPPPPP_ITConfig:::为使能或者失能来自外设PPP某中断源PPP_DMAConfig:::失能或者使能外设PPP的DMA接口用以配置外设功能的函数总是以字符串“Config”结尾PPP_GetFlagStatus:::检查外设PPP某标志位被设置与否PPP_ClearFlag:::清楚外设PPP标志位PPP_GetITStatus:::判断来自外设PPP的中断发生与否PPP_ClearITPendingBit:::清除外设PPP中断待处理标志位typedef signed long s32;typedef signed short s16;typedef signed char s8;typedef signed long const sc32; /* Read Only */typedef signed short const sc16; /* Read Only */typedef signed char const sc8; /* Read Only */typedef volatile signed long vs32;typedef volatile signed short vs16;typedef volatile signed char vs8;typedef volatile signed long const vsc32; /* Read Only */ typedef volatile signed short const vsc16; /* Read Only */ typedef volatile signed char const vsc8; /* Read Only */ typedef unsigned long u32;typedef unsigned short u16;typedef unsigned char u8;typedef unsigned long const uc32; /* Read Only */typedef unsigned short const uc16; /* Read Only */typedef unsigned char const uc8; /* Read Only */typedef volatile unsigned long vu32;typedef volatile unsigned short vu16;typedef volatile unsigned char vu8;typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile unsigned short const vuc16; /* Read Only */ typedef volatile unsigned char const vuc8; /* Read Only */stm32f10x_type.h文件中布尔型变量typedef enum{FALSE = 0,TRUE = !FALSE} bool;标志位状态类型 SET & RESETtypedef enum{RESET = 0,SET = !RESET} FlagStatus;功能状态类型 ENABLE&DISABLEtypedef enum{DISABLE = 0,ENABLE = !DISABLE} FunctionalState;错误状态类型 SUCCESS or ERRORtypedef enum{ERROR = 0,SUCCESS = !ERROR} ErrorStatus;stm32f10x_map.h文件包含了所有外设控制寄存器的结构,下例为SPI寄存器结构的声明:/*------------------ Serial Peripheral Interface ----------------*/ typedef struct{vu16 CR1;u16 RESERVED0;vu16 CR2;u16 RESERVED1;vu16 SR;u16 RESERVED2;vu16 DR;u16 RESERVED3;vu16 CRCPR;u16 RESERVED4;vu16 RXCRCR;u16 RESERVED5;vu16 TXCRCR;u16 RESERVED6;} SPI_TypeDef;RESERVEDi(i为一个整数索引值)表示被保留区域stm32f10x_map.h函数包含了所有的外设声明,下例为spi外设的声明:#ifndef EXT#Define EXT extern#endif...#define PERIPH_BASE ((u32)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000).../* SPI2 Base Address definition*/#define SPI2_BASE (APB1PERIPH_BASE + 0x3800).../* SPI2 peripheral declaration*/#ifndef DEBUG...#ifdef _SPI2#define SPI2 ((SPI_TypeDef *) SPI2_BASE)#endif /*_SPI2 */...#else /* DEBUG */...#ifdef _SPI2EXT SPI_TypeDef *SPI2;#endif /*_SPI2 */...#endif /* DEBUG */如果用户希望使用外设SPI,那么必须在文件STM32f10x_conf.h中定义_SPI标签例如:#define _SPI#define _SPI1#define _SPI2每个外设都有若干寄存器专门分配给标志位。

嵌入式--stm32固件库

嵌入式--stm32固件库

CMSIS 通过以上三个部分实现了: a) 定义访问外设寄存器和异常向量的通用方法; b) 定义核内外设的寄存器名称和核异常向量的名称; c) 为RTOS 核定义与设备独立的接口,包括Debug 通道。


我们在使用 STM32 芯片的时候首先要进行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为SystemInit, 所以各个芯片公司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。 CMSIS 还对各个外设驱动 文件的文件名字规范化,以及函数名字规范化等等一系列规 定。
灵活的静态存储器控制器
通用输入输出 I2C接口 独立看门狗 电源/功耗控制 复位与时钟控制器 实时时钟 SDIO接口 串行外设接口 定时器 通用同步/异步收发器
WWDG
窗口看门狗




首先新建一个项目并设置工具链对应的启动文件,可以使用标准外设库 中提供的模板,也可以自己根据自己的需求新建。标准外设库中已经提 供了不同工具链对应的文件,位于 STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceS upport\ST\STM32F10x\startup目录下。 其次按照使用产品的具体型号选择具体的启动文件,加入工程。文件主 要按照使用产品的容量进行区分,根据产品容量进行选择即可。每个文 件的具体含义可以在“stm32f10x.h”文件中找到对应的说明 “stm32f10x.h”是整个标准外设库的入口文件,这个文件包含了 STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、 位定义、中断向量表、存储空间的地址映射等。为了是这个文件适用于 不同系列的产品,程序中是通过宏定义来实现不同产品的匹配的 #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) /* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */

STM32固件库介绍

STM32固件库介绍

ST固件库STM公司的官方网址为:固件下载地址可百度一下。

固件库目录下有四个文件夹:1.Project 文件夹1.1Example标准外设库驱动的完整例程1.2Template1.2.1RVMDKKEIL RVMDK的项目模板示例1.2.2EWARMv5IAR EW ARMv5的项目模板示例1.2.3RIDE2.Libraries 文件夹2.1CMSIS2.1.1DocumentationCMSIS文档2.1.2CM3CoreSupportcore_cm3.c CMSIS的Cortex-M3内核设备访问层源文件DeviceSupport/ST/STM32F10x/startup●arm ARM编译器启动文件startup_stm32f10x_ld.s 大容量产品启动文件startup_stm32f10x_md.s中容量产品启动文件startup_stm32f10x_hd.s 小容量产品启动文件●iar IAR编译器启动文件同arm●gcc GCC编译器启动文件同arm2.2STM32F10x_StdPeriph_Driver2.2.1Inc标准外设库驱动头文件2.2.2Src标准外设库驱动源文件3._htmresc 文件夹本文件夹包含了所有的html页面资源4.Utilities 文件夹4.1STM32_EV AL本文件夹包含了用于STM3210B-EV AL和STM3210E-EV AL评估板的专用驱动一些重要固件库文件:main.c 主示例函数体stm32f10x_conf.h 参数配置文件,它要求用户在运行应用程序之前对它进行修改,定义需要与库进行交互的参数。

用户可以使用模板使能或者禁能外围模块,并且可以改变外部石英振荡器的数值stm32f10x_it.h 头文件,包括所有中断处理函数原型stm32f10x_it.c 外围模块中断处理函数文件,用户可以引入在应用程序中需要使用的中断处理函数。

STM32固件库文件结构及作用详解

STM32固件库文件结构及作用详解

STM32标准外设固件库文件结构及用途文件夹树图及文件作用详述stm32f10x_stdperiph_lib_V3.5.0--------------ST 公司针对STM32提供的函数接口├─Release_Notes.html -------------------------官方网页资源├─stm32f10x_stdperiph_lib_um.chm-------------库的帮助文档 ├─stm32f10x_stdperiph_lib_um.chw ├─htmresc -----------------------------------CMSIS 内核和ST 公司Logo │ ├─CMSIS_Logo_Final.jpg │ └─logo.bmp ├─Libraries ----------------------------------固件库 │ ├─CMSIS -Cortex Microcontroller Software Interface Standard(Cortex 内核软件接口标准) │ │ ├─CMSIS debug support.htm ------------官方网页资源 │ │ ├─CMSIS_changes.htm ------------------官方网页资源 │ │ ├─License.doc │ │ ├─CM3 固件库文件夹树形图│ │ │ ├─CoreSupport----为采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口│ │ │ │ ├─core_cm3.c│ │ │ │ └─core_cm3.h│ │ │ └─DeviceSupport│ │ │ └─ST│ │ │ └─STM32F10x│ │ │ ├─Release_Notes.html│ │ │ ├─stm32f10x.h --------------------定义寄存器的地址及使用的结构体封装│ │ │ ├─system_stm32f10x.c--------------设备外设访问层,主要配置时钟频率│ │ │ ├─system_stm32f10x.h--------------配置时钟频率相应的头文件│ │ │ └─startup--------由汇编编写的系统启动文件,不同的文件对应不同的芯片型号│ │ │ ├─arm-------ARM编译器启动文件│ │ │ │ ├─startup_stm32f10x_cl.s------cl:互联型产品,stm32f105/107系列│ │ │ │ ├─startup_stm32f10x_hd.s------hd:高密度产品,FLASH大于128│ │ │ │ ├─startup_stm32f10x_hd_vl.s---vl:超值型产品,stm32f100系列│ │ │ │ ├─startup_stm32f10x_ld.s------ld:低密度产品,FLASH小于64K│ │ │ │ ├─startup_stm32f10x_ld_vl.s│ │ │ │ ├─startup_stm32f10x_md.s------md:中等密度产品,FLASH=64 or 128 │ │ │ │ ├─startup_stm32f10x_md_vl.s│ │ │ │ └─startup_stm32f10x_xl.s----xl:超高密度(容量)产品,stm32f101/103系列│ │ │ ├─gcc_ride7………………GCC编译器启动文件│ │ │ ├─iar………………………………IAR编译器启动文件│ │ │ └─TrueSTUDIO……………TrueSTUDIO编译器启动文件│ │ └─Documentation│ │ └─CMSIS_Core.htm --------------CMSIS_Core网页资源│ └─STM32F10x_StdPeriph_Driver-----------CMSIS的设备外设函数,由stm32f10x_ppp.c或 stm32f10x_ppp.h ││文件组成,PPP表示外设名称。

STM32固件库介绍

STM32固件库介绍

STM32固件库介绍前⾔本⽂以STM32F1固件库包为例,其他的⽂件夹⽬录结构⼀样的。

从官⽹下载的压缩包原名称:STM32F10x_StdPeriph_Lib_V3.5.0固件库的获取,参考⽂章:解压后出现四个⽂件夹,⼀个帮助⽂档,⼀个⽹页链接。

主要内容_htmresc⽂件夹ST公司的 LOGO 图标等,这个⽂件夹在建⽴库函数模板时⽤不上。

Libraries⽂件夹存放驱动库的源代码与启动⽂件。

这个⽂件夹很重要,我们将会⽤到⾥⾯的部分⽂件。

该⽂件夹下还有两个⼦⽂件夹:CMSIS 和STM32F10x_StdPeriph_Driver ,这两个⼦⽂件夹包含固件库核⼼的所有⼦⽂件夹和⽂件,主要包含⼤量的头⽂件、源⽂件和系统⽂件,是开发必须使⽤到的。

其中的 inc ⽂件夹和 src ⽂件夹⾥的⽂件是相互对应的。

其中,在 CM3 ⽂件夹中的 CoreSupport ⽂件夹存放的是内核访问层的源⽂件和头⽂件,它们提供进⼊ M3 内核的接⼝。

这是由 Arm 公司提供的 CMSIS 核⼼⽂件,所有 M3 内核的芯⽚都是⼀样的,永远都不需要修改。

DeviceSupport 存放⼀些启动⽂件、⽐较基础的寄存器定义以及中断向量定义的⽂件。

Project⽂件夹存放了ST官⽅⽤驱动库写的例程和⼀个⼯程模板。

STM32F10x_StdPeriph_Examples存放ST 官⽅提供的固件实例源码,⾥⾯详细介绍了 STM32F10x 外设的使⽤源代码,在以后的开发过程中,可以修改这个官⽅提供的参考实例,以快速驱动⾃⼰的外设。

我们也可以学习⼀下⾥⾯的源码。

STM32F10x_StdPeriph_Template ⼦⽬录存放的是⼯程模板。

Utilities⽂件夹存放ST公司的评估板的相关例程代码。

这个⽂件夹对于我们建⽴库函数模板没有帮助。

stm32f10x_stdperiph_lib_um.chm这个是编译过的html⽂件,在后⾯的开发中都要⽤到,⾥⾯有很多规范,其重要性和作⽤不亚于PDF版的参考⼿册。

STM32固件库详细解析0925

STM32固件库详细解析0925

最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。

本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。

我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。

1.1.1 STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。

STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的3.5版本,开发环境中自带的标准外设库为2.0.3版本,本书中以比较稳定而且较新的V3.4版本为基础介绍标准外设库的结构。

可以从ST的官方网站下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图5-3所示。

3.0以上版本的文件结构大致相同,每个版本可能略有调整。

图5-3 STM32F10XXX V3.4标准外设库文件结构表5-4中介绍了每个文件夹所包含的主要内容。

表5-4 STM32F10XXX V3.4标准外设库文件夹描述STM32F10x_StdPeriph_Lib_V3.4.0 _htmresc 本文件夹包含了所有的html页面资源Libraries CMSIS 见表5-6STM32F10x_StdPeriph_Driver inc 标准外设库驱动头文件src 标准外设库驱动源文件Project Examples 标准外设库驱动的完整例程Template MDK-ARM KEIL RVMDK的项目模板示例RIDE Raisonance RIDE的项目模板示例EWARMIAR EWARM的项目模板示例Utilities STM3210-EVAL本文件夹包含了用于STM3210B-EVAL和STM3210E-EVAL评估板的专用驱动标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32固件库详解

STM32固件库详解

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版本为基础介绍标准外设库的结构。

第04章 STM32固件库

第04章 STM32固件库

第4章STM32固件库STM32固件库库是一个固件包,该固件库针对基于ARM的32位MCU STM32F101xx 和STM32F103xx。

其中包括了程序、数据结构和覆盖所有外设特性的宏单元。

还包括设备驱动的描述以及每个外围模块的实例。

该固件库使得用户在没有深入学习外围模块规格手册的情况下,也能够使用任何在用户应用中涉及到的设备。

因此,使用该固件库可以节省您的许多时间,让您有更多的时间花费在编程方面,从而减少了在应用开发中的综合开销。

用户可以访问下载最新的相关固件库和用户手册。

4.1 STM32固件库的定义规则表4.1是STM32固件库中使用的缩写词。

表4.1 STM32固件库中使用的缩写词4.1.1 固件库命名规则该固件库使用以下命名规则:(1)PPP表示外围模块的缩写,例如ADC。

详见表4.1。

(2)系统文件名和源/头文件名以‘stm32f10x_’的形式表示,例如stm32f10x_conf.h。

469(3)在单一文件中使用的常量在该文件中定义。

在多个文件中使用的常量定义在头文件中。

所有常量都以大写字母表示。

(4)寄存器当作常量看待,同样以大写字母表示。

多数情况下,在STM32F10x参考手册中使用相同的缩写。

(5)外围模块功能函数的名字,需要有相应的外围模块缩写加下划线这样的前缀。

每个单词的首字符需要大写,例如SPI_SendData。

在一个函数名中,只允许有一条下划线,用来区分外围模块缩写和剩下的函数名。

(6)使用PPP_InitTypeDef中指定的参数初始化PPP外围模块的函数,被命名为PPP_Init,例如TIM_Init。

(7)复位PPP外围模块寄存器为默认值的函数,命名为PPP_DeInit,例如TIM_DeInit。

(8)将PPP_InitTypeDef结构体每个成员设置为复位值的函数,命名为PPP_StructInit,例如USART_StructInit。

(9)用来使能或者禁止指定的PPP外围模块的函数,命名为PPP_Cmd,例如SPI_Cmd。

STM32系列与固件库

STM32系列与固件库

嵌入式系统原理与接口技术
4
5.2 STM32F103系列微控制器
? 主要特点
? STM32F103xx 系列微控制器基于高性能 32位RISC的ARM Cortex-M3 核,工作频率为 72MHz 。片上集成了高速存储器和通过 APB总线连接的丰富和增强的外设和 I/O。所有的 设备都提供标准的通信接口(最多可达两个 I2C接口,三个 SPI接口和五个 USART 接口) 。 片上还带有两个 12位的 ADC、一个 12位的双通道 DAC 、11个16位计时器。根据应用范围 的不同, STM32F103xx 系列具有众多的配置型号,非常适合不同应用中的选型。
嵌入式系统原理与接口技术
16
5.2 STM32F103系列微控制器
? 片上外设概述
? SysTick 定时器
? 该定时器是OS专用,但也可以用作标准的倒计数器。它的特 征是:一个24位的倒计数器;自动重载能力;当计数器为0时 产生的系统中断是可屏蔽的;可编程的时钟源。
? 通用定时器( TIMx)
? STM32F103xx设备最多自带4个同步标准定时器。这些定时器 基于一个16位自动重载顺序/倒序计数器和一个16位的预比较 器。每个定时器特有分别用于输入捕获、输出比较、PWM或 者单脉冲模式输出的4个独立通道。
? 片上外设概述
? SDIO
? STM32F103xC、STM32F103xD和STM32F103xE有一个 SD/SDIO/MMC主机接口,支持MMC 4.2。有三种数据总线模 式:1位(默认),4位和8位。在8位模式下最高可达48MHz。 此外还兼容SD 2.0。1位和4位总线模式下支持SDIO 2.0。
系统总线 DMA 总线
连接Cortex-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间 的访问。

STM32固件库详解知识讲解

STM32固件库详解知识讲解

S T M32固件库详解STM32固件库详解/emouse/archive/2011/11/29/2268441.htm l1.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的标准外设库。

STM32系列与固件库..

STM32系列与固件库..

嵌入式系统原理与接口技术
3
5.1 STM32系列微把握器概述
STM32系列微把握器的应用 STM32系列微把握器主要应用在以下场合: 工业领域:可编程规律把握器〔PLC〕、变频器、打印机
、扫描仪和工控网络。 建筑和安防领域:警报系统、可视 和HVAC。 低功耗领域:血糖测量仪、电表和电池供电应用。 家电领域:电机把握和应用把握。 消费类产品领域:PC外设、玩耍机、数码相机和GPS平台
电源供电方案
调压器有三种运行模式:主〔MR〕,用在传统意义上的 调整模式〔运行模式〕;低功耗〔LPR〕,用在停顿模式
;掉电,用在待机模式:调压器输出为高阻,核心电路掉 电,包括零消耗。
嵌入式系统原理与接口技术
13
5.2 STM32F103系列微把握器
功能概述
低功耗模式,包含三种低功耗模式:
片上外设概述
SDIO
STM32F103xC、STM32F103xD和STM32F103xE有一个 SD/SDIO/MMC主机接口,支持MMC 4.2。有三种数据总线 模式:1位〔默认〕,4位和8位。在8位模式下最高可达 48MHz。此外还兼容SD 2.0。1位和4位总线模式下支持 SDIO 2.0。
特征是:一个24位的倒计数器;自动重载力气;当计数器 为0时产生的系统中断是可屏蔽的;可编程的时钟源。 通用定时器〔TIMx〕 STM32F103xx设备最多自带4个同步标准定时器。这些定时 器基于一个16位自动重载挨次/倒序计数器和一个16位的 预比较器。每个定时器特有分别用于输入捕获、输出比较 、PWM或者单脉冲模式输出的4个独立通道。

嵌入式系统原理与接口技术
4
5.2 STM32F103系列微把握器
主要特点 STM32F103xx系列微把握器基于高性能32位RISC的ARM

STM固件库详解

STM固件库详解

S T M32固件库详解基于标准外设库的软件开发STM32标准外设库概述STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。

该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。

每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。

2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。

以后的版本相对之前的版本改动较大,本书使用目前较新的版本。

使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构可以从ST的官方网站下载到各种版本的标准外设库,首先看一下版本标准外设库的文件结构,如图 5-3所示。

以上版本的文件结构大致相同,每个版本可能略有调整。

图 5-3 STM32F10XXX 标准外设库文件结构表 5-4中介绍了每个文件夹所包含的主要内容。

表 5-4 STM32F10XXX 标准外设库文件夹描述标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32固件库详解/emouse/archive/2011/11/29/2268441.html1.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以上版本的文件结构大致相同,每个版本可能略有调整。

图5-3 STM32F10XXX V3.4标准外设库文件结构表5-4中介绍了每个文件夹所包含的主要内容。

表5-4 STM32F10XXX V3.4标准外设库文件夹描述标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。

STM32F10xxx标准外设库体系结构如图5-4所示。

图中很好的展示了各层以及具体文件之间的联系,各文件的具体功能说明如表5-5所示。

图5-4 STM32F10xxx标准外设库体系结构表5-5 文件功能说明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层的实现相对复杂。

图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文件夹结构在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库(StdPeriph_Lib):(1) 使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。

用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。

(2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。

这两种方法的优缺点在“使用标准外设库开发的优势”小节中已经有了具体的介绍,这里仍要说明的是,使用使用标准外设库进行开发可以极大的减小软件开发的工作量,也是目前嵌入式系统开发的一个趋势。

标准外设库(StdPeriph_Lib)支持STM32F10xxx系列全部成员:大容量,中容量和小容量产品。

从表5-6中也可以看出,启动文件已经对不同的系列进行了划分,实际开发中根据使用的STM32产品具体型号,用户可以通过文件”stm32f10x.h”中的预处理define或者通过开发环境中的全局设置来配置标准外设库(StdPeriph_Lib),一个define对应一个产品系列。

下面列出支持的产品系列STM32F10x_LD:STM32小容量产品STM32F10x_MD:STM32中容量产品STM32F10x_HD:STM32大容量产品在库文件中这些define的具体作用范围是:l 文件“stm3210f.h”中的中断IRQ定义l 启动文件中的向量表,小容量,中容量,大容量产品各有一个启动文件l 外设存储器映像和寄存器物理地址l 产品设置:外部晶振(HSE)的值等l 系统配置函数因此通过宏定义这种方式,可以使标准外设库适用于不同系列的产品,同时也方便与不同产品之间的软件移植,极大的方便了软件的开发。

1.1.4 STM32F10XXX标准外设库的使用标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。

1. 缩写定义标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

2. 命名规则标准外设库遵从以下命名规则PPP表示任一外设缩写,例如:ADC。

源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。

常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。

所有常量都由英文字母大写书写。

寄存器作为常量处理。

他们的命名都由英文字母大写书写。

在大多数情况下,他们采用与缩写规范一致。

外设函数的命名以该外设的缩写加下划线为开头。

每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。

在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。

对于函数命名,总的来说有以下规则:l 名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.l 名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.l 名为PPP_Init的函数,其功能为通过设置PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例如:USART_Init .l 名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd.l 名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig.l 名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.l 用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.l 名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.l 名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag. l 名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.l 名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit.这样的命名方式非常便于程序的编写和阅读,以标准外设库中的示例函数为例,下面摘录了STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA\mian.c中的一段程序。

相关文档
最新文档