stm32f4xx標(biāo)準(zhǔn)外設(shè)固件庫
一、標(biāo)準(zhǔn)固件庫簡介
本文下載的是STM32F4xx_DSP_StdPeriph_Lib_V1.5.0,其文件夾如下圖所示:
其中Project文件夾為各個開發(fā)環(huán)境(MDK-ARM、EWARM、TrueSTUDIO)的模板工程,Utilities文件夾為官方評估板的標(biāo)準(zhǔn)固件庫應(yīng)用例程,而真正的標(biāo)準(zhǔn)固件庫在Libraries文件夾中。在Libraries文件夾中:CMSIS文件夾主要包含于內(nèi)核相關(guān)的文件;STM32F4xx_StdPeriph_Driver文件夾為STM32F4xx處理器外設(shè)相關(guān)的底層驅(qū)動。
以下為固件庫移植時CMSIS文件夾中的重要源文件:
core_cm4.h :內(nèi)核功能的定義,比如NVIC相關(guān)寄存器的結(jié)構(gòu)體和Systick配置。在CMSIS/Include中
core_cmFunc.h :內(nèi)核核心功能接口頭文件。在CMSIS/Include中
core_cmInstr.h :包含一些內(nèi)核核心專用指令。在CMSIS/Include中
core_cmSimd.h :包含與編譯器相關(guān)的處理。在CMSIS/Include中
stm32f4xx.h :包含了stm32f4的寄存器結(jié)構(gòu)體的定義(類似于c51的reg52.h)。在CMSISDeviceSTSTM32F4xxInclude中
system_stm32f4xx.h :system_stm32f4xx.c的頭文件。在CMSISDeviceSTSTM32F4xxInclude中
system_stm32f4xx.c :stm32f4的系統(tǒng)時鐘配置。在CMSISDeviceSTSTM32F4xxSourceTemplates中
startup_stm32f40_41xxx.s:啟動文件:設(shè)定SP的初始值;設(shè)置PC的初始值;設(shè)置中斷向量表的地址;配置時鐘;設(shè)置堆棧;調(diào)用main。
這個啟動文件先調(diào)用system_stm32f4xx.c里面的systeminit()在調(diào)用main()之前。
在CMSISDeviceSTSTM32F4xxSourceTemplatesarm中。
對于STM32F4xx_StdPeriph_Driver,其重要源文件為:
stm32f4xx_ppp.h:外設(shè)頭文件。這里的ppp只是一個代碼,在實際上是具體的外設(shè)名字,如ADC,DMA等。在實際使用時根據(jù)所需的外設(shè)選擇性移植。
在STM32F4xx_StdPeriph_Driverinc中
stm32f4xx_ppp.c:外設(shè)源文件。這里的ppp只是一個代碼,在實際上是具體的外設(shè)名字,如ADC,DMA等。在實際使用時根據(jù)所需的外設(shè)選擇性移植。
在STM32F4xx_StdPeriph_Driversrc中
stm32f4xx_conf.h:外設(shè)驅(qū)動配置文件。通過修改該文件中所包含的外設(shè)頭文件,用戶啟動或禁用外設(shè)驅(qū)動。
此外,在此文件夾打開宏定義USE_FULL_ASSERT,通過預(yù)處理啟用或禁用標(biāo)準(zhǔn)外設(shè)庫運行時的故障檢測。
在ProjectSTM32F4xx_StdPeriph_Templates中。
stm32f4xx_it.h :頭文件。包括所有中斷處理程序原型。在ProjectSTM32F4xx_StdPeriph_Templates中。
stm32f4xx_it.c :中斷源程序模板,中斷函數(shù)的名稱要與啟動文件中中斷向量表的名稱一致。在ProjectSTM32F4xx_StdPeriph_Templates中。
此外,對于stm32f4的標(biāo)準(zhǔn)外設(shè)固件庫,在CMSIS文件夾中還有相應(yīng)的DSP庫:DSP_Lib和Lib。DSP_Lib主要為DSP函數(shù)庫的實例和源碼;Lib為編譯好的,且對于不同內(nèi)核的STM32系列MCU所使用的lib文件。
二、標(biāo)準(zhǔn)固件庫移植過程中的注意事項(這里以僅以Keil-MDK為例)
1、在stm32f4xx.h文件中選擇芯片以及宏定義USE_STDPERIPH_DRIVER。
2、根據(jù)實際的外部晶振修改stm32f4xx.h文件中默認(rèn)的系統(tǒng)外部晶振時鐘HSE_VALU。在本例中使用了16MHz的外部晶振,因此設(shè)為16000000。
3、修改system_stm32f4xx.c文件中PLL_M,PLL_Q,PLL_N和PLL_P。
對于STM32F40_41xxx,系統(tǒng)時鐘為168MHZ,一般只需修改PLL_M的值,PLL_N默認(rèn)為336(若主時鐘為168MHz則N值默認(rèn)336,若主時鐘為180MHz則N值默認(rèn)360),PLL_P默認(rèn)為2,PLL_Q默認(rèn)為7。
4、若需要使用FPU,則還需要在system_stm32f4xx.c中的SystemInit函數(shù)開頭添加相關(guān)語句,并在keil工程配置中選擇use FPU(Use Single Precision)
注意:__FPU_PRESENT == 1在stm32f4xx.h中已默認(rèn)設(shè)置,__FPU_USED == 1在core_cm4.h中已默認(rèn)設(shè)置。