STM固件库详解

上传人:沈*** 文档编号:186769186 上传时间:2023-02-09 格式:PDF 页数:24 大小:1.42MB
收藏 版权申诉 举报 下载
STM固件库详解_第1页
第1页 / 共24页
STM固件库详解_第2页
第2页 / 共24页
STM固件库详解_第3页
第3页 / 共24页
资源描述:

《STM固件库详解》由会员分享,可在线阅读,更多相关《STM固件库详解(24页珍藏版)》请在装配图网上搜索。

1、S ST TMM3 32 2固固件件库库详详解解1.11.1 基于标准外设库的软件开发基于标准外设库的软件开发1.1.1 STM321.1.1 STM32 标准外设库概述标准外设库概述STM32 标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间 API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数

2、覆盖了该外设所有功能。每个器件的开发都由一个通用 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.21.1.2 使用标准外设库开发的优势使用标准外设库开发

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

4、 3.4 版本标准外设库的文件结构,如图 5-3 所示。3.0 以上版本的文件结构大致相同,每个版本可能略有调整。图 5-3 STM32F10XXX V3.4 标准外设库文件结构表 5-4 中介绍了每个文件夹所包含的主要内容。表 5-4 STM32F10XXX V3.4 标准外设库文件夹描述本文件夹包含了所有的 html 页面STM32F10 x_StdPeriph_Lib_V3.4.0 _htmresc资源LibrariesCMSIS见表 5-6STM32F10 x_StdPeriph_Driverinc标准外设库驱动头文件标准外设库驱动源文src件ProjectExamples标准外设库驱

5、动的完整例程TemplateMDK-ARMKEIL RVMDK 的项目模板示例Raisonance RIDE 的RIDE项目模板示例IAR EWARM 的项目EWARM模板示例本文件夹包含了用于STM3210B-EVAL 和UtilitiesSTM3210-EVALSTM3210E-EVAL评估板的专用驱动标准外设库的第一部分是 CMSIS 和 STM32F10 x_StdPeriph_Driver,CMSIS 是独立于供应商的 Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了

6、新入门的微控制器开发者的学习曲线和新产品的上市时间。STM32F10 x_StdPeriph_Driver 则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用 C 语言编写,并提供了统一的易于调用的函数接口,供开发者使用。Project 文件夹中则包括了 ST 官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用 STM32 的重要参考。Utilities 包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。STM32F10 xxx 标准外设库体系结构如图 5-4 所示。图中很好的展示了各层以及具体文件之间的联系,各

7、文件的具体功能说明如表 5-5 所示。图 5-4 STM32F10 xxx 标准外设库体系结构表 5-5 文件功能说明文件名功能描述具体功能说明访问 Cortex-M3 内核及其设备:NVIC,core_cm3.hcore_cm3.cCortex-M3 内核及其设备文件SysTick 等访问 Cortex-M3 的 CPU 寄存器和内核外设的函数这个文件包含了 STM32F10 x 全系列所有微控制器专用头文 外设寄存器的定义(寄存器的基地址和布stm32f10 x.h件局)、位定义、中断向量表、存储空间的地址映射等函数 SystemInit,用来初始化微控制器函数 Sysem_ExtMemC

8、tl,用来配置外部存system_stm32f10 x.hsystem_stm32f10 x.c微控制器专用系统 储器控制器。它位于文件文件startup_stm32f10 x_xx.s/.c,在跳转到main 前调用SystemFrequncy,该值代表系统时钟频率微控制器专用的中断处理程序列表(与头文件一致)startup_stm32f10 x_Xd.s 编译器启动代码弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖)该文件是与编译器相关的通过更改包含的外设头文件来选择固件库stm32f10 x_conf.h固件库配置文件所使用的外设,在新建程序和进行功能变更之前应当首先修改对

9、应的配置。用户可以相应的加入自己的中断程序的代stm32f10 x_it.hstm32f10 x_it.c码,对于指向同一个中断向量的多个不同中外设中断函数文件 断请求,用户可以通过判断外设的中断标志位来确定准确的中断源,执行相应的中断服务函数。stm32f10 x_ppp.hstm32f10 x_ppp.c包括了相关外设的初始化配置和部分功能外设驱动函数文件 应用函数,这部分是进行编程功能实现的重要组成部分。用户程序文件,通过标准外设库提供的接口Application.c用户文件进行相应的外设配置和功能设计。2.2.基于基于 CMSISCMSIS 标准的软件架构标准的软件架构根据调查研究,软

10、件开发已经被嵌入式行业公认为最主要的开发成本。对于ARM 公司来说,一个 ARM 内核往往会授权给多个厂家,生产种类繁多的产品,如果没有一个通用的软件接口标准,那么当开发者在使用不同厂家的芯片时将极大的增加了软件开发成本,因此,ARM 与Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER 和 ST 等诸多芯片和软件厂商合作,将所有 Cortex 芯片厂商产品的软件接口标准化,制定了 CMSIS 标准。此举意在降低软件开发成本,尤其针对新设备项目开发,或者将已有软件移植到其他芯片厂商提供的基于Cortex 处理器的微控制器的情况。有了该标准,芯片厂

11、商就能够将他们的资源专注于产品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。如图 5-5 所示,基于 CMSIS 标准的软件架构主要分为以下 4 层:用户应用层、操作系统及中间件接口层、CMSIS 层、硬件寄存器层。其中 CMSIS 层起着承上启下的作用:一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对 Cortex-M 系列微处理器核内外设寄存器的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。也正是如此,CMSIS 层的实

12、现相对复杂。图 5-5 CMSIS 标准的软件架构层主要分为以下 3 个部分:(1)核内外设访问层(CPAL,Core Peripheral Access Layer):该层由 ARM 负责实现。包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。由于对特殊寄存器的访问以内联方式定义,所以针对不同的编译器 ARM 统一用来屏蔽差异。该层定义的接口函数均是可重入的。(2)片上外设访问层(DPAL,Device Peripheral Access Layer):该层由芯片厂商负责实现。该层的实现与 CPA

13、L 类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL 层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。(3)外设访问函数(AFP,Access Functions for Peripherals):该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。对一个 Cortex-M 微控制系统而言,CMSIS 通过以上三个部分实现了:l 定义了访问外设寄存器和异常向量的通用方法;l 定义了核内外设的寄存器名称和核异常向量的名称;l 为 RTOS 核定义了与设备独立的接口,包括 Debug 通道。这样芯片厂商就能专注于对其产

14、品的外设特性进行差异化,并且消除他们对微控制器进行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。CMSIS 中的具体文件结构如表 5-6 所示。表 5-6 CMSIS 文件夹结构CMSISCMSISCoreDocumentation文档startup_stm32f10 x_hd.s:MDKARMstartup_stm32f10 x_md.s:CM3Startuparm编译器中容量产品启动文件启动文件startup_stm32f10 x_ld.s:小容量产品启动文件大容量产品启动文件GCC 编译器gcc_ride7启动文件IAR 编译器启iar动文件TrueSTUDIOT

15、rueSTUDIO编译器启动文件本文件夹包含STMF10 xxx CMSIS 文件:微控制器外设访问层和内核设备访问层:core_cm3.h:CMSIS 的Cortex-M3 内核设备访问层头文件core_cm3.c:CMSIS 的Cortex-M3 内核设备访问层源文件stm32f10 x.h:CMSIS 的Cortex-M3STM32f10 xxx 微控制器外设访问层头文件system_stm32f10 x.h:CMSIS 的 Cortex-M3STM32f10 xxx 微控制器外设访问层头文件system_stm32f10 x.c:CMSIS 的 Cortex-M3STM32f10 xx

16、x 微控制器外设访问层源文件在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库(StdPeriph_Lib):(1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。用户只需要配置文件”stm32f10 x_conf.h”,并使用相应的文件”stm32f10 x_ppp.h/.c”即可。(2)不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。这两种方法的优缺点在“使用标准外设库开发的优势”小节中已经有了具体的介绍,这里仍要说明的是,使用使用标准外设库进行开发可以极大的减小软件开发的工作量,也是目前嵌入式系统开发的一个趋势。标准外设库(StdP

17、eriph_Lib)支持 STM32F10 xxx 系列全部成员:大容量,中容量和小容量产品。从表 5-6 中也可以看出,启动文件已经对不同的系列进行了划分,实际开发中根据使用的STM32 产品具体型号,用户可以通过文件”stm32f10 x.h”中的预处理 define 或者通过开发环境中的全局设置来配置标准外设库(StdPeriph_Lib),一个 define 对应一个产品系列。下面列出支持的产品系列STM32F10 x_LD:STM32 小容量产品STM32F10 x_MD:STM32 中容量产品STM32F10 x_HD:STM32 大容量产品在库文件中这些 define 的具体作用

18、范围是:l 文件“stm3210f.h”中的中断 IRQ 定义l 启动文件中的向量表,小容量,中容量,大容量产品各有一个启动文件l 外设存储器映像和寄存器物理地址l 产品设置:外部晶振(HSE)的值等l 系统配置函数因此通过宏定义这种方式,可以使标准外设库适用于不同系列的产品,同时也方便与不同产品之间的软件移植,极大的方便了软件的开发。1.1.4 STM32F10XXX1.1.4 STM32F10XXX 标准外设库的使用标准外设库的使用标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学

19、习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。1.1.缩写定义缩写定义标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。缩写外设/单元ADC模数转换器BKP备份寄存器CAN控制器局域网模块CECCRCCRC 计算单元DAC数模转换器DBGMCU调试支持DMA直接内存存取控制器EXTI外部中断事件控制器FLASH闪存存储器FSMC灵活的静态存储器控制器GPIO通用输入输出I2CI2C 接口IWDG独立看门狗PWR电源/功耗控制RCC复位与时钟控制器RTC实时时钟SDIOSDI

20、O 接口SPI串行外设接口TIM定时器USART通用同步/异步收发器WWDG窗口看门狗2.2.命名规则命名规则标准外设库遵从以下命名规则?PPP表示任一外设缩写,例如:ADC。源程序文件和头文件命名都以“stm32f10 x_”作为开头,例如:stm32f10 x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范一致。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData

21、。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。对于函数命名,总的来说有以下规则: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

22、名为 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_C

23、learFlag.l 名为 PPP_GetITStatus 的函数,其功能为判断来自外设 PPP 的中断发生与否,例如:I2C_GetITStatus.l 名为 PPP_ClearITPendingBit 的函数,其功能为清除外设 PPP 中断待处理标志位,例如:I2C_ClearITPendingBit.这样的命名方式非常便于程序的编写和阅读,以标准外设库中的示例函数为例,下面摘录了STM32F10 x_StdPeriph_ExamplesADC3ADCs_DMAmian.c 中的一段程序。1 DMA_InitType Def DMA_InitStructure;2 3/*DMA1 chan

24、nel1 configuration-*/4 5 DMA_DeInit(DMA1_Channel1);6 7 DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;8 9 DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&ADC1ConvertedValue;1011 DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;1213 DMA_InitStructure.DMA_BufferSize=1;1415 DMA_InitStructure.D

25、MA_PeripheralInc=DMA_PeripheralInc_Disable;1617 DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;1819 DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;2021 DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;2223 DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;

26、2425 DMA_InitStructure.DMA_Priority=DMA_Priority_High;2627 DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;2829 DMA_Init(DMA1_Channel1,&DMA_InitStructure);3031/*Enable DMA1 channel1*/3233 DMA_Cmd(DMA1_Channel1,ENABLE);这段程序完成了 DMA1 通道的配置,首先定义了DMA_InitType DMA_InitStructure,接着配置DMA_InitType的各种参数,各参数的命名方式也均使

27、用约定的命名方式,从命名就能够很容易的看出各参数所指代的具体功能。功能参数配置完成后,使用DMA_Init(DMA1_Channel1,&DMA_InitStructure);完成相应外设的初始化,最后使用DMA_Cmd(DMA1_Channel1,ENABLE)?使能相应外设。从这个例子就能够很容易的看出标准外设库这种规范化的命名规则给编写和阅读程序带来的好处。3.3.变量定义变量定义在早期的版本中有 24 个变量定义,在 Keil 的安装根目录下,可以找到对应的定义,路径为:KeilARMINCSTSTM32F10 xstm32f10 x_type.h 1/*Includes-*/2 3/

28、*Exported types-*/4 5 typedef signed long s32;6 7 typedef signed short s16;8 9 typedef signed char s8;1011 typedef signed long const sc32;/*Read Only*/1213 typedef signed short const sc16;/*Read Only*/1415 typedef signed char const sc8;/*Read Only*/1617 typedef volatile signed long vs32;1819 typedef

29、 volatile signed short vs16;2021 typedef volatile signed char vs8;2223 typedef volatile signed long const vsc32;/*Read Only*/2425 typedef volatile signed short const vsc16;/*Read Only*/2627 typedef volatile signed char const vsc8;/*Read Only*/2829 typedef unsigned long u32;3031 typedef unsigned shor

30、t u16;3233 typedef unsigned char u8;3435 typedef unsigned long const uc32;/*Read Only*/3637 typedef unsigned short const uc16;/*Read Only*/3839 typedef unsigned char const uc8;/*Read Only*/4041 typedef volatile unsigned long vu32;4243 typedef volatile unsigned short vu16;4445 typedef volatile unsign

31、ed char vu8;4647 typedef volatile unsigned long const vuc32;/*Read Only*/4849 typedef volatile unsigned short const vuc16;/*Read Only*/5051 typedef volatile unsigned char const vuc8;/*Read Only*/1/*!STM32F10 x Standard Peripheral Library old types(maintained for legacypurpose)*/2 3 typedef int32_t s

32、32;4 5 typedef int16_t s16;6 7 typedef int8_t s8;8 9 typedef const int32_t sc32;/*!Read Only*/1011 typedef const int16_t sc16;/*!Read Only*/1213 typedef const int8_t sc8;/*!Read Only*/1415 typedef _IO int32_t vs32;1617 typedef _IO int16_t vs16;1819 typedef _IO int8_t vs8;2021 typedef _I int32_t vsc3

33、2;/*!Read Only*/2223 typedef _I int16_t vsc16;/*!Read Only*/2425 typedef _I int8_t vsc8;/*!Read Only*/2627 typedef uint32_t u32;2829 typedef uint16_t u16;3031 typedef uint8_t u8;3233 typedef const uint32_t uc32;/*!Read Only*/3435 typedef const uint16_t uc16;/*!Read Only*/3637 typedef const uint8_t u

34、c8;/*!Read Only*/3839 typedef _IO uint32_t vu32;4041 typedef _IO uint16_t vu16;4243 typedef _IO uint8_t vu8;4445 typedef _I uint32_t vuc32;/*!Read Only*/4647 typedef _I uint16_t vuc16;/*!Read Only*/4849 typedef _I uint8_t vuc8;/*!Read Only*/表 5-7 CMSIS IO 类型限定词IO 类限定词#define描述_Ivolatile const只读访问_Ov

35、olatile只写访问_IOvolatile读和写访问表 5-8 固件库与 CMSIS 数据类型对比固件库类型CMSIS 类型描述s32int32_t易挥发只读有符号 32 位数据s16int16_t易挥发只读有符号 16 位数据s8int8_t易挥发只读有符号 8 位数据sc32const int32_t只读有符号 32 位数据sc16const int16_t只读有符号 16 位数据sc8const int8_t只读有符号 8 位数据vs32_IO int32_t易挥发读写访问有符号 32 位数据vs16_IO int16_t易挥发读写访问有符号 16 位数据vs8_IO int8_t易挥

36、发读写访问有符号 8 位数据vsc32_I int32_t易挥发只读有符号 32 位数据vsc16_I int16_t易挥发只读有符号 16 位数据vsc8_I int8_t易挥发只读有符号 8 位数据u32uint32_t无符号 32 位数据u16uint16_t无符号 16 位数据u8uint8_t无符号 8 位数据uc32const uint32_t只读无符号 32 位数据uc16const uint16_t只读无符号 16 位数据uc8const uint8_t只读无符号 8 位数据vu32_IO uint32_t易挥发读写访问无符号 32 位数据vu16_IO uint16_t易挥发

37、读写访问无符号 16 位数据vu8_IO uint8_t易挥发读写访问无符号 8 位数据vuc32_I uint32_t易挥发只读无符号 32 位数据vuc16_I uint16_t易挥发只读无符号 16 位数据vuc8_I uint8_t易挥发只读无符号 8 位数据stm32f10 x.h 文件中还包含了常用的布尔形变量定义,如:1 typedef enum RESET=0,SET=!RESET FlagStatus,ITStatus;23 typedef enum DISABLE=0,ENABLE=!DISABLE FunctionalState;45#define IS_FUNCTION

38、AL_STATE(STATE)(STATE)=DISABLE)|(STATE)=ENABLE)67 typedef enum ERROR=0,SUCCESS=!ERROR ErrorStatus;不同版本的标准外设库的变量定义略有不同,如 3.4 版本中就没有之前版本的 TRUE 和 FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。4.4.使用步骤使用步骤前面几个小节已经详细介绍了标准外设库的组成结构以及部分主要文件的功能描述,那么如果在开发中使用标准外设库需要哪些描述呢?下面就进行简要的介绍

39、,这儿介绍的使用方法是与开发环境无关的,在不同的开发环境中可能在操作方式上略有不同,但是总体的流程都是一样的,下一小节将介绍在 MDK ARM 开发环境下使用标准外设库的详细过程。其次按照使用产品的具体型号选择具体的启动文件,加入工程。文件主要按照使用产品的容量进行区分,根据产品容量进行选择即可。每个文件的具体含义可以在“stm32f10 x.h”文件中找到对应的说明,摘录如下:1#if!defined(STM32F10X_LD)&!defined(STM32F10X_LD_VL)&!defined(STM32F10X_MD)&!defined(STM32F10X_MD_VL)&!define

40、d(STM32F10X_HD)&!defined(STM32F10X_HD_VL)&!defined(STM32F10X_XL)&!defined(STM32F10X_CL)2 3/*#define STM32F10X_LD*/*!STM32F10X_LD:STM32 Low density devices*/4 5/*#define STM32F10X_LD_VL*/*!STM32F10X_LD_VL:STM32 Low density Value Linedevices*/6 7/*#define STM32F10X_MD*/*!STM32F10X_MD:STM32 Medium dens

41、ity devices*/8 9/*#define STM32F10X_MD_VL*/*!STM32F10X_MD_VL:STM32 Medium density ValueLine devices*/*#define STM32F10X_HD*/*!STM32F10X_HD:STM32 High densitydevices*/1011/*#define STM32F10X_HD_VL*/*!STM32F10X_HD_VL:STM32 High density valueline devices*/1213/*#define STM32F10X_XL*/*!STM32F10X_XL:STM3

42、2 XL-density devices*/1415/*#define STM32F10X_CL*/*!STM32F10X_CL:STM32 Connectivity line devices*/1617#endif1819/*Tip:To avoid modifying this file each time you need to switch between these2021 devices,you can define the device in your toolchain compiler preprocessor.2223-Low-density devices are STM

43、32F101xx,STM32F102xx and STM32F103xxmicrocontrollers2425 where the Flash memory density ranges between 16 and 32 Kbytes.2627-Low-density value line devices are STM32F100 xx microcontrollers where the Flash2829 memory density ranges between 16 and 32 Kbytes.3031-Medium-density devices are STM32F101xx

44、,STM32F102xx and STM32F103xxmicrocontrollers3233 where the Flash memory density ranges between 64 and 128 Kbytes.3435-Medium-density value line devices are STM32F100 xx microcontrollers where the3637 Flash memory density ranges between 64 and 128 Kbytes.3839-High-density devices are STM32F101xx and

45、STM32F103xx microcontrollers where4041 the Flash memory density ranges between 256 and 512 Kbytes.4243-High-density value line devices are STM32F100 xx microcontrollers where the4445 Flash memory density ranges between 256 and 512 Kbytes.4647-XL-density devices are STM32F101xx and STM32F103xx microc

46、ontrollers where4849 the Flash memory density ranges between 512 and 1024 Kbytes.5051-Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.5253*/“stm32f10 x.h”是整个标准外设库的入口文件,这个文件包含了 STM32F10 x 全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等。为了是这个文件适用于不同系列的产品,程序中是通过宏定义来实现不同产品的匹配的,

47、上面这段程序的注释中已经详细给出了每个启动文件所对应的产品系列,与之对应,也要相应的修改这个入口文件,需要根据所使用的产品系列正确的注释/去掉相应的注释 define。在这段程序的下方同样有这样的一个注释程序/*#define USE_STDPERIPH_DRIVER*/?用于选择是否使用标准外设库,如果保留这个注释,则用户开发程序可以基于直接访问“stm32f10 x.h”中定义的外设寄存器,所有的操作均基于寄存器完成,目前不使用固件库的单片机开发,如 51、AVR、MSP430 等其实都是采用此种方式,通过在对应型号的头文件中进行外设寄存器等方面的定义,从而在程序中对相应的寄存器操作完成相

48、应的功能设计。如果去掉/*#define USE_STDPERIPH_DRIVER*/的注释,则是使用标准外设库进行开发,用户需要使用在文件“stm32f10 x_conf.h”中,选择要用的外设,外设同样是通过注释/去掉注释的方式来选择。示例程序如下:1/*Uncomment the line below to enable peripheral header file inclusion*/2 3#include stm32f10 x_adc.h 4 5/*#include stm32f10 x_bkp.h*/6 7/*#include stm32f10 x_can.h*/8 9/*#in

49、clude stm32f10 x_cec.h*/1011/*#include stm32f10 x_crc.h*/1213/*#include stm32f10 x_dac.h*/1415/*#include stm32f10 x_dbgmcu.h*/1617#include stm32f10 x_dma.h1819/*#include stm32f10 x_exti.h*/2021/*#include stm32f10 x_flash.h*/2223/*#include stm32f10 x_fsmc.h*/2425#include stm32f10 x_gpio.h2627/*#inclu

50、de stm32f10 x_i2c.h*/2829/*#include stm32f10 x_iwdg.h*/3031/*#include stm32f10 x_pwr.h*/3233#include stm32f10 x_rcc.h3435/*#include stm32f10 x_rtc.h*/3637/*#include stm32f10 x_sdio.h*/3839/*#include stm32f10 x_spi.h*/4041/*#include stm32f10 x_tim.h*/4243/*#include stm32f10 x_usart.h*/4445/*#include

51、stm32f10 x_wwdg.h*/4647#include misc.h/*High level functions for NVIC andSysTick(add-on toCMSISfunctions)*/上面一段程序来自于例程中的 AD 采集程序,程序使用了 AD 和 DMA,因此去掉相应的注释,同时几乎所有的应用都需要使用复位与时钟以及通用 I/O,因此这两项是必须的,而多数程序同样要使用 NVIC 中断 IRQ 设置和 SysTick 时钟源设置,那么“misc.h”这一项也是必须的。上面已经针对具体的产品信号和程序功能进行了针对性的配置,接下来需要配置系统所使用的时钟,系统时钟

52、在“system_stm32f10 x.c”同样通过注释的方式来配置,程序如下:#if defined(STM32F10X_LD_VL)|(defined STM32F10X_MD_VL)|(definedSTM32F10X_HD_VL)/*#define SYSCLK_FREQ_HSE HSE_VALUE*/#define SYSCLK_FREQ_24MHz 24000000#else/*#define SYSCLK_FREQ_HSE HSE_VALUE*/*#define SYSCLK_FREQ_24MHz 24000000*/*#define SYSCLK_FREQ_36MHz 36000000*/*#define SYSCLK_FREQ_48MHz 48000000*/*#define SYSCLK_FREQ_56MHz 56000000*/#define SYSCLK_FREQ_72MHz 72000000#endif如果这儿没有明确的定义那么 HSI 时钟将会作为系统时钟。至此,已经配置了系统的主要外部参数,这些参数主要是通过更改相关的宏定义来实现的,有些开发环境,例如 Keil 支持在软件设置中加入全局宏定义,因此像芯片系列定义,是否使用固件库定义等也可以通过软件添加来实现。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!