一、標準固件庫簡介
本文下載的是STM32F4xx_DSP_StdPeriph_Lib_V1.5.0,其文件夾如下圖所示:
其中Project文件夾為各個開發(fā)環(huán)境(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)。在CMSISDeviceSTSTM32F4xxInclude中
system_stm32f4xx.h :system_stm32f4xx.c的頭文件。在CMSISDeviceSTSTM32F4xxInclude中
system_stm32f4xx.c :stm32f4的系統(tǒng)時鐘配置。在CMSISDeviceSTSTM32F4xxSourceTemplates中
startup_stm32f40_41xxx.s:啟動文件:設定SP的初始值;設置PC的初始值;設置中斷向量表的地址;配置時鐘;設置堆棧;調用main。
這個啟動文件先調用system_stm32f4xx.c里面的systeminit()在調用main()之前。
在CMSISDeviceSTSTM32F4xxSourceTemplatesarm中。
對于STM32F4xx_StdPeriph_Driver,其重要源文件為:
stm32f4xx_ppp.h:外設頭文件。這里的ppp只是一個代碼,在實際上是具體的外設名字,如ADC,DMA等。在實際使用時根據所需的外設選擇性移植。
在STM32F4xx_StdPeriph_Driverinc中
stm32f4xx_ppp.c:外設源文件。這里的ppp只是一個代碼,在實際上是具體的外設名字,如ADC,DMA等。在實際使用時根據所需的外設選擇性移植。
在STM32F4xx_StdPeriph_Driversrc中
stm32f4xx_conf.h:外設驅動配置文件。通過修改該文件中所包含的外設頭文件,用戶啟動或禁用外設驅動。
此外,在此文件夾打開宏定義USE_FULL_ASSERT,通過預處理啟用或禁用標準外設庫運行時的故障檢測。
在ProjectSTM32F4xx_StdPeriph_Templates中。
stm32f4xx_it.h :頭文件。包括所有中斷處理程序原型。在ProjectSTM32F4xx_StdPeriph_Templates中。
stm32f4xx_it.c :中斷源程序模板,中斷函數的名稱要與啟動文件中中斷向量表的名稱一致。在ProjectSTM32F4xx_StdPeriph_Templates中。
此外,對于stm32f4的標準外設固件庫,在CMSIS文件夾中還有相應的DSP庫:DSP_Lib和Lib。DSP_Lib主要為DSP函數庫的實例和源碼;Lib為編譯好的,且對于不同內核的STM32系列MCU所使用的lib文件。
二、標準固件庫移植過程中的注意事項(這里以僅以Keil-MDK為例)
1、在stm32f4xx.h文件中選擇芯片以及宏定義USE_STDPERIPH_DRIVER。
2、根據實際的外部晶振修改stm32f4xx.h文件中默認的系統(tǒng)外部晶振時鐘HSE_VALU。在本例中使用了16MHz的外部晶振,因此設為16000000。
3、修改system_stm32f4xx.c文件中PLL_M,PLL_Q,PLL_N和PLL_P。
對于STM32F40_41xxx,系統(tǒng)時鐘為168MHZ,一般只需修改PLL_M的值,PLL_N默認為336(若主時鐘為168MHz則N值默認336,若主時鐘為180MHz則N值默認360),PLL_P默認為2,PLL_Q默認為7。
4、若需要使用FPU,則還需要在system_stm32f4xx.c中的SystemInit函數開頭添加相關語句,并在keil工程配置中選擇use FPU(Use Single Precision)
注意:__FPU_PRESENT == 1在stm32f4xx.h中已默認設置,__FPU_USED == 1在core_cm4.h中已默認設置。





