STM32固件库详解Word格式文档下载.docx
- 文档编号:16885529
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:22
- 大小:167.16KB
STM32固件库详解Word格式文档下载.docx
《STM32固件库详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《STM32固件库详解Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
Libraries.
eAcmsis
Ia-1cm!
ardSvpRrfOtviceSuppor^
&
ST
-,p
j.卡rm
gcc_nde7
.TrueSHJDlO
D&
eum«
nt>
ion
9拙ITM10x_$tdt>
enph.Driver
j.,tnc
tPvojeci
tJ、STK132flOw^&
td^riph^E■:
jmples
*$TM)2fl(hc_StdPie-riph_Ttrnpi^te
亠:
”UtflitiM
®
“STMJ2.EVAL
Common
.STM521O&
EVAL
卜STM321DC.EVAL
»
STM3210E.EVAL
i.STM321W&
.EVAL_
L»
艙斑《嶄戒戸「母客
图5-3STM32F10XXXV3.4标准外设库文件结构
表5-4中介绍了每个文件夹所包含的主要内容。
表5-4STM32F10XXXV3.4标准外设库文件夹描述
STM32F10x_StdPeriph_Lib_V3.4.0
_htmresc
本文件夹包含了所有的html页面资
源
Libraries
CMSIS
见表5-6
STM32F10x_StdPeriph_Driver
inc
标准外设库驱动头文件
src
标准外设库驱动源文件
Project
Examples
标准外设库驱动的完整例程
Template
MDK-ARM
KEILRVMDK的项目模板示例
RIDE
RaisonanceRIDE的项
目模板示例
EWARM
IAREWARM的项目模
板示例
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治1byARM
■on
WE"
◎誣典命m应才毎自
图5-4STM32F10xxx标准外设库体系结构
表5-5文件功能说明
文件名
功能描述
具体功能说明
core_cm3.h
core_cm3.c
Cortex-M3内核及其设备文件
访问Cortex-M3内核及其设备:
NVIC,SysTick
等
访问Cortex-M3的CPU寄存器和内核外设的函数
stm32f10x.h
微控制器专用头文件
这个文件包含了STM32F10X全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定
义、中断向量表、存储空间的地址映射等
systemstm32f10x.h
微控制器专用系统
函数SystemInit,用来初始化微控制器
system_stm32f10x.c文件函数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-naryMicro、Micrium、NXP、SEGGEF和ST等诸多芯片和软件厂商合作,将所有Cortex芯片厂商产品的软件接口标准化,制定了CMSIS标准。
此举意在降
低软件开发成本,尤其针对新设备项目开发,或者将已有软件移植到其他芯片厂商提供的基
于Cortex处理器的微控制器的情况。
有了该标准,芯片厂商就能够将他们的资源专注于产品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标
准的需求,从而达到降低开发成本的目的。
如图5-5所示,基于CMSIS标准的软件架构主要分为以下4层:
用户应用层、操作系统及
中间件接口层、CMSIS层、硬件寄存器层。
其中CMSIS层起着承上启下的作用:
一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器
的不同定义;
另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用
程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。
也正是如此,CMSIS
层的实现相对复杂。
图5-5CMSIS标准的软件架构
层主要分为以下3个部分:
(1)核内外设访问层(CPALCorePeripheralAccessLayer):
该层由ARM负责实现。
包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途
寄存器的访问接口(例如:
CONTROLxPSR)定义。
由于对特殊寄存器的访问以内联方式定
义,所以针对不同的编译器ARM统一用来屏蔽差异。
该层定义的接口函数均是可重入的。
⑵片上外设访问层(DPAL,DevicePeripheralAccessLayer):
该层由芯片厂商负责实现。
该层的实现与CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。
该层可调用
CPAL层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。
⑶外设访问函数(AFRAccessFunctionsforPeripherals):
该层也由芯片厂商负责实现,主要
是提供访问片上外设的访问函数,这一部分是可选的。
对一个Cortex-M微控制系统而言,CMSIS通过以上三个部分实现了:
I定义了访问外设寄存器和异常向量的通用方法;
I定义了核内外设的寄存器名称和核异常向量的名称;
I为RTOS核定义了与设备独立的接口,包括Debug通道。
这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进
行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。
CMSIS中
的具体文件结构如表5-6所示。
表5-6CMSIS文件夹结构
Core
Documentation
CMSIS文
档
CM3
Startup
arm
MDKARM
编译器启动文件
startup_stm32f10x_hd.s:
大容量产品启动文件
startup_stm32f10x_md.s:
中容量产品启动文件
startup_stm32f10x_ld.s:
小容量产品启动文件
gcc_ride7
GCC编译器启动文件
iar
IAR编译器启动文件
TrueSTUDIO
编译器启动文件
本文件夹包含STMFIOxxx
CMSIS文件:
微控制器外设访问层和内核设备访问
层:
core_cm3.h:
CMSIS的
Cortex-M3内核设备访问
层头文件
core_cm3.c:
层源文件
stm32f10x.h:
Cortex-M3STM32f10xxx微
控制器外设访问层头文件
system_stm32f10x.h:
CMSIS的Cortex-M3
STM32f10xxx微控制器外
设访问层头文件
system_stm32f10x.c
设访问层源文件
在实际开发过程中,根据应用程序的需要,可以采取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_LDSTM32小容量产品
STM32F10x_MD:
STM32中容量产品
STM32F10x_HD:
STM32大容量产品
在库文件中这些define的具体作用范围是:
l文件“stm3210f.h中的中断IRQ定义
l启动文件中的向量表,小容量,中容量,大容量产品各有一个启动文件
l外设存储器映像和寄存器物理地址
l产品设置:
外部晶振(HSE的值等
l系统配置函数
因此通过宏定义这种方式,可以使标准外设库适用于不同系列的产品,同时也方便与不同产
品之间的软件移植,极大的方便了软件的开发。
1.1.4STM32F10XXX标准外设库的使用
标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律
将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学
习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库
中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。
1.缩写定义
标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。
缩写
外设/单元
ADC
模数转换器
BKP
备份寄存器
CAN
控制器局域网模块
CEC
CRC
CRC计算单元
DAC
数模转换器
DBGMCU
调试支持
DMA
直接内存存取控制器
EXTI
外部中断事件控制器
FLASH
闪存存储器
FSMC
灵活的静态存储器控制器
GPIO
通用输入输出
I2C
I2C接口
IWDG
独立看门狗
PWR
电源/功耗控制
RCC
复位与时钟控制器
RTC
实时时钟
SDIO
SDIO接口
SPI
串行外设接口
TIM
定时器
USART
通用冋步/异步收发器
WWDG
窗口看门狗
2.命名规则
标准外设库遵从以下命名规则PPP表示任一外设缩写,例如:
ADG源程序文件和头文件命
名都以“stm32f10x_作为开头,例如:
stm32f10x_conf.h。
常量仅被应用于一个文件的,定义于该文件中;
被应用于多个文件的,在对应头文件中定义。
所有常量都由英文字母大写书写。
寄存器作为常量处理。
他们的命名都由英文字母大写书写。
在大多数情况下,他们采用与缩
写规范一致。
外设函数的命名以该外设的缩写加下划线为开头。
每个单词的第一个字母都由
英文字母大写书写,例如:
SPI_SendData在函数名中,只允许存在一个下划线,用以分隔
外设缩写和函数名的其它部分。
对于函数命名,总的来说有以下规则:
I名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP例
如TIM」nit.
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某标志位被设置与否,例如:
l2C_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中的一段程序。
DMA_InitTypeDefDMA_InitStructure;
/*DMA1channel1configuration*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&
ADC1ConvertedValue;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=1;
DMA_InitStructure.DMA_Peripherallnc=DMA_PeripheralInc_Disable;
DMA」nitStructure.DMA_Memorylnc=DMA_Memorylnc_Disable;
DMA」nitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel1,&
DMA_InitStructure);
/*EnableDMA1channel1*/
DMA_Cmd(DMA1_Channell,ENABLE);
这段程序完成了DMA1通道的配置,首先定义了DMA_InitTypeDMA_InitStructure,接着配置
DMA_InitType的各种参数,各参数的命名方式也均使用约定的命名方式,从命名就能够很容
易的看出各参数所指代的具体功能。
功能参数配置完成后,使用DMA_Init(DMA1_Channell,
DMA_InitStructure);
完成相应外设的初始化,最后使用DMA_Cmd(DMA1_Channell,ENABLE)使能相应外设。
从这个例子就能够很容易的看出标准外设库这种规范化的命名规则给编写和阅读程序带来的好处。
3.变量定义
在早期的版本中有24个变量定义,在Keil的安装根目录下,可以找到对应的定义,路径为:
Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h
/*Includes*/
/*Exportedtypes*/typedefsignedlongs32;
typedefsignedshorts16;
typedefsignedchars8;
typedefsignedlongconstsc32;
/*ReadOnly*/
typedefsignedshortconstsc16;
typedefsignedcharconstsc8;
typedefvolatilesignedlongvs32;
typedefvolatilesignedshortvs16;
typedefvolatilesignedcharvs8;
typedefvolatilesignedlongconstvsc32;
/*ReadOnly*/typedefvolatilesignedshortconstvsc16;
/*ReadOnly*/typedefvolatilesignedcharconstvsc8;
/*ReadOnly*/typedefunsignedlongu32;
typedefunsignedshortu16;
typedefunsignedcharu8;
ty
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 固件库 详解