报告人:徐倩康利利学号:201455200720145520121.STM32标准外设库概述2.STM32固件库与CMSIS标准3.STM32固件库包结构4.STM32使用步骤简介本质:一个固件函数包组成:程序、数据结构和宏,包括了微控制器所有外设的性能特征。还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API(applicationprogramminginterface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。优点:a、通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设;b、使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。ST公司2007年10月发布了V1.0版本的固件库,MDKARM3.22之前的版本均支持该库。2008年6月发布了V2.0版的固件库,从2008年9月推出的MDKARM3.23版本至今均使用V2.0版本的固件库。V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。其实一句话就可以概括:固件库就是函数的集合;固件库函数的作用是:向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。但是固件库不是万能的,您如果想要把STM32学透,光读STM32固件库是远远不够的。你还是要了解一下STM32的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃有余。E.g操作名称操作语句51开发操作寄存器P0=0x11;Stm32开发操作寄存器GPIOx-BRR=0x0011;Stm32库函数voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIOx-BRR=GPIO_Pin;}(3)外设访问函数:该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。(1)核内外设访问层:该层由ARM负责实现。包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口定义。该层定义的接口函数均是可重入的。(2)片上外设访问层:负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。CMSIS通过以上三个部分实现了:a)定义访问外设寄存器和异常向量的通用方法;b)定义核内外设的寄存器名称和核异常向量的名称;c)为RTOS核定义与设备独立的接口,包括Debug通道。我们在使用STM32芯片的时候首先要进行系统初始化,CMSIS规范就规定,系统初始化函数名字必须为SystemInit,所以各个芯片公司写自己的库函数的时候就必须用SystemInit对系统进行初始化。CMSIS还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。_htmresc本文件夹包含了所有的html页面资源LibrariesCMSIS见表STM32F10x_StdPeriph_Driverinc标准外设库驱动头文件src标准外设库驱动源文件ProjectExamples标准外设库驱动的完整例程TemplateMDK-ARMKEILRVMDK的项目模板示例RIDERaisonanceRIDE的项目模板示例EWARMIAREWARM的项目模板示例UtilitiesSTM3210-EVAL本文件夹包含了用于STM3210B-EVAL和STM3210E-EVAL评估板的专用驱动CM3CoreSupportcore_cm3.hcore_cm3.cCMSIS的Cortex-M3内核设备访问层头文件,提供进入M3内核接口DeviceSupportstm32f10x.h系统寄存器定义申明以及包装内存操作system_stm32f10x.hsystem_stm32f10x.c设置系统以及总线时钟,SystemInit函数,系统启动的时候都会调用,用来设置系统的整个时钟系统startup_stm32f10x_Xd.s编译器启动代码,不同容量的芯片启动文件不一样stm32f10x_conf.h通过更改包含的外设头文件来选择固件库所使用的外设,在新建程序和进行功能变更之前应当首先修改对应的配置。stm32f10x_it.hstm32f10x_it.c用户可以相应的加入自己的中断程序的代码,对于指向同一个中断向量的多个不同中断请求,用户可以通过判断外设的中断标志位来确定准确的中断源,执行相应的中断服务函数。DocumentationCMSIS文档缩写外设/单元ADC模数转换器BKP备份寄存器CAN控制器局域网模块CRCCRC计算单元DAC数模转换器DBGMCU调试支持DMA直接内存存取控制器EXTI外部中断事件控制器FLASH闪存存储器FSMC灵活的静态存储器控制器GPIO通用输入输出I2CI2C接口IWDG独立看门狗PWR电源/功耗控制RCC复位与时钟控制器RTC实时时钟SDIOSDIO接口SPI串行外设接口TIM定时器USART通用同步/异步收发器WWDG窗口看门狗首先新建一个项目并设置工具链对应的启动文件,可以使用标准外设库中提供的模板,也可以自己根据自己的需求新建。标准外设库中已经提供了不同工具链对应的文件,位于STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceSupport\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)/*#defineSTM32F10X_LD*//*!STM32F10X_LD:STM32Lowdensitydevices*/如果去掉/*#defineUSE_STDPERIPH_DRIVER*/的注释,则是使用标准外设库进行开发,用户需要使用在文件“stm32f10x_conf.h”中,选择要用的外设,外设同样是通过注释/去掉注释的方式来选择。/*Uncommentthelinebelowtoenableperipheralheaderfileinclusion*/#includestm32f10x_adc.h/*#includestm32f10x_bkp.h*//*#includestm32f10x_can.h*/系统时钟在“system_stm32f10x.c”同样通过注释的方式来配置已经配置了系统的主要外部参数,这些参数主要是通过更改相关的宏定义来实现的,有些开发环境,例如Keil支持在软件设置中加入全局宏定义,因此像芯片系列定义,是否使用固件库定义等也可以通过软件添加来实现。完成了主要参数配置以后就可以进行程序的开发了,标准外设库开发就可以使用标准外设库中提供的方便的API函数进行相应的功能设计了。