版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
STM32庫(kù)文件STM32標(biāo)準(zhǔn)外設(shè)庫(kù)概述STM32標(biāo)準(zhǔn)外設(shè)庫(kù)之前的版本也稱固件函數(shù)庫(kù)或簡(jiǎn)稱固件庫(kù),是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設(shè)的性能特征。該函數(shù)庫(kù)還包括每一個(gè)外設(shè)的驅(qū)動(dòng)描述和應(yīng)用實(shí)例,為開(kāi)發(fā)者訪問(wèn)底層硬件提供了一個(gè)中間API,通過(guò)使用固件函數(shù)庫(kù),無(wú)需深入掌握底層硬件細(xì)節(jié),開(kāi)發(fā)者就可以輕松應(yīng)用每一個(gè)外設(shè)。因此,使用固態(tài)函數(shù)庫(kù)可以大大減少用戶的程序編寫(xiě)時(shí)間,進(jìn)而降低開(kāi)發(fā)本錢。每個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個(gè)器件的開(kāi)發(fā)都由一個(gè)通用API(applicationprogramminginterface應(yīng)用編程界面)驅(qū)動(dòng),API對(duì)該驅(qū)動(dòng)程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱都進(jìn)行了標(biāo)準(zhǔn)化。ST公司2007年10月發(fā)布了版本的固件庫(kù),之前的版本均支持該庫(kù)。2023年6月發(fā)布了版的固件庫(kù),從2023年9月推出的版本至今均使用版本的固件庫(kù)。以后的版本相對(duì)之前的版本改動(dòng)較大,本書(shū)使用目前較新的版本。使用標(biāo)準(zhǔn)外設(shè)庫(kù)開(kāi)發(fā)的優(yōu)勢(shì)簡(jiǎn)單的說(shuō),使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開(kāi)發(fā)最大的優(yōu)勢(shì)就在于可以使開(kāi)發(fā)者不用深入了解底層硬件細(xì)節(jié)就可以靈活標(biāo)準(zhǔn)的使用每一個(gè)外設(shè)。標(biāo)準(zhǔn)外設(shè)庫(kù)覆蓋了從GPIO到定時(shí)器,再到CAN、I2C、SPI、UART和ADC等等的所有標(biāo)準(zhǔn)外設(shè)。對(duì)應(yīng)的C源代碼只是用了最根本的C編程的知識(shí),所有代碼經(jīng)過(guò)嚴(yán)格測(cè)試,易于理解和使用,并且配有完整的文檔,非常方便進(jìn)行二次開(kāi)發(fā)和應(yīng)用。STM32F10XXX標(biāo)準(zhǔn)外設(shè)庫(kù)結(jié)構(gòu)與文件描述1.標(biāo)準(zhǔn)外設(shè)庫(kù)的文件結(jié)構(gòu)在上一小節(jié)中已經(jīng)介紹了使用標(biāo)準(zhǔn)外設(shè)庫(kù)的開(kāi)發(fā)的優(yōu)勢(shì),因此對(duì)標(biāo)準(zhǔn)外設(shè)庫(kù)的熟悉程度直接影響到程序的編寫(xiě),下面讓我們來(lái)認(rèn)識(shí)一下STM32F10XXX的標(biāo)準(zhǔn)外設(shè)庫(kù)。STM32F10XXX的標(biāo)準(zhǔn)外設(shè)庫(kù)經(jīng)歷眾多的更新目前已經(jīng)更新到最新的版本,開(kāi)發(fā)環(huán)境中自帶的標(biāo)準(zhǔn)外設(shè)庫(kù)為版本,本書(shū)中以比擬穩(wěn)定而且較新的版本為根底介紹標(biāo)準(zhǔn)外設(shè)庫(kù)的結(jié)構(gòu)??梢詮腟T的官方網(wǎng)站下載到各種版本的標(biāo)準(zhǔn)外設(shè)庫(kù),首先看一下版本標(biāo)準(zhǔn)外設(shè)庫(kù)的文件結(jié)構(gòu),如圖53所示。以上版本的文件結(jié)構(gòu)大致相同,每個(gè)版本可能略有調(diào)整。圖53STM32F標(biāo)準(zhǔn)外設(shè)庫(kù)文件結(jié)構(gòu)表54中介紹了每個(gè)文件夾所包含的主要內(nèi)容。表54STM32F標(biāo)準(zhǔn)外設(shè)庫(kù)文件夾描述STM32F10x_StdPeriph_Lib_V_htmresc本文件夾包含了所有的html頁(yè)面資源LibrariesCMSIS見(jiàn)表56STM32F10x_StdPeriph_Driverinc標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)頭文件src標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)源文件ProjectExamples標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)的完整例程TemplateMDK-ARMKEILRVMDK的工程模板例如RIDERaisonanceRIDE的工程模板例如EWARMIAREWARM的工程模板例如UtilitiesSTM3210-EVAL本文件夾包含了用于STM3210B-EVAL和STM3210E-EVAL評(píng)估板的專用驅(qū)動(dòng)標(biāo)準(zhǔn)外設(shè)庫(kù)的第一局部是CMSIS和STM32F10x_StdPeriph_Driver,CMSIS是獨(dú)立于供給商的Cortex-M處理器系列硬件抽象層,為芯片廠商和中間件供給商提供了簡(jiǎn)單的處理器軟件接口,簡(jiǎn)化了軟件復(fù)用工作,降低了Cortex-M上操作系統(tǒng)的移植難度,并減少了新入門(mén)的微控制器開(kāi)發(fā)者的學(xué)習(xí)曲線和新產(chǎn)品的上市時(shí)間。STM32F10x_StdPeriph_Driver那么包括了分別對(duì)應(yīng)包括了所有外設(shè)對(duì)應(yīng)驅(qū)動(dòng)函數(shù),這些驅(qū)動(dòng)函數(shù)均使用C語(yǔ)言編寫(xiě),并提供了統(tǒng)一的易于調(diào)用的函數(shù)接口,供開(kāi)發(fā)者使用。Project文件夾中那么包括了ST官方的所有例程和基于不同編譯器的工程模板,這些例程是學(xué)習(xí)和使用STM32的重要參考。Utilities包含了相關(guān)評(píng)估板的例如程序和驅(qū)動(dòng)函數(shù),供使用官方評(píng)估板的開(kāi)發(fā)者使用,很多驅(qū)動(dòng)函數(shù)同樣可以作為學(xué)習(xí)的重要參考。STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫(kù)體系結(jié)構(gòu)如圖54所示。圖中很好的展示了各層以及具體文件之間的聯(lián)系,各文件的具體功能說(shuō)明如表55所示。圖54STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫(kù)體系結(jié)構(gòu)表55文件功能說(shuō)明文件名功能描述具體功能說(shuō)明Cortex-M3內(nèi)核及其設(shè)備文件訪問(wèn)Cortex-M3內(nèi)核及其設(shè)備:NVIC,SysTick等訪問(wèn)Cortex-M3的CPU存放器和內(nèi)核外設(shè)的函數(shù)stm32f微控制器專用頭文件這個(gè)文件包含了STM32F10x全系列所有外設(shè)存放器的定義〔存放器的基地址和布局〕、位定義、中斷向量表、存儲(chǔ)空間的地址映射等system_stm32fsystem_stm32f微控制器專用系統(tǒng)文件函數(shù)SystemInit,用來(lái)初始化微控制器函數(shù)Sysem_ExtMemCtl,用來(lái)配置外部存儲(chǔ)器控制器。它位于文件startup_stm32f10x_xx.s/.c,在跳轉(zhuǎn)到main前調(diào)用SystemFrequncy,該值代表系統(tǒng)時(shí)鐘頻率startup_stm32f編譯器啟動(dòng)代碼微控制器專用的中斷處理程序列表(與頭文件一致)弱定義(Weak)的中斷處理程序默認(rèn)函數(shù)(可以被用戶代碼覆蓋)該文件是與編譯器相關(guān)的stm32f固件庫(kù)配置文件通過(guò)更改包含的外設(shè)頭文件來(lái)選擇固件庫(kù)所使用的外設(shè),在新建程序和進(jìn)行功能變更之前應(yīng)當(dāng)首先修改對(duì)應(yīng)的配置。stm32fstm32f外設(shè)中斷函數(shù)文件用戶可以相應(yīng)的參加自己的中斷程序的代碼,對(duì)于指向同一個(gè)中斷向量的多個(gè)不同中斷請(qǐng)求,用戶可以通過(guò)判斷外設(shè)的中斷標(biāo)志位來(lái)確定準(zhǔn)確的中斷源,執(zhí)行相應(yīng)的中斷效勞函數(shù)。stm32fstm32f外設(shè)驅(qū)動(dòng)函數(shù)文件包括了相關(guān)外設(shè)的初始化配置和局部功能應(yīng)用函數(shù),這局部是進(jìn)行編程功能實(shí)現(xiàn)的重要組成局部。用戶文件用戶程序文件,通過(guò)標(biāo)準(zhǔn)外設(shè)庫(kù)提供的接口進(jìn)行相應(yīng)的外設(shè)配置和功能設(shè)計(jì)。2.基于CMSIS標(biāo)準(zhǔn)的軟件架構(gòu)根據(jù)調(diào)查研究,軟件開(kāi)發(fā)已經(jīng)被嵌入式行業(yè)公認(rèn)為最主要的開(kāi)發(fā)本錢。對(duì)于ARM公司來(lái)說(shuō),一個(gè)ARM內(nèi)核往往會(huì)授權(quán)給多個(gè)廠家,生產(chǎn)種類繁多的產(chǎn)品,如果沒(méi)有一個(gè)通用的軟件接口標(biāo)準(zhǔn),那么當(dāng)開(kāi)發(fā)者在使用不同廠家的芯片時(shí)將極大的增加了軟件開(kāi)發(fā)本錢,因此,ARM與Atmel、IAR、Keil、hami-naryMicro、Micrium、NXP、SEGGER和ST等諸多芯片和軟件廠商合作,將所有Cortex芯片廠商產(chǎn)品的軟件接口標(biāo)準(zhǔn)化,制定了CMSIS標(biāo)準(zhǔn)。此舉意在降低軟件開(kāi)發(fā)本錢,尤其針對(duì)新設(shè)備工程開(kāi)發(fā),或者將已有軟件移植到其他芯片廠商提供的基于Cortex處理器的微控制器的情況。有了該標(biāo)準(zhǔn),芯片廠商就能夠?qū)⑺麄兊馁Y源專注于產(chǎn)品外設(shè)特性的差異化,并且消除對(duì)微控制器進(jìn)行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)的需求,從而到達(dá)降低開(kāi)發(fā)本錢的目的。如圖55所示,基于CMSIS標(biāo)準(zhǔn)的軟件架構(gòu)主要分為以下4層:用戶應(yīng)用層、操作系統(tǒng)及中間件接口層、CMSIS層、硬件存放器層。其中CMSIS層起著承上啟下的作用:一方面該層對(duì)硬件存放器層進(jìn)行統(tǒng)一實(shí)現(xiàn),屏蔽了不同廠商對(duì)Cortex-M系列微處理器核內(nèi)外設(shè)存放器的不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和應(yīng)用層提供接口,簡(jiǎn)化了應(yīng)用程序開(kāi)發(fā)難度,使開(kāi)發(fā)人員能夠在完全透明的情況下進(jìn)行應(yīng)用程序開(kāi)發(fā)。也正是如此,CMSIS層的實(shí)現(xiàn)相對(duì)復(fù)雜。圖55CMSIS標(biāo)準(zhǔn)的軟件架構(gòu)層主要分為以下3個(gè)局部:(1)核內(nèi)外設(shè)訪問(wèn)層〔CPAL,CorePeripheralAccessLayer〕:該層由ARM負(fù)責(zé)實(shí)現(xiàn)。包括對(duì)存放器名稱、地址的定義,對(duì)核存放器、NVIC、調(diào)試子系統(tǒng)的訪問(wèn)接口定義以及對(duì)特殊用途存放器的訪問(wèn)接口〔例如:CONTROL,xPSR〕定義。由于對(duì)特殊存放器的訪問(wèn)以內(nèi)聯(lián)方式定義,所以針對(duì)不同的編譯器ARM統(tǒng)一用來(lái)屏蔽差異。該層定義的接口函數(shù)均是可重入的。(2)片上外設(shè)訪問(wèn)層〔DPAL,DevicePeripheralAccessLayer〕:該層由芯片廠商負(fù)責(zé)實(shí)現(xiàn)。該層的實(shí)現(xiàn)與CPAL類似,負(fù)責(zé)對(duì)硬件存放器地址以及外設(shè)訪問(wèn)接口進(jìn)行定義。該層可調(diào)用CPAL層提供的接口函數(shù)同時(shí)根據(jù)設(shè)備特性對(duì)異常向量表進(jìn)行擴(kuò)展,以處理相應(yīng)外設(shè)的中斷請(qǐng)求。(3)外設(shè)訪問(wèn)函數(shù)〔AFP,AccessFunctionsforPeripherals〕:該層也由芯片廠商負(fù)責(zé)實(shí)現(xiàn),主要是提供訪問(wèn)片上外設(shè)的訪問(wèn)函數(shù),這一局部是可選的。對(duì)一個(gè)Cortex-M微控制系統(tǒng)而言,CMSIS通過(guò)以上三個(gè)局部實(shí)現(xiàn)了:l定義了訪問(wèn)外設(shè)存放器和異常向量的通用方法;l定義了核內(nèi)外設(shè)的存放器名稱和核異常向量的名稱;l為RTOS核定義了與設(shè)備獨(dú)立的接口,包括Debug通道。這樣芯片廠商就能專注于對(duì)其產(chǎn)品的外設(shè)特性進(jìn)行差異化,并且消除他們對(duì)微控制器進(jìn)行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)需求,以到達(dá)低本錢開(kāi)發(fā)的目的。CMSIS中的具體文件結(jié)構(gòu)如表56所示。表56CMSIS文件夾結(jié)構(gòu)CMSISCoreDocumentationCMSIS文檔CM3StartuparmMDKARM編譯器啟動(dòng)文件startup_stm32f10x_hd.s:大容量產(chǎn)品啟動(dòng)文件startup_stm32f10x_md.s:中容量產(chǎn)品啟動(dòng)文件startup_stm32f10x_ld.s:小容量產(chǎn)品啟動(dòng)文件gcc_ride7GCC編譯器啟動(dòng)文件iarIAR編譯器啟動(dòng)文件TrueSTUDIOTrueSTUDIO編譯器啟動(dòng)文件本文件夾包含STMF10xxxCMSIS文件:微控制器外設(shè)訪問(wèn)層和內(nèi)核設(shè)備訪問(wèn)層::CMSIS的Cortex-M3內(nèi)核設(shè)備訪問(wèn)層頭文件:CMSIS的Cortex-M3內(nèi)核設(shè)備訪問(wèn)層源文件stm32f:CMSIS的Cortex-M3STM32f10xxx微控制器外設(shè)訪問(wèn)層頭文件system_stm32f:CMSIS的Cortex-M3STM32f10xxx微控制器外設(shè)訪問(wèn)層頭文件system_stm32f:CMSIS的Cortex-M3STM32f10xxx微控制器外設(shè)訪問(wèn)層源文件在實(shí)際開(kāi)發(fā)過(guò)程中,根據(jù)應(yīng)用程序的需要,可以采取2種方法使用標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib):(1)使用外設(shè)驅(qū)動(dòng):這時(shí)應(yīng)用程序開(kāi)發(fā)基于外設(shè)驅(qū)動(dòng)的API(應(yīng)用編程接口)。用戶只需要配置文件〞stm32f10x_conf.h〞,并使用相應(yīng)的文件〞stm32f10x_ppp.h/.c〞即可。(2)不使用外設(shè)驅(qū)動(dòng):這時(shí)應(yīng)用程序開(kāi)發(fā)基于外設(shè)的存放器結(jié)構(gòu)和位定義文件。這兩種方法的優(yōu)缺點(diǎn)在“使用標(biāo)準(zhǔn)外設(shè)庫(kù)開(kāi)發(fā)的優(yōu)勢(shì)〞小節(jié)中已經(jīng)有了具體的介紹,這里仍要說(shuō)明的是,使用使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開(kāi)發(fā)可以極大的減小軟件開(kāi)發(fā)的工作量,也是目前嵌入式系統(tǒng)開(kāi)發(fā)的一個(gè)趨勢(shì)。標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib)支持STM32F10xxx系列全部成員:大容量,中容量和小容量產(chǎn)品。從表56中也可以看出,啟動(dòng)文件已經(jīng)對(duì)不同的系列進(jìn)行了劃分,實(shí)際開(kāi)發(fā)中根據(jù)使用的STM32產(chǎn)品具體型號(hào),用戶可以通過(guò)文件〞stm32f10x.h〞中的預(yù)處理define或者通過(guò)開(kāi)發(fā)環(huán)境中的全局設(shè)置來(lái)配置標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib),一個(gè)define對(duì)應(yīng)一個(gè)產(chǎn)品系列。下面列出支持的產(chǎn)品系列STM32F10x_LD:STM32小容量產(chǎn)品STM32F10x_MD:STM32中容量產(chǎn)品STM32F10x_HD:STM32大容量產(chǎn)品在庫(kù)文件中這些define的具體作用范圍是:l文件“stm3210f.h〞中的中斷IRQ定義l啟動(dòng)文件中的向量表,小容量,中容量,大容量產(chǎn)品各有一個(gè)啟動(dòng)文件l外設(shè)存儲(chǔ)器映像和存放器物理地址l產(chǎn)品設(shè)置:外部晶振(HSE)的值等l系統(tǒng)配置函數(shù)因此通過(guò)宏定義這種方式,可以使標(biāo)準(zhǔn)外設(shè)庫(kù)適用于不同系列的產(chǎn)品,同時(shí)也方便與不同產(chǎn)品之間的軟件移植,極大的方便了軟件的開(kāi)發(fā)。STM32F10XXX標(biāo)準(zhǔn)外設(shè)庫(kù)的使用標(biāo)準(zhǔn)外設(shè)庫(kù)中包含了眾多的變量定義和功能函數(shù),如果不能了解他們的命名標(biāo)準(zhǔn)和使用規(guī)律將會(huì)給編程帶來(lái)很大的麻煩,本節(jié)將主要表達(dá)標(biāo)準(zhǔn)外設(shè)庫(kù)中的相關(guān)標(biāo)準(zhǔn),通過(guò)這些標(biāo)準(zhǔn)的學(xué)習(xí)可以更加靈活的使用固件庫(kù),同時(shí)也將極大增強(qiáng)程序的標(biāo)準(zhǔn)性和易讀性,同時(shí)標(biāo)準(zhǔn)外設(shè)庫(kù)中的這種標(biāo)準(zhǔn)也值得我們?cè)谶M(jìn)行其他相關(guān)的開(kāi)發(fā)時(shí)使用和借鑒。1.縮寫(xiě)定義標(biāo)準(zhǔn)外設(shè)庫(kù)中的主要外設(shè)均采用了縮寫(xiě)的形式,通過(guò)這些縮寫(xiě)可以很容易的識(shí)別對(duì)應(yīng)的外設(shè)??s寫(xiě)外設(shè)/單元ADC模數(shù)轉(zhuǎn)換器BKP備份存放器CAN控制器局域網(wǎng)模塊CEC
CRCCRC計(jì)算單元DAC數(shù)模轉(zhuǎn)換器DBGMCU調(diào)試支持DMA直接內(nèi)存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲(chǔ)器FSMC靈活的靜態(tài)存儲(chǔ)器控制器GPIO通用輸入輸出I2CI2C接口IWDG獨(dú)立看門(mén)狗PWR電源/功耗控制RCC復(fù)位與時(shí)鐘控制器RTC實(shí)時(shí)時(shí)鐘SDIOSDIO接口SPI串行外設(shè)接口TIM定時(shí)器USART通用同步/異步收發(fā)器WWDG窗口看門(mén)狗2.命名規(guī)那么標(biāo)準(zhǔn)外設(shè)庫(kù)遵從以下命名規(guī)那么PPP表示任一外設(shè)縮寫(xiě),例如:ADC。源程序文件和頭文件命名都以“stm32f10x_〞作為開(kāi)頭,例如:stm32f。常量?jī)H被應(yīng)用于一個(gè)文件的,定義于該文件中;被應(yīng)用于多個(gè)文件的,在對(duì)應(yīng)頭文件中定義。所有常量都由英文字母大寫(xiě)書(shū)寫(xiě)。存放器作為常量處理。他們的命名都由英文字母大寫(xiě)書(shū)寫(xiě)。在大多數(shù)情況下,他們采用與縮寫(xiě)標(biāo)準(zhǔn)一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫(xiě)加下劃線為開(kāi)頭。每個(gè)單詞的第一個(gè)字母都由英文字母大寫(xiě)書(shū)寫(xiě),例如:SPI_SendData。在函數(shù)名中,只允許存在一個(gè)下劃線,用以分隔外設(shè)縮寫(xiě)和函數(shù)名的其它局部。對(duì)于函數(shù)命名,總的來(lái)說(shuō)有以下規(guī)那么:l名為PPP_Init的函數(shù),其功能是根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP,例如TIM_Init.l名為PPP_DeInit的函數(shù),其功能為復(fù)位外設(shè)PPP的所有存放器至缺省值,例如TIM_DeInit.l名為PPP_Init的函數(shù),其功能為通過(guò)設(shè)置PPP_InitTypeDef結(jié)構(gòu)中的各種參數(shù)來(lái)定義外設(shè)的功能,例如:USART_Init.l名為PPP_Cmd的函數(shù),其功能為使能或者失能外設(shè)PPP,例如:SPI_Cmd.l名為PPP_ITConfig的函數(shù),其功能為使能或者失能來(lái)自外設(shè)PPP某中斷源,例如:RCC_ITConfig.l名為PPP_DMAConfig的函數(shù),其功能為使能或者失能外設(shè)PPP的DMA接口,例如:TIM1_DMAConfig.l用以配置外設(shè)功能的函數(shù),總是以字符串“Config〞結(jié)尾,例如GPIO_PinRemapConfig.l名為PPP_GetFlagStatus的函數(shù),其功能為檢查外設(shè)PPP某標(biāo)志位被設(shè)置與否,例如:I2C_GetFlagStatus.l名為PPP_ClearFlag的函數(shù),其功能為去除外設(shè)PPP標(biāo)志位,例如:I2C_ClearFlag.l名為PPP_GetITStatus的函數(shù),其功能為判斷來(lái)自外設(shè)PPP的中斷發(fā)生與否,例如:I2C_GetITStatus.l名為PPP_ClearITPendingBit的函數(shù),其功能為去除外設(shè)PPP中斷待處理標(biāo)志位,例如:I2C_ClearITPendingBit.這樣的命名方式非常便于程序的編寫(xiě)和閱讀,以標(biāo)準(zhǔn)外設(shè)庫(kù)中的例如函數(shù)為例,下面摘錄了STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA\mian.c中的一段程序。DMA_InitTypeDefDMA_InitStructure;/*DMA1channel1configuration----------------------------------------------*/DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&ADC1ConvertedValue;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize=1;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;DMA_InitStructure.DMA_Priority=DMA_Priority_High;2M=DMA_M2M_Disable;DMA_Init(DMA1_Channel1,&DMA_InitStructure);/*EnableDMA1channel1*/DMA_Cmd(DMA1_Channel1,ENABLE);這段程序完成了DMA1通道的配置,首先定義了DMA_InitTypeDMA_InitStructure,接著配置DMA_InitType的各種參數(shù),各參數(shù)的命名方式也均使用約定的命名方式,從命名就能夠很容易的看出各參數(shù)所指代的具體功能。功能參數(shù)配置完成后,使用DMA_Init(DMA1_Channel1,&DMA_InitStructure);完成相應(yīng)外設(shè)的初始化,最后使用DMA_Cmd(DMA1_Channel1,ENABLE)
使能相應(yīng)外設(shè)。從這個(gè)例子就能夠很容易的看出標(biāo)準(zhǔn)外設(shè)庫(kù)這種標(biāo)準(zhǔn)化的命名規(guī)那么給編寫(xiě)和閱讀程序帶來(lái)的好處。3.變量定義在早期的版本中有24個(gè)變量定義,在Keil的安裝根目錄下,可以找到對(duì)應(yīng)的定義,路徑為:Keil\ARM\INC\ST\STM32F10x\stm32f/*Includes------------------------------------------------------------------*//*Exportedtypes------------------------------------------------------------*/typedefsignedlongs32;typedefsignedshorts16;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*/以后的版本中使用了CMSIS數(shù)據(jù)類型,變量的定義有所不同,但是出于兼容舊版本的目的,以上的數(shù)據(jù)類型仍然兼容。CMSIS的IO類型限定詞如表57所示,CMSIS和STM32固件庫(kù)的數(shù)據(jù)類型比照方表58所示。這些數(shù)據(jù)類型可以在STM32F10x_StdPeriph_Lib_V\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f中找到具體的定義,此局部定義如下。/*!<STM32F10xStandardPeripheralLibraryoldtypes(maintainedforlegacypurpose)*/typedefint32_ts32;typedefint16_ts16;typedefint8_ts8;typedefconstint32_tsc32;/*!<ReadOnly*/typedefconstint16_tsc16;/*!<ReadOnly*/typedefconstint8_tsc8;/*!<ReadOnly*/typedef__IOint32_tvs32;typedef__IOint16_tvs16;typedef__IOint8_tvs8;typedef__Iint32_tvsc32;/*!<ReadOnly*/typedef__Iint16_tvsc16;/*!<ReadOnly*/typedef__Iint8_tvsc8;/*!<ReadOnly*/typedefuint32_tu32;typedefuint16_tu16;typedefuint8_tu8;typedefconstuint32_tuc32;/*!<ReadOnly*/typedefconstuint16_tuc16;/*!<ReadOnly*/typedefconstuint8_tuc8;/*!<ReadOnly*/typedef__IOuint32_tvu32;typedef__IOuint16_tvu16;typedef__IOuint8_tvu8;typedef__Iuint32_tvuc32;/*!<ReadOnly*/typedef__Iuint16_tvuc16;/*!<ReadOnly*/typedef__Iuint8_tvuc8;/*!<ReadOnly*/表57CMSISIO類型限定詞IO類限定詞#define描述_Ivolatileconst只讀訪問(wèn)_Ovolatile只寫(xiě)訪問(wèn)_IOvolatile讀和寫(xiě)訪問(wèn)表58固件庫(kù)與CMSIS數(shù)據(jù)類型比照固件庫(kù)類型CMSIS類型描述s32int32_t易揮發(fā)只讀有符號(hào)32位數(shù)據(jù)s16int16_t易揮發(fā)只讀有符號(hào)16位數(shù)據(jù)s8int8_t易揮發(fā)只讀有符號(hào)8位數(shù)據(jù)sc32constint32_t只讀有符號(hào)32位數(shù)據(jù)sc16constint16_t只讀有符號(hào)16位數(shù)據(jù)sc8constint8_t只讀有符號(hào)8位數(shù)據(jù)vs32_IOint32_t易揮發(fā)讀寫(xiě)訪問(wèn)有符號(hào)32位數(shù)據(jù)vs16_IOint16_t易揮發(fā)讀寫(xiě)訪問(wèn)有符號(hào)16位數(shù)據(jù)vs8_IOint8_t易揮發(fā)讀寫(xiě)訪問(wèn)有符號(hào)8位數(shù)據(jù)vsc32_Iint32_t易揮發(fā)只讀有符號(hào)32位數(shù)據(jù)vsc16_Iint16_t易揮發(fā)只讀有符號(hào)16位數(shù)據(jù)vsc8_Iint8_t易揮發(fā)只讀有符號(hào)8位數(shù)據(jù)u32uint32_t無(wú)符號(hào)32位數(shù)據(jù)u16uint16_t無(wú)符號(hào)16位數(shù)據(jù)u8uint8_t無(wú)符號(hào)8位數(shù)據(jù)uc32constuint32_t只讀無(wú)符號(hào)32位數(shù)據(jù)uc16constuint16_t只讀無(wú)符號(hào)16位數(shù)據(jù)uc8constuint8_t只讀無(wú)符號(hào)8位數(shù)據(jù)vu32_IOuint32_t易揮發(fā)讀寫(xiě)訪問(wèn)無(wú)符號(hào)32位數(shù)據(jù)vu16_IOuint16_t易揮發(fā)讀寫(xiě)訪問(wèn)無(wú)符號(hào)16位數(shù)據(jù)vu8_IOuint8_t易揮發(fā)讀寫(xiě)訪問(wèn)無(wú)符號(hào)8位數(shù)據(jù)vuc32_Iuint32_t易揮發(fā)只讀無(wú)符號(hào)32位數(shù)據(jù)vuc16_Iuint16_t易揮發(fā)只讀無(wú)符號(hào)16位數(shù)據(jù)vuc8_Iuint8_t易揮發(fā)只讀無(wú)符號(hào)8位數(shù)據(jù)stm32f文件中還包含了常用的布爾形變量定義,如:typedefenum{RESET=0,SET=!RESET}FlagStatus,ITStatus;typedefenum{DISABLE=0,ENABLE=!DISABLE}FunctionalState;#defineIS_FUNCTIONAL_STATE(STATE)(((STATE)==DISABLE)||((STATE)==ENABLE))typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;不同版本的標(biāo)準(zhǔn)外設(shè)庫(kù)的變量定義略有不同,如版本中就沒(méi)有之前版本的TRUE和FALSE的定義,用戶也可以根據(jù)自己的需求按照上面的格式定義自己的布爾形變量。在使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開(kāi)發(fā)遇到相關(guān)的定義問(wèn)題時(shí)應(yīng)首先找到對(duì)應(yīng)的頭文件定義。4.使用步驟前面幾個(gè)小節(jié)已經(jīng)詳細(xì)介紹了標(biāo)準(zhǔn)外設(shè)庫(kù)的組成結(jié)構(gòu)以及局部主要文件的功能描述,那么如果在開(kāi)發(fā)中使用標(biāo)準(zhǔn)外設(shè)庫(kù)需要哪些描述呢?下面就進(jìn)行簡(jiǎn)要的介紹,這兒介紹的使用方法是與開(kāi)發(fā)環(huán)境無(wú)關(guān)的,在不同的開(kāi)發(fā)環(huán)境中可能在操作方式上略有不同,但是總體的流程都是一樣的,下一小節(jié)將介紹在MDKARM開(kāi)發(fā)環(huán)境下使用標(biāo)準(zhǔn)外設(shè)庫(kù)的詳細(xì)過(guò)程。首先新建一個(gè)工程并設(shè)置工具鏈對(duì)應(yīng)的啟動(dòng)文件,可以使用標(biāo)準(zhǔn)外設(shè)庫(kù)中提供的模板,也可以自己根據(jù)自己的需求新建。標(biāo)準(zhǔn)外設(shè)庫(kù)中已經(jīng)提供了不同工具鏈對(duì)應(yīng)的文件,位于STM32F10x_StdPeriph_Lib_V\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup目錄下。其次按照使用產(chǎn)品的具體型號(hào)選擇具體的啟動(dòng)文件,參加工程。文件主要按照使用產(chǎn)品的容量進(jìn)行區(qū)分,根據(jù)產(chǎn)品容量進(jìn)行選擇即可。每個(gè)文件的具體含義可以在“stm32f10x.h〞文件中找到對(duì)應(yīng)的說(shuō)明,摘錄如下:#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*//*#defineSTM32F10X_LD_VL*//*!<STM32F10X_LD_VL:STM32LowdensityValueLinedevices*//*#defineSTM32F10X_MD*//*!<STM32F10X_MD:STM32Mediumdensitydevices*//*#defineSTM32F10X_MD_VL*//*!<STM32F10X_MD_VL:STM32MediumdensityValueLinedevices*//*#defineSTM32F10X_HD*//*!<STM32F10X_HD:STM32Highdensitydevices*//*#defineSTM32F10X_HD_VL*//*!<STM32F10X_HD_VL:STM32Highdensityvaluelinedevices*//*#defineSTM32F10X_XL*//*!<STM32F10X_XL:STM32XL-densitydevices*//*#defineSTM32F10X_CL*//*!<STM32F10X_CL:STM32Connectivitylinedevices*/#endif/*Tip:Toavoidmodifyingthisfileeachtimeyouneedtoswitchbetweenthesedevices,youcandefinethedeviceinyourtoolchaincompilerpreprocessor.-Low-densitydevicesareSTM32F101xx,STM32F102xxandSTM32F103xxmicrocontrollerswheretheFlashmemorydensityrangesbetween16and32Kbytes.-Low-densityvaluelinedevicesareSTM32F100xxmicrocontrollerswheretheFlashmemorydensityrangesbetween16and32Kbytes.-Medium-densitydevicesareSTM32F101xx,STM32F102xxandSTM32F103xxmicrocontrollerswheretheFlashmemorydensityrangesbetween64and128Kbytes.-Medium-densityvaluelinedevicesareSTM32F100xxmicrocontrollerswheretheFlashmemorydensityrangesbetween64and128Kbytes.-High-densitydevicesareSTM32F101xxandSTM32F103xxmicrocontrollerswheretheFlashmemorydensityrangesbetween256and512Kbytes.-High-densityvaluelinedevicesareSTM32F100xxmicrocontrollerswheretheFlashmemorydensityrangesbetween256and512Kbytes.-XL-densitydevicesareSTM32F101xxandSTM32F103xxmicrocontrollerswheretheFlashmemorydensityrangesbetween512and1024Kbytes.-ConnectivitylinedevicesareSTM32F105xxandSTM32F107xxmicrocontrollers.*/“stm32f10x.h〞是整個(gè)標(biāo)準(zhǔn)外設(shè)庫(kù)的入口文件,這個(gè)文件包含了STM32F10x全系列所有外設(shè)存放器的定義〔存放器的基地址和布局〕、位定義、中斷向量表、存儲(chǔ)空間的地址映射等。為了是這個(gè)文件適用于不同系列的產(chǎn)品,程序中是通過(guò)宏定義來(lái)實(shí)現(xiàn)不同產(chǎn)品的匹配的,上面這段程序的注釋中已經(jīng)詳細(xì)給出了每個(gè)啟動(dòng)文件所對(duì)應(yīng)的產(chǎn)品系列,與之對(duì)應(yīng),也要相應(yīng)的修改這個(gè)入口文件,需要根據(jù)所使用的產(chǎn)品系列正確的注釋/去掉相應(yīng)的注釋define。在這段程序的下方同樣有這樣的一個(gè)注釋程序/*#defineUSE_STDPERIPH_DRIVER*/
用于選擇是否使用標(biāo)準(zhǔn)外設(shè)庫(kù),如果保存這個(gè)注釋,那么用戶開(kāi)發(fā)程序可以基于直接訪問(wèn)“stm32f10x.h〞中定義的外設(shè)存放器,所有的操作均基于存放器完成,目前不使用固件庫(kù)的單片機(jī)開(kāi)發(fā),如51、AVR、MSP430等其實(shí)都是采用此種方式,通過(guò)在對(duì)應(yīng)型號(hào)的頭文件中進(jìn)行外設(shè)存放器等方面的定義,從而在程序中對(duì)相應(yīng)的存放器操作完成相應(yīng)的功能設(shè)計(jì)。如果去掉/*#defineUSE_STDPERIPH_DRIVER*/的注釋,那么是使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開(kāi)發(fā),用戶需要使用在文件“stm32f10x_conf.h〞中,選擇要用的外設(shè),外設(shè)同樣是通過(guò)注釋/去掉注釋的方式來(lái)選擇。例如程序如下:/*Uncommentthelinebelowtoenableperipheralheaderfileinclusion*/#include"stm32f10x_adc.h"/*#include"stm32f10x_bkp.h"*//*#include"stm32f10x_can.h"*//*#include"stm32f10x_cec.h"*//*#inclu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省南通市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版期中考試((上下)學(xué)期)試卷及答案
- 遼寧省葫蘆島市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版能力評(píng)測(cè)(上學(xué)期)試卷及答案
- 化學(xué)史期末作業(yè)化學(xué)史發(fā)展概論教案
- 2024年冶煉助劑項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 高中化學(xué)第四章非金屬及其化合物教案及練習(xí)新人教版必修
- 上海市市轄區(qū)(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版小升初模擬(下學(xué)期)試卷及答案
- 五年級(jí)數(shù)學(xué)(小數(shù)四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)及答案
- 電冰箱、空調(diào)器安裝與維護(hù)電子教案 2.3 電冰箱的故障判斷
- 電線電纜檢測(cè)培訓(xùn)
- DB11T 1102-2014 城市軌道交通工程規(guī)劃核驗(yàn)測(cè)量規(guī)程
- 七十歲以上老年人三力測(cè)試駕考題目答案
- 第三單元 分?jǐn)?shù)除法(單元檢測(cè))-2023-2024學(xué)年六年級(jí)上冊(cè)數(shù)學(xué) 人教版
- 護(hù)理醫(yī)學(xué)護(hù)理美學(xué)課件-護(hù)理審美教育
- 汽車火災(zāi)的應(yīng)急處理方法
- XX食品公司計(jì)件工資方案執(zhí)行說(shuō)明
- 《電動(dòng)汽車用動(dòng)力蓄電池安全要求》報(bào)批稿
- 2023中國(guó)腎癌診療規(guī)范
- 經(jīng)濟(jì)法概論(第四版) 全套課件 第1-11章 經(jīng)濟(jì)法基本理論- 知識(shí)產(chǎn)權(quán)法律制度
- 彩釉珍品工藝
- 蟲(chóng)媒傳染病防控知識(shí)考試題庫(kù)(含答案)
- 提高工作中的決策與執(zhí)行能力
評(píng)論
0/150
提交評(píng)論