译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准UM0427用户手册32位基于ARM微控制器STM32F101xx与STM32F103xx固件函数库介绍本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API(applicationprogramminginterface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。所有的驱动源代码都符合“StrictANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。我们已经把驱动源代码文档化,他们同时兼容MISRA-C2004标准(根据需要,我们可以提供兼容矩阵)。由于整个固态函数库按照“StrictANSI-C”标准编写,它不受不同开发环境的影响。仅对话启动文件取决于开发环境。该固态函数库通过校验所有库函数的输入值来实现实时错误检测。该动态校验提高了软件的鲁棒性。实时检测适合于用户应用程序的开发和调试。但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。想要了解更多细节,请参阅Section2.5。因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。此份固件库用户手册的整体架构如下:定义,文档约定和固态函数库规则。固态函数库概述(包的内容,库的架构),安装指南,库使用实例。固件库具体描述:设置架构和每个外设的函数。STM32F101xx和STM32F103xx在整个文档中被写作STM32F101x。文档和库规范译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准1.文档和库规范本用户手册和固态函数库按照以下章节所描述的规范编写。1.1缩写Table1.本文档所有缩写定义缩写外设/单元ADC模数转换器BKP备份寄存器CAN控制器局域网模块DMA直接内存存取控制器EXTI外部中断事件控制器FLASH闪存存储器GPIO通用输入输出I2C内部集成电路IWDG独立看门狗NVIC嵌套中断向量列表控制器PWR电源/功耗控制RCC复位与时钟控制器RTC实时时钟SPI串行外设接口SysTick系统嘀嗒定时器TIM通用定时器TIM1高级控制定时器USART通用同步异步接收发射端WWDG窗口看门狗1.2命名规则固态函数库遵从以下命名规则:PPP表示任一外设缩写,例如:ADC。更多缩写相关信息参阅章节1.1缩写。系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范与本用户手册一致。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大文档和库规范译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:USART_StructInit.名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd.名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig.名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit.1.3编码规则本章节描述了固态函书库的编码规则。1.3.1变量固态函数库定义了24个变量类型,他们的类型和大小是固定的。在文件stm32f10x_type.h中我们定义了这些变量:typedefsignedlongs32;typedefsignedshorts16;文档和库规范译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准typedefsignedchars8;typedefsignedlongconstsc32;/*ReadOnly*/typedefsignedshortconstsc16;/*ReadOnly*/typedefsignedcharconstsc8;/*ReadOnly*/typedefvolatilesignedlongvs32;typedefvolatilesignedshortvs16;typedefvolatilesignedcharvs8;typedefvolatilesignedlongconstvsc32;/*ReadOnly*/typedefvolatilesignedshortconstvsc16;/*ReadOnly*/typedefvolatilesignedcharconstvsc8;/*ReadOnly*/typedefunsignedlongu32;typedefunsignedshortu16;typedefunsignedcharu8;typedefunsignedlongconstuc32;/*ReadOnly*/typedefunsignedshortconstuc16;/*ReadOnly*/typedefunsignedcharconstuc8;/*ReadOnly*/typedefvolatileunsignedlongvu32;typedefvolatileunsignedshortvu16;typedefvolatileunsignedcharvu8;typedefvolatileunsignedlongconstvuc32;/*ReadOnly*/typedefvolatileunsignedshortconstvuc16;/*ReadOnly*/typedefvolatileunsignedcharconstvuc8;/*ReadOnly*/1.3.2布尔型在文件stm32f10x_type.h中,布尔形变量被定义如下:Typedefenum{FALSE=0,TRUE=!FALSE}bool;1.3.3标志位状态类型在文件stm32f10x_type.h中,我们定义标志位类型(FlagStatustype)的2个可能值为“设置”与“重置”(SETorRESET)。typedefenum{RESET=0,SET=!RESET}FlagStatus;文档和库规范译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准1.3.4功能状态类型在文件stm32f10x_type.h中,我们定义功能状态类型(FunctionalStatetype)的2个可能值为“使能”与“失能”(ENABLEorDISABLE)。typedefenum{DISABLE=0,ENABLE=!DISABLE}FunctionalState;1.3.5错误状态类型在文件stm32f10x_type.h中,我们错误状态类型类型(ErrorStatustype)的2个可能值为“成功”与“出错”(SUCCESSorERROR)。Typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;1.3.6外设用户可以通过指向各个外设的指针访问各外设的控制寄存器。这些指针所指向的数据结构与各个外设的控制寄存器布局一一对应。外设控制寄存器结构文件stm32f10x_map.h包含了所有外设控制寄存器的结构,下例为SPI寄存器结构的声明:/*--------------------------------SerialPeripheralInterface-----------------------------*/typedefstruct{vu16CR1;u16RESERVED0;vu16CR2;u16RESERVED1;vu16SR;u16RESERVED2;vu16DR;u16RESERVED3;vu16CRCPR;u16RESERVED4;vu16RXCRCR;u16RESERVED5;文档和库规范译文英文原版为UM0427Oct.2007Rev2,译文仅供参考,与英文版冲突的,以英文版为准vu16TXCRCR;u16RESERVED6;}SPI_TypeDef;寄存器命名遵循上节的寄存器缩写命名规则。RESERVEDi(i为一个整数索引值)表示被保留区域。外设声明文件stm32f10x_map.h包含了所有外设的声明,下例为SPI外设的声明:#ifndefEXT#DefineEXTextern#endif......#definePERIPH_BASE((u32)0x40000000)#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)....../*SPI2BaseAddressdefinition*/#defineSPI2_BASE(APB1PERIPH_BASE+0x3800)....../*SPI2peripheraldeclaration*/#ifndefDEBUG......#ifdef_SPI2#defineSPI2((SPI_TypeDef*)SPI2_BASE)#endif/*_SPI2*/......#else/*DEBUG*/…...#ifdef_SPI2EXTSPI_TypeDef*SPI2;#endif/*_SPI2*/…...#endif/*DEBUG*/如果用户希望使用外设SPI,那么必须在文件stm32f10x_conf.h中定义_SPI标签。通过定义标签_SPIn,用户可以访问外设SPIn的寄存器。例如,用户必须在文件stm32f10x_conf.h中定义标签_SPI2,否则是不能访问SPI2的寄存器的。在文件stm32f10x_conf.h中,用户可以按照下例定义标签_SPI和_SPIn。#define_SPI#define_SPI1#define_SPI2每个外设都有