您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > STM32F4xx标准外设固件库
一、标准固件库简介本文下载的是STM32F4xx_DSP_StdPeriph_Lib_V1.5.0,其文件夹如下图所示:其中Project文件夹为各个开发环境(MDK-ARM、EWARM、TrueSTUDIO)的模板工程,Utilities文件夹为官方评估板的标准固件库应用例程,而真正的标准固件库在Libraries文件夹中。在Libraries文件夹中:CMSIS文件夹主要包含于内核相关的文件;STM32F4xx_StdPeriph_Driver文件夹为STM32F4xx处理器外设相关的底层驱动。以下为固件库移植时CMSIS文件夹中的重要源文件:core_cm4.h:内核功能的定义,比如NVIC相关寄存器的结构体和Systick配置。在CMSIS/Include中core_cmFunc.h:内核核心功能接口头文件。在CMSIS/Include中core_cmInstr.h:包含一些内核核心专用指令。在CMSIS/Include中core_cmSimd.h:包含与编译器相关的处理。在CMSIS/Include中stm32f4xx.h:包含了stm32f4的寄存器结构体的定义(类似于c51的reg52.h)。在CMSIS\Device\ST\STM32F4xx\Include中system_stm32f4xx.h:system_stm32f4xx.c的头文件。在CMSIS\Device\ST\STM32F4xx\Include中system_stm32f4xx.c:stm32f4的系统时钟配置。在CMSIS\Device\ST\STM32F4xx\Source\Templates中startup_stm32f40_41xxx.s:启动文件:设定SP的初始值;设置PC的初始值;设置中断向量表的地址;配置时钟;设置堆栈;调用main。这个启动文件先调用system_stm32f4xx.c里面的systeminit()在调用main()之前。在CMSIS\Device\ST\STM32F4xx\Source\Templates\arm中。对于STM32F4xx_StdPeriph_Driver,其重要源文件为:stm32f4xx_ppp.h:外设头文件。这里的ppp只是一个代码,在实际上是具体的外设名字,如ADC,DMA等。在实际使用时根据所需的外设选择性移植。在STM32F4xx_StdPeriph_Driver\inc中stm32f4xx_ppp.c:外设源文件。这里的ppp只是一个代码,在实际上是具体的外设名字,如ADC,DMA等。在实际使用时根据所需的外设选择性移植。在STM32F4xx_StdPeriph_Driver\src中stm32f4xx_conf.h:外设驱动配置文件。通过修改该文件中所包含的外设头文件,用户启动或禁用外设驱动。此外,在此文件夹打开宏定义USE_FULL_ASSERT,通过预处理启用或禁用标准外设库运行时的故障检测。在Project\STM32F4xx_StdPeriph_Templates中。stm32f4xx_it.h:头文件。包括所有中断处理程序原型。在Project\STM32F4xx_StdPeriph_Templates中。stm32f4xx_it.c:中断源程序模板,中断函数的名称要与启动文件中中断向量表的名称一致。在Project\STM32F4xx_StdPeriph_Templates中。此外,对于stm32f4的标准外设固件库,在CMSIS文件夹中还有相应的DSP库:DSP_Lib和Lib。DSP_Lib主要为DSP函数库的实例和源码;Lib为编译好的,且对于不同内核的STM32系列MCU所使用的lib文件。二、标准固件库移植过程中的注意事项(这里以仅以Keil-MDK为例)1、在stm32f4xx.h文件中选择芯片以及宏定义USE_STDPERIPH_DRIVER。#if!defined(STM32F40_41xxx)&&!defined(STM32F427_437xx)&&!defined(STM32F429_439xx)&&!defined(STM32F401xx)&&!defined(STM32F411xE)&&\!defined(STM32F446xx)#defineSTM32F40_41xxx/*!STM32F405RG,STM32F405VG,STM32F405ZG,STM32F415RG,STM32F415VG,STM32F415ZG,STM32F407VG,STM32F407VE,STM32F407ZG,STM32F407ZE,STM32F407IG,STM32F407IE,STM32F417VG,STM32F417VE,STM32F417ZG,STM32F417ZE,STM32F417IGandSTM32F417IEDevices*//*#defineSTM32F427_437xx*//*!STM32F427VG,STM32F427VI,STM32F427ZG,STM32F427ZI,STM32F427IG,STM32F427II,STM32F437VG,STM32F437VI,STM32F437ZG,STM32F437ZI,STM32F437IG,STM32F437IIDevices*//*#defineSTM32F429_439xx*//*!STM32F429VG,STM32F429VI,STM32F429ZG,STM32F429ZI,STM32F429BG,STM32F429BI,STM32F429NG,STM32F439NI,STM32F429IG,STM32F429II,STM32F439VG,STM32F439VI,STM32F439ZG,STM32F439ZI,STM32F439BG,STM32F439BI,STM32F439NG,STM32F439NI,STM32F439IGandSTM32F439IIDevices*//*#defineSTM32F401xx*//*!STM32F401CB,STM32F401CC,STM32F401RB,STM32F401RC,STM32F401VB,STM32F401VCSTM32F401CD,STM32F401RD,STM32F401VD,STM32F401CExx,STM32F401REandSTM32F401VEDevices*//*#defineSTM32F411xE*//*!STM32F411CD,STM32F411RD,STM32F411VD,STM32F411CE,STM32F411REandSTM32F411VEDevices*//*#defineSTM32F446xx*//*!STM32F446MC,STM32F446ME,STM32F446RC,STM32F446RE,STM32F446VC,STM32F446VE,STM32F446ZCandSTM32F446ZEDevices*/#endif/*OldSTM32F40XXdefinition,maintainedforlegacypurpose*/#ifdefSTM32F40XX#defineSTM32F40_41xxx#endif/*STM32F40XX*//*OldSTM32F427Xdefinition,maintainedforlegacypurpose*/#ifdefSTM32F427X#defineSTM32F427_437xx#endif/*STM32F427X*//*Tip:Toavoidmodifyingthisfileeachtimeyouneedtoswitchbetweenthesedevices,youcandefinethedeviceinyourtoolchaincompilerpreprocessor.*/#if!defined(STM32F40_41xxx)&&!defined(STM32F427_437xx)&&!defined(STM32F429_439xx)&&!defined(STM32F401xx)&&!defined(STM32F411xE)&&\!defined(STM32F446xx)#errorPleaseselectfirstthetargetSTM32F4xxdeviceusedinyourapplication(instm32f4xx.hfile)#endif#if!defined(USE_STDPERIPH_DRIVER)/***@briefCommentthelinebelowifyouwillnotusetheperipheralsdrivers.Inthiscase,thesedriverswillnotbeincludedandtheapplicationcodewillbebasedondirectaccesstoperipheralsregisters*/#defineUSE_STDPERIPH_DRIVER#endif/*USE_STDPERIPH_DRIVER*/2、根据实际的外部晶振修改stm32f4xx.h文件中默认的系统外部晶振时钟HSE_VALUE。#ifdefined(STM32F40_41xxx)||defined(STM32F427_437xx)||defined(STM32F429_439xx)||defined(STM32F401xx)||defined(STM32F411xE)#if!defined(HSE_VALUE)#defineHSE_VALUE((uint32_t)16000000)/*!ValueoftheExternaloscillatorinHz*/#endif/*HSE_VALUE*/#elifdefined(STM32F446xx)#if!defined(HSE_VALUE)#defineHSE_VALUE((uint32_t)8000000)/*!ValueoftheExternaloscillatorinHz*/#endif/*HSE_VALUE*/#endif/*STM32F40_41xxx||STM32F427_437xx||STM32F429_439xx||STM32F401xx||STM32F411xE*//***@briefInthefollowinglineadjusttheExternalHighSpeedoscillator(HSE)StartupTimeoutvalue*/#if!defined(HSE_STARTUP_TIMEOUT)#defineHSE_STARTUP_TIMEOUT((uint16_t)0x05000)/*!TimeoutforHSEstartup*/#endif/*HSE_STARTUP_TIMEOUT*/#if!defined(HSI_VALUE)#defineHSI_VALUE((uint32_t)16000000)/*!ValueoftheInternaloscillatorinHz*/#endif/*HSI_VALUE*/3、修改system_stm32f4xx.c文件中PLL_M,PLL_Q,PLL_N和PLL_P。对于STM32F40_41xxx,系统时钟为168MHZ,一般只需修改PLL_M的值,PLL_N默认为336,PLL_P默认为2,PLL_Q默认为7。/*************************PLLParameters*************************************/#ifdefined(STM32F40_41xxx)||defined(STM32F427_437xx)||defined(STM32F429_439xx)||defined(STM32F401xx)/*PLL_VCO=(HSE_VALUEorHSI_VALUE/PLL_M)*PLL_N*/#definePLL_M16
本文标题:STM32F4xx标准外设固件库
链接地址:https://www.777doc.com/doc-2860914 .html