STM32固件庫(kù)詳細(xì)解析0925要點(diǎn)_第1頁(yè)
STM32固件庫(kù)詳細(xì)解析0925要點(diǎn)_第2頁(yè)
STM32固件庫(kù)詳細(xì)解析0925要點(diǎn)_第3頁(yè)
STM32固件庫(kù)詳細(xì)解析0925要點(diǎn)_第4頁(yè)
STM32固件庫(kù)詳細(xì)解析0925要點(diǎn)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余11頁(yè)可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、最近考試較多,教材編寫暫停了一下,之前寫了很多,只是每一章都感覺不是特別完整,最近 把其中的部分內(nèi)容貼岀來一下,歡迎指正。本文內(nèi)容基于我對(duì)固件庫(kù)的理解,按照便于理解的 順序進(jìn)行整理介紹,部分參考了固件庫(kù)的說明,但是也基本上重新表述并按照我理解的順序進(jìn) 行重新編寫。我的目的很簡(jiǎn)單,很多人寫教程只是告訴你怎么做,不會(huì)告訴你為什么這么做, 我就盡量吧前因后果都說清楚,這是我的岀發(fā)點(diǎn),水平所限,難免有很大的局限性,具體不足 歡迎指正。1.1.1 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ù)的開發(fā)的優(yōu)勢(shì),因此對(duì)標(biāo)準(zhǔn)外設(shè)庫(kù)的熟悉程度直接影響到程

2、序的編寫,下面讓我們來認(rèn)識(shí)一下STM32F10XXX的標(biāo)準(zhǔn)外設(shè)庫(kù)。STM32F10XXX 的標(biāo)準(zhǔn)外設(shè)庫(kù)經(jīng)歷眾多的更新目前已經(jīng)更新到最新的3.5版本,開發(fā)環(huán)境中自帶的標(biāo)準(zhǔn)外設(shè)庫(kù)為 2.0.3版本,本書中以比較穩(wěn)定而且較新的 V3.4版本為基礎(chǔ)介紹標(biāo) 準(zhǔn)外設(shè)庫(kù)的結(jié)構(gòu)。可以從ST的官方網(wǎng)站下載到各種版本的標(biāo)準(zhǔn)外設(shè)庫(kù),首先看一下3.4版本標(biāo)準(zhǔn)外設(shè)庫(kù)的文件結(jié)構(gòu),如圖5-3所示。3.0以上版本的文件結(jié)構(gòu)大致相同,每個(gè)版本可能略有調(diào)整。圖5-3 STM32F10XXX V3.4標(biāo)準(zhǔn)外設(shè)庫(kù)文件結(jié)構(gòu)表5-4中介紹了每個(gè)文件夾所包含的主要內(nèi)容。表5-4 STM32F10XXX V3.4標(biāo)準(zhǔn)外設(shè)庫(kù)文件夾描述STM3

3、2F10x_StdPeriph_Lib_V3.4.0htmresc本文件夾包含了所有的 html頁(yè)面資源LibrariesCMSIS見表5-6STM32F10x_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)的完整例程TemplateRIDEMDK-ARMKEIL RVMDK 的項(xiàng)目模板示例Raisonance RIDE 的項(xiàng)目模板示例EWARMIAR EWARM 的項(xiàng)目模板示例UtilitiesSTM3210-EVAL本文件夾包含了用于STM3210B-EVAL 和STM3210E-EVAL評(píng)估板的專用驅(qū)動(dòng)標(biāo)準(zhǔn)

4、外設(shè)庫(kù)的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver, CMSIS 是獨(dú)立于供應(yīng)商的Cortex-M處理器系列硬件抽象層,為芯片廠商和中間件供應(yīng)商提供了簡(jiǎn)單的處理器軟件接口,簡(jiǎn)化了軟件復(fù)用工作,降低了 Cortex-M 上操作系統(tǒng)的移植難度,并減 少了新入門的微控制器開發(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語言編寫,并提供了統(tǒng)一的易于調(diào)用的函數(shù)接口, 供開發(fā)者使用。Project 文件夾中則包括了 ST官方的所有例程和基于不同編譯器的項(xiàng)目模板,這些例

5、程是學(xué)習(xí)和使用STM32的重要參考。Utilities包含了相關(guān)評(píng)估板的示例程序和驅(qū)動(dòng)函數(shù),供使用官方評(píng)估板的開發(fā)者使用,很多驅(qū)動(dòng)函數(shù)同樣可以作為學(xué)習(xí)的重要參考。STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫(kù)體系結(jié)構(gòu)如圖5-4所示。圖中很好的展示了各層以及具體文件之間的聯(lián)系,各文件的具體功能說明如表5-5所示。 1I. L圖5-4 STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫(kù)體系結(jié)構(gòu)表5-5文件功能說明文件名功能描述具體功能說明core_cm3.hcore_cm3.cCortex-M3內(nèi)核及其設(shè)備文件訪問Cortex-M3 內(nèi)核及其設(shè)備:NVIC ,SysTick等訪問Cortex-M3 的CPU寄存器和內(nèi)核外設(shè)的函數(shù)

6、stm32f10x.h微控制器專用頭文件這個(gè)文件包含了 STM32F10x 全系列所有外設(shè)寄存 器的定義(寄存器的基地址和布局)、位定義、中斷 向量表、存儲(chǔ)空間的地址映射等system_stm32f10x.hsystem_stm32f10x.c微控制器專用系統(tǒng)文件函數(shù)SystemInit,用來初始化微控制器函數(shù)Sysem_ExtMemCtl,用來配置外部存儲(chǔ)器控制器。它位于文件 startup_stm32f10x_xx.s /.c,在跳轉(zhuǎn)到main前調(diào)用SystemFrequncy ,該值代表系統(tǒng)時(shí)鐘頻率startup_stm32f10x_Xd.s編譯器啟動(dòng)代碼微控制器專用的中斷處理程序列表(

7、與頭文件一致)弱定義(Weak)的中斷處理程序默認(rèn)函數(shù)(可以被用 戶代碼覆蓋)該文件是與編譯器相關(guān)的stm32f10x_conf.h固件庫(kù)配置文件通過更改包含的外設(shè)頭文件來選擇固件庫(kù)所使用的 外設(shè),在新建程序和進(jìn)行功能變更之前應(yīng)當(dāng)首先修改 對(duì)應(yīng)的配置。stm32f10x_it.hstm32f10x_it.c外設(shè)中斷函數(shù)文件用戶可以相應(yīng)的加入自己的中斷程序的代碼,對(duì)于指向同一個(gè)中斷向量的多個(gè)不同中斷請(qǐng)求,用戶可以通過判斷外設(shè)的中斷標(biāo)志位來確定準(zhǔn)確的中斷源,執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。stm32f10x_ppp.hstm32f10x_ppp.c外設(shè)驅(qū)動(dòng)函數(shù)文件包括了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用函

8、數(shù), 這部分是進(jìn)行編程功能實(shí)現(xiàn)的重要組成部分。Application.c用戶文件用戶程序文件,通過標(biāo)準(zhǔn)外設(shè)庫(kù)提供的接口進(jìn)行相應(yīng) 的外設(shè)配置和功能設(shè)計(jì)。2.基于CMSIS標(biāo)準(zhǔn)的軟件架構(gòu)根據(jù)調(diào)查研究,軟件開發(fā)已經(jīng)被嵌入式行業(yè)公認(rèn)為最主要的開發(fā)成本。對(duì)于ARM公司來說,一個(gè)ARM內(nèi)核往往會(huì)授權(quán)給多個(gè)廠家,生產(chǎn)種類繁多的產(chǎn)品,如果沒有一個(gè)通用的軟件接 口標(biāo)準(zhǔn),那么當(dāng)開發(fā)者在使用不同廠家的芯片時(shí)將極大的增加了軟件開發(fā)成本,因此,ARM與 Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER 和 ST 等諸多芯片和軟件廠商合作,將所有Cortex芯片廠商產(chǎn)品的

9、軟件接口標(biāo)準(zhǔn)化,制定了 CMSIS標(biāo)準(zhǔn)。此舉意在降低軟件開發(fā)成本,尤其針對(duì)新設(shè)備項(xiàng)目開發(fā),或者將已有軟件移植到其他芯片廠商提供的基于Cortex處理器的微控制器的情況。有了該標(biāo)準(zhǔn),芯片廠商就能夠?qū)⑺麄兊馁Y 源專注于產(chǎn)品外設(shè)特性的差異化,并且消除對(duì)微控制器進(jìn)行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)的需求,從而達(dá)到降低開發(fā)成本的目的。如圖5-5所示,基于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è)寄存器的

10、不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和應(yīng)用層提供接口,簡(jiǎn)化了應(yīng)用程序開發(fā)難度,使開發(fā)人員能夠在完全透明的情況下進(jìn)行應(yīng)用程序開發(fā)。也正是如此,CMSIS層的實(shí)現(xiàn)相對(duì)復(fù)雜。圖5-5 CMSIS 標(biāo)準(zhǔn)的軟件架構(gòu)層主要分為以下3個(gè)部分:(1) 核內(nèi)外設(shè)訪問層 (CPAL , Core Peripheral Access Layer ):該層由ARM負(fù)責(zé)實(shí)現(xiàn)。包括對(duì)寄存器名稱、地址的定義,對(duì)核寄存器、NVIC、調(diào)試子系統(tǒng)的訪問接口定義以及對(duì)特殊用途寄存器的訪問接口(例如:CONTROL,xPSR )定義。由于對(duì)特殊寄存器的訪問以內(nèi)聯(lián)方式定義,所以針對(duì)不同的編譯器ARM統(tǒng)一用來屏蔽差異。該層

11、定義的接口函數(shù)均是可重入的。(2) 片上外設(shè)訪問層(DPAL, Device Peripheral Access Layer):該層由芯片廠商負(fù)責(zé)實(shí)現(xiàn)。該層的實(shí)現(xiàn)與 CPAL類似,負(fù)責(zé)對(duì)硬件寄存器地址以及外設(shè)訪問接口進(jìn)行定義。該層可調(diào)用CPAL層提供的接口函數(shù)同時(shí)根據(jù)設(shè)備特性對(duì)異常向量表進(jìn)行擴(kuò)展,以處理相應(yīng)外設(shè)的中斷請(qǐng)求。(3) 外設(shè)訪問函數(shù)(AFP, Access Functions for Peripherals):該層也由芯片廠商負(fù)責(zé)實(shí)現(xiàn),主要是提供訪問片上外設(shè)的訪問函數(shù),這一部分是可選的。對(duì)一個(gè)Cortex-M 微控制系統(tǒng)而言,CMSIS通過以上三個(gè)部分實(shí)現(xiàn)了:l定義了訪問外設(shè)寄存器和

12、異常向量的通用方法;l定義了核內(nèi)外設(shè)的寄存器名稱和核異常向量的名稱;l為RTOS核定義了與設(shè)備獨(dú)立的接口,包括 Debug 通道。這樣芯片廠商就能專注于對(duì)其產(chǎn)品的外設(shè)特性進(jìn)行差異化,并且消除他們對(duì)微控制器進(jìn)行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)需求,以達(dá)到低成本開發(fā)的目的。CMSIS中的具體文件結(jié)構(gòu)如表5-6所示。表5-6 CMSIS 文件夾結(jié)構(gòu)CMSISCoreDocumentationCMSIS文檔CM3StartuparmMDKARM編譯器啟動(dòng)文件startup_stm32f10x_hd.s:大容量產(chǎn)品啟動(dòng)文件startup_stm32f10x_md.s:中容量產(chǎn)品啟動(dòng)文件start

13、up_stm32f10x_ld.s:小容量產(chǎn)品啟動(dòng)文件gcc_ride7GCC編譯器啟 動(dòng)文件iarIAR編譯器啟 動(dòng)文件TrueSTUDIOTrueSTUDIO編譯器啟動(dòng)文件本文件夾包含STMFIOxxxCMSIS文件:微控制器外設(shè) 訪問層和內(nèi)核設(shè)備訪問層:core_cm3.h : CMSIS 的Cortex-M3內(nèi)核設(shè)備訪問層頭文件core_cm3.c : CMSIS 的Cortex-M3內(nèi)核設(shè)備訪問層源文件stm32f10x.h : CMSIS 的Cortex-M3 STM32f10xxx微控制器外設(shè)訪問層頭文件system_stm32f10x.hCMSIS 的 Cortex-M3STM

14、32f10xxx 微控制器外設(shè)訪問層頭文件system_stm32f10x.c :CMSIS 的 Cortex-M3STM32f10xxx 微控制器外設(shè)訪問層源文件在實(shí)際開發(fā)過程中,根據(jù)應(yīng)用程序的需要,可以采取2種方法使用標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib)(1) 使用外設(shè)驅(qū)動(dòng):這時(shí)應(yīng)用程序開發(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)用程序開發(fā)基于外設(shè)的寄存器結(jié)構(gòu)和位定義文件。這兩種方法的優(yōu)缺點(diǎn)在使用標(biāo)準(zhǔn)外設(shè)庫(kù)開發(fā)的優(yōu)勢(shì)”小節(jié)中已

15、經(jīng)有了具體的介紹,這里仍要 說明的是,使用使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開發(fā)可以極大的減小軟件開發(fā)的工作量,也是目前嵌入式系統(tǒng)開發(fā)的一個(gè)趨勢(shì)。標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib) 支持STM32F10xxx系列全部成員:大容量,中容量和小容量產(chǎn)品。從表5-6中也可以看出,啟動(dòng)文件已經(jīng)對(duì)不同的系列進(jìn)行了劃分,實(shí)際開發(fā)中根 據(jù)使用的STM32產(chǎn)品具體型號(hào),用戶可以通過文件” stm32f10x.h ”中的預(yù)處理define或者通過開發(fā)環(huán)境中的全局設(shè)置來配置標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib),一個(gè)define 對(duì)應(yīng)一個(gè)產(chǎn)品系列。下面列出支持的產(chǎn)品系列STM32F10x_LD : STM32 小容量產(chǎn)品

16、STM32F10x_MD : STM32 中容量產(chǎn)品STM32F10x_HD : STM32 大容量產(chǎn)品在庫(kù)文件中這些defi ne的具體作用范圍是:I文件“ stm3210f.h 中的中斷IRQ定義I啟動(dòng)文件中的向量表,小容量,中容量,大容量產(chǎn)品各有一個(gè)啟動(dòng)文件l外設(shè)存儲(chǔ)器映像和寄存器物理地址l產(chǎn)品設(shè)置:外部晶振(HSE)的值等l系統(tǒng)配置函數(shù)因此通過宏定義這種方式,可以使標(biāo)準(zhǔn)外設(shè)庫(kù)適用于不同系列的產(chǎn)品,同時(shí)也方便與不同產(chǎn)品之間的軟件移植,極大的方便了軟件的開發(fā)。1.1.2 STM32F10XXX標(biāo)準(zhǔn)外設(shè)庫(kù)的使用標(biāo)準(zhǔn)外設(shè)庫(kù)中包含了眾多的變量定義和功能函數(shù),如果不能了解他們的命名規(guī)范和使用規(guī)律將

17、會(huì)給編程帶來很大的麻煩,本節(jié)將主要敘述標(biāo)準(zhǔn)外設(shè)庫(kù)中的相關(guān)規(guī)范,通過這些規(guī)范的學(xué)習(xí)可以更加靈活的使用固件庫(kù),同時(shí)也將極大增強(qiáng)程序的規(guī)范性和易讀性,同時(shí)標(biāo)準(zhǔn)外設(shè)庫(kù)中的這種規(guī)范也值得我們?cè)谶M(jìn)行其他相關(guān)的開發(fā)時(shí)使用和借鑒。1.縮寫定義標(biāo)準(zhǔn)外設(shè)庫(kù)中的主要外設(shè)均采用了縮寫的形式,通過這些縮寫可以很容易的辨認(rèn)對(duì)應(yīng)的外 設(shè)??s寫外設(shè)/單元ADC模數(shù)轉(zhuǎn)換器BKP備份寄存器CAN控制器局域網(wǎng)模塊CECCRCCRC計(jì)算單元DAC數(shù)模轉(zhuǎn)換器DBGMCU調(diào)試支持DMA直接內(nèi)存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲(chǔ)器FSMC靈活的靜態(tài)存儲(chǔ)器控制器GPIO通用輸入輸岀I2CI2C 接口IWDG獨(dú)立看門狗PW

18、R電源/功耗控制RCC復(fù)位與時(shí)鐘控制器RTC實(shí)時(shí)時(shí)鐘SDIOSDIO 接口SPI串行外設(shè)接口TIM定時(shí)器USART通用同步/異步收發(fā)器WWDG窗口看門狗2.命名規(guī)則標(biāo)準(zhǔn)外設(shè)庫(kù)遵從以下命名規(guī)則PPP表示任一外設(shè)縮寫,例如: ADC。源程序文件和頭文件命名都以“stm32f10x_”作為開頭,例如:stm32f10x_conf.h 。常量?jī)H被應(yīng)用于一個(gè)文件 的,定義于該文件中;被應(yīng)用于多個(gè)文件的,在對(duì)應(yīng)頭文件中定義。所有常量都由英文字母大寫書寫。寄存器作為常量處理。他們的命名都由英文字母大寫書寫。在大多數(shù)情況下,他們采用與縮寫規(guī)范一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線為開頭。每個(gè)單詞的第一個(gè)字

19、母都由英文字母大寫書寫,例如:SPI_Se ndData 。在函數(shù)名中,只允許存在一個(gè)下劃線,用以分隔外設(shè)縮寫和函數(shù)名的其它部分。對(duì)于函數(shù)命名,總的來說有以下規(guī)則:I名為PPP_Init的函數(shù),其功能是根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP,例如TIMnit.l名為PPP_DeInit的函數(shù),其功能為復(fù)位外設(shè)PPP的所有寄存器至缺省值,例如TIM_DeI nit.l名為PPP_Init的函數(shù),其功能為通過設(shè)置PPP_InitTypeDef結(jié)構(gòu)中的各種參數(shù)來定義外設(shè)的功能,例如:USART_I nit .l名為PPP_Cmd的函數(shù),其功能為使能或者失能外設(shè)PPP,例如:

20、SPI_Cmd.l名為PPP_ITConfig 的函數(shù),其功能為使能或者失能來自外設(shè)PPP某中斷源,例如:RCC_ITC onfig.l名為PPP_DMAConfig的函數(shù),其功能為使能或者失能外設(shè)PPP的DMA接口,例如:TIM1_DMAC on fig.l用以配置外設(shè)功能的函數(shù),總是以字符串 “ Co nfig結(jié)尾,例如GPIO_Pi nRemapC on fig.l名為PPP_GetFlagStatus的函數(shù),其功能為檢查外設(shè)PPP某標(biāo)志位被設(shè)置與否,例如:l2C_GetFlagStatus.l名為PPP_ClearFlag 的函數(shù),其功能為清除外設(shè)PPP標(biāo)志位,例如:I2C_Clear

21、Flag.l名為PPP_GetlTStatus的函數(shù),其功能為判斷來自外設(shè)PPP的中斷發(fā)生與否,例如:l2C_GetlTStatus.l名為PPP_ClearlTPendingBit的函數(shù),其功能為清除外設(shè) PPP中斷待處理標(biāo)志位,例如:I2C_ClearITPe ndin gBit.這樣的命名方式非常便于程序的編寫和閱讀,以標(biāo)準(zhǔn)外設(shè)庫(kù)中的示例函數(shù)為例,下面摘錄了STM32F10x_StdPeriph_ExamplesADC3ADCs_DMAmia n.c中的一段程序。DMAni tType Def DMA_I ni tStructure;/* DMA1 chann el1 configura

22、tion*/DMA_DeI nit(DMA1_Cha nn el1);DMA_I ni tStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;DMA_I ni tStructure.DMA_MemoryBaseAddr =(ui nt32_t )&ADC1Co nvertedValue;DMA_I ni tStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_I ni tStructure.DMA_BufferSize = 1;DMA_I ni tStructure.DMA_Peripherall

23、nc = DMA_PeripheralI nc_Disable;DMA_I ni tStructure.DMA_MemoryI nc = DMA_MemoryI nc_Disable;DMA_I ni tStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;DMA_I ni tStructure.DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;DMA_I ni tStructure.DMA_Mode = DMA_Mode_Circular;DMA_I ni tStruc

24、ture.DMA_Priority = DMA_Priority_High;DMA_I ni tStructure.DMA_M2M = DMA_M2M_Disable;DMA_I nit(DMA1_Cha nn el1, & DMA_I ni tStructure);/* En able DMA1 chann el1 */DMA_Cmd(DMA1_Cha nn ell, ENABLE);這段程序完成了 DMA1通道的配置,首先定義了DMA_I ni tType DMA_ln itStructure接著配置DMA_InitType的各種參數(shù),各參數(shù)的命名方式也均使用約定的命名方式,從命名

25、就能夠很容易的看出各參數(shù)所指代的具體功能。功能參數(shù)配置完成后,使用DMA_I nit(DMA1_Cha nn ell, & DMA_I nitStructure);完成相應(yīng)外設(shè)的初始化,最后使用DMA_Cmd(DMA1_Channell, ENABLE)使能相應(yīng)外設(shè)。從這個(gè)例子就能夠很容易的看出標(biāo)準(zhǔn)外設(shè)庫(kù)這種規(guī)范化的命名規(guī)則給編寫和閱讀程序帶來的好處。3.變量定義 在早期的版本中有 24個(gè)變量定義,在 Keil的安裝根目錄下,可以找到對(duì)應(yīng)的定義,路徑為:KeilARMINCSTSTM32F10xstm32f10x_type.h/* Includes*/* Exported types*

26、/ typedef sig ned long s32;typedef sig ned short s16;typedef sig ned char s8;typedef sig ned long const sc32; /* Read Only */typedef sig ned short const sc16; /* Read Only */typedef sig ned char const sc8; /* Read Only */typedef volatile sig ned long vs32;typedef volatile sig ned short vs16;typedef

27、volatile sig ned char vs8;typedef volatile sig ned long const vsc32; /* Read Only */typedef volatile sig ned short const vsc16; /* Read Only */typedef volatile sig ned char const vsc8; /* Read Only */typedef un sig ned long u32;typedef un sig ned short u16;typedef un sig ned char u8;typedef un sig n

28、ed long const uc32; /* Read Only */typedef un sig ned short const uc16; /* Read Only */typedef un sig ned char const uc8; /* Read Only */typedef volatile un sig ned long vu32;typedef volatile un sig ned short vu16;typedef volatile un sig ned char vu8;typedef volatile un sig ned long const vuc32; /*

29、Read Only */typedef volatile un sig ned short const vuc16; /* Read Only */typedef volatile un sig ned char const vuc8; /* Read Only */3.0以后的版本中使用了CMSIS數(shù)據(jù)類型,變量的定義有所不同,但是出于兼容舊版本的目的,以上的數(shù)據(jù)類型仍然兼容。CMSIS的IO類型限定詞如表5-7所示,CMSIS和STM32 固件庫(kù)的數(shù)據(jù)類型對(duì)比如表5-8所示。這些數(shù)據(jù)類型可以在STM32F10x_StdPeriph_Lib_V3.4.0LibrariesCMSISCM3 D

30、eviceSupportSTSTM32F10xstm32f10x.h中找到具體的定義,此部分定義如下。/*!< STM32F10x Sta ndard Peripheral Library old types (mai ntai ned for legacypurpose) */typedef in t32_t s32;typedef in t16_t s16;typedef in t8_t s8;typedef const in t32_t sc32; /*!< Read On ly */ typedef const in t16_t sc16; /*!< Read Onl

31、y */ typedef const in t8_t sc8; /*!< Read On ly */ typedef _IO in t32_t vs32;typedef _IO in t16_t vs16;typedef _IO in t8_t vs8;typedef _I in t32_t vsc32; /*!< Read Only */typedef _I in t16_t vsc16; /*!< Read Only */typedef _I in t8_t vsc8; /*!< Read Only */ typedef uin t32_t u32;typedef

32、uin t16_t u16;typedef uin t8_t u8;typedef const uin t32_t uc32; /*!< Read Onl y */ typedef const ui nt16_t uc16; /*!< Read Onl y */ typedef const uint8_t uc8; /*!< Read On ly */ typedef _IO uin t32_t vu32;typedef _IO uin t16_t vu16;typedef _IO uin t8_t vu8;typedef _I uin t32_t vuc32; /*!<

33、; Read Only */typedef _I ui nt16_t vuc16; /*!< Read Only */ typedef _I uin t8_t vuc8; /*!< Read Only */ 表5-7 CMSIS IO類型限定詞IO類限定詞#define描述_Ivolatile const只讀訪問_Ovolatile只寫訪問ovolatile讀和寫訪問表5-8固件庫(kù)與CMSIS數(shù)據(jù)類型對(duì)比固件庫(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ù)sc32const

34、int32_t只讀有符號(hào)32位數(shù)據(jù)sc16const int16_t只讀有符號(hào)16位數(shù)據(jù)sc8const int8_t只讀有符號(hào)8位數(shù)據(jù)vs32O int32_t易揮發(fā)讀寫訪問有符號(hào) 32位數(shù)據(jù)vs16O int16_t易揮發(fā)讀寫訪問有符號(hào) 16位數(shù)據(jù)vs8O int8_t易揮發(fā)讀寫訪問有符號(hào) 8位數(shù)據(jù)vsc32int32_t易揮發(fā)只讀有符號(hào)32位數(shù)據(jù)vsc16int16_t易揮發(fā)只讀有符號(hào)16位數(shù)據(jù)vsc8int8_t易揮發(fā)只讀有符號(hào)8位數(shù)據(jù)u32uint32_t無符號(hào)32位數(shù)據(jù)u16uint16_t無符號(hào)16位數(shù)據(jù)u8uint8_t無符號(hào)8位數(shù)據(jù)uc32const uint32_t只讀無符

35、號(hào)32位數(shù)據(jù)uc16const uint16_t只讀無符號(hào)16位數(shù)據(jù)uc8const uint8_t只讀無符號(hào)8位數(shù)據(jù)vu32O uint32_t易揮發(fā)讀寫訪問無符號(hào) 32位數(shù)據(jù)vu16O uint16_t易揮發(fā)讀寫訪問無符號(hào) 16位數(shù)據(jù)vu8O uint8_t易揮發(fā)讀寫訪問無符號(hào) 8位數(shù)據(jù)vuc32uint32_t易揮發(fā)只讀無符號(hào)32位數(shù)據(jù)vuc16uint16_t易揮發(fā)只讀無符號(hào)16位數(shù)據(jù)vuc8uint8_t易揮發(fā)只讀無符號(hào)8位數(shù)據(jù)stm32f10x.h文件中還包含了常用的布爾形變量定義,如:typedef enum RESET = 0, SET = !RESET FlagStatus,

36、 ITStatus;typedef en um DISABLE = 0, ENABLE = !DISABLE Fun ctio nalState;#defi ne IS_FUNCTIONAL_STATE(STATE) (STATE) = DISABLE) | (STATE) =ENABLE)typedef en um ERROR = 0, SUCCESS = !ERROR ErrorStatus;不同版本的標(biāo)準(zhǔn)外設(shè)庫(kù)的變量定義略有不同,如3.4版本中就沒有之前版本的TRUE和FALSE的定義,用戶也可以根據(jù)自己的需求按照上面的格式定義自己的布爾形變量。在使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開發(fā)遇到相關(guān)的定義問題

37、時(shí)應(yīng)首先找到對(duì)應(yīng)的頭文件定義。4.使用步驟前面幾個(gè)小節(jié)已經(jīng)詳細(xì)介紹了標(biāo)準(zhǔn)外設(shè)庫(kù)的組成結(jié)構(gòu)以及部分主要文件的功能描述,那么如果在開發(fā)中使用標(biāo)準(zhǔn)外設(shè)庫(kù)需要哪些描述呢?下面就進(jìn)行簡(jiǎn)要的介紹,這兒介紹的使用方法是與開發(fā)環(huán)境無關(guān)的,在不同的開發(fā)環(huán)境中可能在操作方式上略有不同,但是總體的流程都是一樣的,下一小節(jié)將介紹在MDK ARM開發(fā)環(huán)境下使用標(biāo)準(zhǔn)外設(shè)庫(kù)的詳細(xì)過程。首先新建一個(gè)項(xiàng)目并設(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_V3.4.0LibrariesCMSIS

38、CM3DeviceSupportST STM32F10xstartup 目錄下。其次按照使用產(chǎn)品的具體型號(hào)選擇具體的啟動(dòng)文件,加入工程。文件主要按照使用產(chǎn)品的容量進(jìn)行區(qū)分,根據(jù)產(chǎn)品容量進(jìn)行選擇即可。每個(gè)文件的具體含義可以在“stm32f10x.h ”文件中找到對(duì)應(yīng)的說明,摘錄如下:#if !defi ned (STM32F10X_LD) && !defi ned (STM32F10X_LD_VL)&& !defi ned(STM32F10X_MD) && !defi ned (STM32F10X_MD_VL) && !defi n

39、ed(STM32F10X_HD) && !defi ned (STM32F10X_HD_VL) && !defi ned(STM32F10X_XL) && !defi ned (STM32F10X_CL)/* #defi ne STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low den sitydevices */* #defi ne STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low den sityValue Line devices */*

40、#defi ne STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium den sitydevices */* #defi ne STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Mediumden sity Value Line devices */ /* #defi ne STM32F10X_HD */ /*!<STM32F10X_HD: STM32 High den sity devices */* #define STM32F10X HD VL */ /*!< STM32F10

41、X HD VL: STM32 Highden sity value line devices */* #defi ne STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-de nsity devices*/* #defi ne STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Conn ectivity linedevices */#en dif/* Tip: To avoid modifying this file each time you need to switch between thesedevice

42、s, you can defi ne the device in your toolcha in compiler preprocessor.-Low-de nsity devices are STM32F101xx, STM32F102xx and STM32F103xxmicroc on trollerswhere the Flash memory den sity ran ges betwee n 16 and 32 Kbytes.-Low-de nsity value line devices are STM32F100xx microc on trollers where the F

43、lashmemory den sity ran ges betwee n 16 and 32 Kbytes.-Medium-de nsity devices are STM32F101xx, STM32F102xx and STM32F103xx microc on trollerswhere the Flash memory den sity ran ges betwee n 64 and 128 Kbytes.-Medium-de nsity value line devices are STM32F100xx microc on trollers wheretheFlash memory

44、 den sity ran ges betwee n 64 and 128 Kbytes.-High-de nsity devices are STM32F101xx and STM32F103xx microco ntrollers wherethe Flash memory den sity ran ges betwee n 256 and 512 Kbytes.-High-de nsity value line devices are STM32F100xx microc on trollers where theFlash memory den sity ran ges betwee

45、n 256 and 512 Kbytes.-XL-de nsity devices are STM32F101xx and STM32F103xx microco ntrollers wherethe Flash memory den sity ran ges betwee n 512 and 1024 Kbytes.-Conn ectivity line devices are STM32F105xx and STM32F107xx microc on trollers.*/“ stm32f10x.h是整個(gè)標(biāo)準(zhǔn)外設(shè)庫(kù)的入口文件,這個(gè)文件包含了STM32F10x全系列所有外設(shè)寄存器的定義(寄存

46、器的基地址和布局)、位定義、中斷向量表、存儲(chǔ)空間的地址映射 等。為了是這個(gè)文件適用于不同系列的產(chǎn)品,程序中是通過宏定義來實(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è)注釋程序/*#defi ne USE_STDPERIPH_DRIVER*/用于選擇是否使用標(biāo)準(zhǔn)外設(shè)庫(kù),如果保留這個(gè)注釋,則用戶開發(fā)程序可以基于直接訪問“ stm32f10x.h中定義的外設(shè)寄存器,所有的操作均基于寄存器完成,目前不使用固件庫(kù)的單片機(jī)開發(fā),如 5

47、1、AVR、MSP430等其實(shí)都是采用此種方式,通過在對(duì)應(yīng)型號(hào)的頭文 件中進(jìn)行外設(shè)寄存器等方面的定義,從而在程序中對(duì)相應(yīng)的寄存器操作完成相應(yīng)的功能設(shè) 計(jì)。如果去掉/*#define USE_STDPERIPH_DRIVER*/的注釋,則是使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行開發(fā),用戶需要使用在文件“stm32f10x_conf.h ”中,選擇要用的外設(shè),外設(shè)同樣是通過注釋/去掉注釋的方式來選擇。示例程序如下:/* Uncomment the line below to enable peripheral header file inclusion */#include "stm32f10x_adc.h"/* #include "stm32f10x_bkp.h" */* #include "stm32f10x_can.h" */* #include "stm32f10x_cec.h" */* #in elude "stm32f10x_crc.h" */* #in clude "stm32f10x_dac.h" */* #include "stm32f10x_dbgmcu.h" */#include "stm32f10x_dm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論