




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、STM32固件庫詳解最近考試較多,教材編寫暫停了一下,之前寫了很多,只是每一章都感覺不是特別完整, 最近把其中的部分內(nèi)容貼出來一下,歡迎指正。本文內(nèi)容基于我對固件庫的理解,按照便 于理解的順序進行整理介紹,部分參考了固件庫的說明,但是也基本上重新表述并按照我 理解的順序進行重新編寫。我的目的很簡單,很多人寫教程只是告訴你怎么做,不會告訴 你為什么這么做,我就盡量吧前因后果都說清楚,這是我的出發(fā)點,水平所限,難免有很 大的局限性,具體不足歡迎指正。基于標準外設庫的軟件開發(fā)STM32標準外設庫概述是一個固件函數(shù)包,它由程序、該函數(shù)庫還包括每一個外設的驅(qū)STM32B準外設庫之前的版本也稱固件函數(shù)庫或
2、簡稱固件庫,數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設的性能特征。動描述和應用實例,為開發(fā)者訪問底層硬件提供了一個中間API,通過使用固件函數(shù)庫,無需深入掌握底層硬件細節(jié),開發(fā)者就可以輕松應用每一個外設。因此,使用固態(tài)函數(shù)庫可以大大減少用戶的程序編寫時間,進而降低開發(fā)成本。 每個外設驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設所有功能。每個器件的開發(fā)都由一個通用API (application programminginterface應用編程界面)驅(qū)動,API對該驅(qū)動程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱都進行了標準化。ST公司2007年10月發(fā)布了版本的固件庫,MDK之前的版本均支持該庫。2008年6月發(fā)布
3、了版的固件庫,從2008年9月推出的MDK版本至今均使用版本的固件庫。以后的版本相對之前的版本改動較大,本書使用目前較新的版本。使用標準外設庫開發(fā)的優(yōu)勢簡單的說,使用標準外設庫進行開發(fā)最大的優(yōu)勢就在于可以使開發(fā)者不用深入了解底層硬件細節(jié)就可以靈活規(guī)范的使用每一個外設。標準外設庫覆蓋了從GPIO到定時器,再到 CANI2C、SPI、UARE口 ADC等等的所有標準外設。對應的C源代碼只是用了最基本的 C編程的知識,所有代碼經(jīng)過嚴格測試,易于理解和使用,并且配有完整的文檔,非常方便進行二次 開發(fā)和應用。STM32F10XXX標準外設庫結(jié)構(gòu)與文件描述1 .標準外設庫的文件結(jié)構(gòu)在上一小節(jié)中已經(jīng)介紹了使
4、用標準外設庫的開發(fā)的優(yōu)勢,因此對標準外設庫的熟悉程度直接影響到程序的編寫,下面讓我們來認識一下STM32F10XXX勺標準外設庫。STM32F10XXX勺標準外設庫經(jīng)歷眾多的更新目前已經(jīng)更新到最新的版本,開發(fā)環(huán)境中自帶的標準外設庫為版本,本書中以比較穩(wěn)定而且較新的版本為基礎介紹標準外設庫的結(jié)構(gòu)。可以從ST的官方網(wǎng)站下載到各種版本的標準外設庫,首先看一下版本標準外設庫的文件結(jié) 構(gòu),如圖5-3所示。以上版本的文件結(jié)構(gòu)大致相同,每個版本可能略有調(diào)整。j STM32FLibrariei.S i Q 上 CM) SrcSvpgN OeviceSupporl 自 j, ST二,r STMiJFlOx ar
5、m.i4r 卜 T*$TUDiODocumc 0 5所 .山 IfHC,力,CG* 11 £TM¥NF10xT'*Ep!qxk . &TM12_EVA1 Convnon STMUIOBJVAL STM3210C.EVAL STMJJIQEJVAL $TM321Q0&_£VAk_h 蔚術(shù)博客圖5-3 STM32F10XXX標準外設庫文件結(jié)構(gòu)表5-4中介紹了每個文件夾所包含的主要內(nèi)容。表5-4 STM32F10XXX標準外設庫文件夾描述本文件夾包含了所有的html貝囿資源LibrariesCMSIS見表5-6STM32F10x_StdPerip
6、h_Driverinc標準外設庫驅(qū)動頭文件src標準外設庫驅(qū)動源文件ProjectExamples標準外設庫驅(qū)動的完整例程TemplateMDK-ARMKEIL RVMDK勺項目模板示例RIDERaisonance RIDE 的項目模板示例EWARMIAR EWARM項目模板示例UtilitiesSTM3210-EVAL本文件夾包含了用于STM3210B-EVAL和STM3210E-EVA評估板的專用驅(qū)動標準外設庫的第一部分是CMSIS和STM32F10x_StdPeriph_Driver , CMSIS是獨立于供應商的Cortex-M處理器系列硬件抽象層,為芯片廠商和中間件供應商提供了簡單的
7、處理器軟件 接口,簡化了軟件復用工作,降低了 Cortex-M上操作系統(tǒng)的移植難度,并減少了新入門的微控制器開發(fā)者的學習曲線和新產(chǎn)品的上市時間。STM32F10x_StdPeriph_Driver 則包括了分別對應包括了所有外設對應驅(qū)動函數(shù),這些驅(qū)動函數(shù)均使用 C語言編寫,并提供了統(tǒng)一的易于調(diào)用的函數(shù)接口,供開發(fā)者使用。Project文件夾中則包括了 ST官方的所有例程和基于不同編譯器的項目模板,這些例程是學習和使用STM32的重要參考。Utilities包含了相關評估板的示例程序和驅(qū)動函數(shù),供使用官方評估板的開發(fā)者使用,很多驅(qū)動函數(shù)同樣可以作為學習的重要參考。STM32F10xxx標準外設庫
8、體系結(jié)構(gòu)如圖5-4所示。圖中很好的展示了各層以及具體文件之間的聯(lián)系,各文件的具體功能說明如表5-5所示。Applied bon xSTM3£ miatKoriiran«<一,_r_,© -gM的技不得客圖5-4 STM32F10xxx標準外設庫體系結(jié)構(gòu)表5-5文件功能說明文件名功能描述具體功能說明Cortex-M3 內(nèi)核及其設備文件訪問Cortex-M3內(nèi)核及其設備:NVIC, SysTick等訪問Cortex-M3的CPU寄存器和內(nèi)核外設的函數(shù)微控制器專用頭文件這個文件包含了 STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中
9、斷向量表、存儲空間的地址映射等微控制器專用系統(tǒng)文件函數(shù)SystemInit ,用來初始化微控制器函數(shù)Sysem_ExtMemCtl,用來配置外部存儲器控制器。它位于文件/.c ,在跳轉(zhuǎn)到main前調(diào)用SystemFrequncy ,該值代表系統(tǒng)時鐘頻率編譯器啟動代碼微控制器專用的中斷處理程序列表(與頭文件T)弱定義(Weak)的中斷處理程序默認函數(shù)(可以被用戶代碼覆蓋)該文件是與編譯器相關的固件庫配置文件通過更改包含的外設頭文件來選擇固件庫所使 用的外設,在新建程序和進行功能艾更之前應 當首先修改對應的配置。外設中斷函數(shù)文件用戶可以相應的加入自己的中斷程序的代碼, 對于指向同一個中斷向量的多個
10、/、同中斷請 求,用戶可以通過判斷外設的中斷標志位來確 定準確的中斷源,執(zhí)行相應的中斷服務函數(shù)。外設驅(qū)動函數(shù)文件包括了相關外設的初始化配置和部分功能應用 函數(shù),這部分是進行編程功能實現(xiàn)的重要組成 部分。用戶文件用戶程序文件,通過標準外設庫提供的接口進行相應的外設配置和功能設計。2 .基于CMSIS標準的軟件架構(gòu)根據(jù)調(diào)查研究,軟件開發(fā)已經(jīng)被嵌入式行業(yè)公認為最主要的開發(fā)成本。對于ARM司來說,一個ARMft核往往會授權(quán)給多個廠家,生產(chǎn)種類繁多的產(chǎn)品, 如果沒有一個通用的軟件接口標準,那么當開發(fā)者在使用不同廠家的芯片時將極大的增加了軟件開發(fā)成本,因此,ARMWAtmel、IAR、Keil、hami-
11、nary Micro 、Micrium、NXR SEGGER口 ST 等諸多芯片和軟件廠商合作,將所有 Cortex芯片廠商產(chǎn)品的軟件接口標準化,制定了 CMSIS標準。此舉意在降低軟件開發(fā)成本,尤其針對新設備項目開發(fā),或者將已有軟件移植到其他芯片廠商提供的基于Cortex處理器的微控制器的情況。有了該標準,芯片廠商就能夠?qū)⑺麄兊馁Y源專注于產(chǎn)品外設特性的差異化,并且消除對微控制器進行編程時需要維持的不同的、互相不兼容的標準的需求,從而達到降低開發(fā)成本的目的。如圖5-5所示,基于CMSIS標準的軟件架構(gòu)主要分為以下4層:用戶應用層、操作系統(tǒng)及中間件接口層、CMSIS層、硬件寄存器層。其中 CMS
12、IS層起著承上啟下的作用:一方面該層對硬件寄存器層進行統(tǒng)一實現(xiàn),屏蔽了不同廠商對Cortex-M系列微處理器核內(nèi)外設寄存器的不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和應用層提供接口,簡化了應用程序開發(fā)難度,使開發(fā)人員能夠在完全透明的情況下進行應用程序開發(fā)。也正是如此,CMSIS層的實現(xiàn)相對復雜。用戶應用程岸操作系統(tǒng)內(nèi)核外設田數(shù)器件朝卜設的效市間件函轉(zhuǎn)CMS1S外設寄存簿和中跖同堡定義信MCU宜他外設CPU定時騫中瞄控制JS調(diào)艮蹤接口圖5-5 CMSIS標準的軟件架構(gòu)層主要分為以下3個部分:核內(nèi)外設訪問層(CPALCore Peripheral Access Layer ):該層由 A
13、RM負責實現(xiàn)。包括對寄存器名稱、地址的定義,對核寄存器、NVIC調(diào)試子系統(tǒng)的訪問接口定義以及對特殊用途寄存器的訪問接口(例如:CONTRQLxPSR定義。由于對特殊寄存器的訪問以內(nèi)聯(lián)方式定義,所以針對不同的編譯器ARM統(tǒng)一用來屏蔽差異。該層定義的接口函數(shù)均是可重入的。(2)片上外設訪問層(DPAL, Device Peripheral Access Layer ):該層由芯片廠商負責實現(xiàn)。該層的實現(xiàn)與 CPAL類似,負責對硬件寄存器地址以及外設訪問接口進行定義。該層可調(diào)用CPAL層提供的接口函數(shù)同時根據(jù)設備特性對異常向量表進行擴展,以處理相應外設的中斷請求。(3)外設訪問函數(shù)(AFP, Acc
14、ess Functions for Peripherals):該層也由芯片廠商負責實現(xiàn),主要是提供訪問片上外設的訪問函數(shù),這一部分是可選的。對一個Cortex-M 微控制系統(tǒng)而言,CMSIS通過以上三個部分實現(xiàn)了:l定義了訪問外設寄存器和異常向量的通用方法;l定義了核內(nèi)外設的寄存器名稱和核異常向量的名稱;l為RTOS核定義了與設備獨立的接口,包括 Debug通道。這樣芯片廠商就能專注于對其產(chǎn)品的外設特性進行差異化,并且消除他們對微控制器進行編程時需要維持的不同的、互相不兼容的標準需求,以達到低成本開發(fā)的目的。CMSIS中的具體文件結(jié)構(gòu)如表 5-6所示。表5-6 CMSIS文件夾結(jié)構(gòu)CMSISC
15、oreDocumentationCMSIS文檔:大容量產(chǎn)品啟動文件:中容MDK AR編譯器啟動量產(chǎn)品CM3Startuparm文件啟動文件:小容量產(chǎn)品啟動文件gcc_ride7GC編譯器啟動文件iarIAR編譯器啟動文件TrueSTUDIOTrueSTUDIO 編譯器啟動文件本文件夾包含STMF10xxxCMSIS文件:微控制器外設訪問層和內(nèi)核設備訪問層::CMSIS的 Cortex-M3 內(nèi)核設備訪問層頭文件:CMSIS的 Cortex-M3 內(nèi)核設備訪問層源文件:CMSIS 的 Cortex-M3STM32f10xxx微控制器外設訪問層頭文件:CMSIS 的 Cortex-M3STM32f
16、10xxx微控制器外設訪問層頭文件:CMSIS 的 Cortex-M3STM32f10xxx微控制器外設訪問層源文件在實際開發(fā)過程中,根據(jù)應用程序的需要,可以采取2種方法使用標準外設庫(StdPeriph_Lib)(1)使用外設驅(qū)動:這時應用程序開發(fā)基于外設驅(qū)動的API(應用編程接口)。用戶只需要配 (2)不使用外設驅(qū)動:這時應用程序開發(fā)基于外設的寄存器結(jié)構(gòu)和位定義文件。置文件"”,并使用相應的文件”.c”即可。這兩種方法的優(yōu)缺點在“使用標準外設庫開發(fā)的優(yōu)勢”小節(jié)中已經(jīng)有了具體的介紹,這里仍要說明的是,使用使用標準外設庫進行開發(fā)可以極大的減小軟件開發(fā)的工作量,也是目前嵌入式系統(tǒng)開發(fā)的
17、一個趨勢。標準外設庫(StdPeriph_Lib)支持STM32F10xxx系歹U全部成員:大容量,中容量和小容量產(chǎn)品。從表5-6中也可以看出,啟動文件已經(jīng)對不同的系列進行了劃分,實際開發(fā)中根據(jù)使用的STM32產(chǎn)品具體型號,用戶可以通過文件"”中的預處理 define或者通過開發(fā)環(huán)境中 的全局設置來配置標準外設庫(StdPeriph_Lib), 一個define對應一個產(chǎn)品系列。下面列出支持的產(chǎn)品系列STM32F10x_LD STM32、容量產(chǎn)品STM32F10x_MD STM32中容量產(chǎn)品STM32F10x_HD STM3次容量產(chǎn)品在庫文件中這些define的具體作用范圍是:l文件
18、中的中斷IRQ定義l啟動文件中的向量表,小容量,中容量,大容量產(chǎn)品各有一個啟動文件l外設存儲器映像和寄存器物理地址l產(chǎn)品設置:外部晶振(HSE)的值等l系統(tǒng)配置函數(shù)因此通過宏定義這種方式,可以使標準外設庫適用于不同系列的產(chǎn)品,同時也方便與不同產(chǎn)品之間的軟件移植,極大的方便了軟件的開發(fā)。STM32F10XXX標準外設庫的使用標準外設庫中包含了眾多的變量定義和功能函數(shù),如果不能了解他們的命名規(guī)范和使用規(guī)律將會給編程帶來很大的麻煩, 本節(jié)將主要敘述標準外設庫中的相關規(guī)范,通過這些規(guī)范的學習可以更加靈活的使用固件庫, 同時也將極大增強程序的規(guī)范性和易讀性,同時標準外設庫中的這種規(guī)范也值得我們在進行其他
19、相關的開發(fā)時使用和借鑒。1 .縮寫定義標準外設庫中的主要外設均采用了縮寫的形式,通過這些縮寫可以很容易的辨認對應的外設。縮寫外設/單元ADC模數(shù)轉(zhuǎn)換器BKP備份寄存器CAN控制器局域網(wǎng)模塊CECCRCCRCU算單元DAC數(shù)模轉(zhuǎn)換器DBGMCU調(diào)試支持DMA直接內(nèi)存存取控制器EXTI外部中斷事件控制器FLASH閃存存何命FSMC靈活的靜態(tài)存儲器控制器GPIO通用輸入輸出I2CI2C 接口IWDG獨立看門狗PWR電源/功耗控制RCC復位與時鐘控制器RTC實時時鐘SDIOSDIO 接口SPI串行外設接口TIM定時器USART通用同步/異步收發(fā)器WWDG窗口看門狗2 .命名規(guī)則標準外設庫遵從以下命名規(guī)
20、則PPP表示任一外設縮寫,例如: ADC源程序文件和頭文件命名都以“ stm32f10x_”作為開頭,例如:。常量僅被應用于一個文件的,定義于該文件中;被應用于多個文件的,在對應頭文件中定義。所有常量都由英文字母大寫書寫。寄存器作為常量處理。他們的命名都由英文字母大寫書寫。在大多數(shù)情況下,他們采用與縮寫規(guī)范一致。外設函數(shù)的命名以該外設的縮寫加下劃線為開頭。每個單詞的第一個字母都由英文字母大寫書寫,例如:SPI_SendData在函數(shù)名中,只允許存在一個下劃線,用以分隔外設縮寫和函數(shù)名的其它部分。對于函數(shù)命名,總的來說有以下規(guī)則:l名為PPP_Init的函數(shù),其功能是根據(jù) PPP_InitTyp
21、eDef中指定的參數(shù),初始化外設PPP,例如 TIM_Init.l名為PPP_DeInit的函數(shù),其功能為復位外設 PPP的所有寄存器至缺省值,例如TIM_DeInit.l名為PPP_Init的函數(shù),其功能為通過設置 PPP_InitTypeDef 結(jié)構(gòu)中的各種參數(shù)來定義外 設的功能,例如:USART_Init .l名為PPP_Cmd勺函數(shù),其功能為使能或者失能外設PPP,例如:SPI_Cmd.l名為PPP_ITConfig的函數(shù),其功能為使能或者失能來自外設PPP某中斷源,例如:RCC_ITConfig.l名為PPP_DMAConfig的函數(shù),其功能為使能或者失能外設PPP的DMA接口,例如
22、:TIM1_DMAConfig.l用以配置外設功能的函數(shù),總是以字符串"Config ”結(jié)尾,例如 GPIO_PinRemapConfig.l名為PPP_GetFlagStatus的函數(shù),其功能為檢查外設PPP某標志位被設置與否,例如:I2C_GetFlagStatus.l名為PPP_ClearFlag的函數(shù),其功能為清除外設PPP標志位,例如:I2C_ClearFlag.l名為PPP_GetITStatus的函數(shù),其功能為判斷來自外設PPP的中斷發(fā)生與否,例如:I2C_GetITStatus.l名為PPP_ClearITPendingBit的函數(shù),其功能為清除外設PPP中斷待處理標
23、志位,例如:I2C_ClearITPendingBit.這樣的命名方式非常便于程序的編寫和閱讀,DMA_InitType Def DMA_InitStructure;/* DMA1 channel1 configurationDMA_DeInit(DMA1_Channel1);=ADC1_DR_Address;=(uint32_t)&ADC1ConvertedValue;=DMA_DIR_PeripheralSRC;= 1;=DMA_PeripheralInc_Disable;=DMA_MemoryInc_Disable;=DMA_PeripheralDataSize_HalfWord
24、;=DMA_MemoryDataSize_HalfWord;=DMA_Mode_Circular;=DMA_Priority_High;=DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);/* Enable DMA1 channel1 */DMA_Cmd(DMA1_Channel1, ENABLE);以標準外設庫中的示例函數(shù)為例,下面摘錄了中的一段程序。*/這段程序完成了 DMA11道的配置,首先定義了 DMA_InitType DMA_InitStructure ,接著配 置DMA_InitType的各種參數(shù),各參
25、數(shù)的命名方式也均使用約定的命名方式,從命名就能夠 很容易的看出各參數(shù)所指代的具體功能。功能參數(shù)配置完成后,使用 DMA_Init(DMA1_Channel1, &DMA_InitStructure); 完成 相應外 設的初 始化,最后使用DMA_Cmd(DMA1_ChanneENABLE)使能相應外設。從這個例子就能夠很容易的看出標準外設庫這種規(guī)范化的命名規(guī)則給編寫和閱讀程序帶來的好處。3 .變量定義路徑為:在早期的版本中有 24個變量定義,在Keil的安裝根目錄下,可以找到對應的定義,/* Includes */* Exported types */ typedef signed l
26、ong s32;typedef signed short s16;typedef signed char s8;typedef signed long const sc32; /* Read Only */typedef signed short const sc16; /* Read Only */typedef signed char const sc8; /* Read Only */typedef volatile signed long vs32;typedef volatile signed short vs16;typedef volatile signed char vs8;t
27、ypedef volatile signed long const vsc32; /* Read Only */typedef volatile signed short const vsc16; /* Read Only */typedef volatile signed char const vsc8; /* Read Only */typedef unsigned long u32;typedef unsigned short u16;typedef unsigned char u8;typedef unsigned long const uc32; /* Read Only */typ
28、edef unsigned short const uc16; /* Read Only */typedef unsigned char const uc8; /* Read Only */typedef volatile unsigned long vu32;typedef volatile unsigned short vu16;typedef volatile unsigned char vu8;typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile unsigned short const
29、 vuc16; /* Read Only */typedef volatile unsigned char const vuc8; /* Read Only */以后的版本中使用了CMSIS數(shù)據(jù)類型,變量的定義有所不同,但是出于兼容舊版本的目的,以上的數(shù)據(jù)類型仍然兼容。CMSIS的IO類型限定詞如表 5-7所示,CMSIS和STM32固件庫的數(shù)據(jù)類型對比如表 5-8所示。這些數(shù)據(jù)類型可以在中找到具體的定義,此部分定義如下。/*!< STM32F10xStandard Peripheral Library old types (maintained for legacy purpose)*
30、/typedef int32_t s32;typedef int16_t s16;typedef int8_t s8;typedef const int32_t sc32; /*!< Read Only */typedef const int16_t sc16; /*!< Read Only */typedef const int8_t sc8; /*!< Read Only */typedef _IO int32_t vs32;typedef _IO int16_t vs16;typedef _IO int8_t vs8;typedef _I int32_t vsc32;
31、/*!< Read Only */typedef _I int16_t vsc16; /*!< Read Only */typedef _I int8_t vsc8; /*!< Read Only */typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;typedef const uint32_t uc32; /*!< Read Only */typedef const uint16_t uc16; /*!< Read Only */typedef const uint8_t uc8; /*!&
32、lt; Read Only */typedef _IO uint32_t vu32;typedef _IO uint16_t vu16;typedef _IO uint8_t vu8;typedef _I uint32_t vuc32; /*!< Read Only */typedef _I uint16_t vuc16; /*!< Read Only */typedef _I uint8_t vuc8; /*!< Read Only */表5-7 CMSIS IO 類型限定詞IO類限定詞#define描述_Ivolatile const只讀訪問_Ovolatile只寫訪問_
33、IOvolatile讀和寫訪問表5-8固件庫與CMSIS數(shù)據(jù)類型對比固件庫類型CMSI酸型描述s32int32_t易揮發(fā)只讀后符號32位數(shù)據(jù)s16int16_t易揮發(fā)只讀后符號 16位數(shù)據(jù)s8int8_t易揮發(fā)只讀后符號 8位數(shù)據(jù)sc32const int32_t只讀后符號32位數(shù)據(jù)sc16const int16_t只讀后符號16位數(shù)據(jù)sc8const int8_t只讀后符號8位數(shù)據(jù)vs32_IO int32_t易揮發(fā)讀寫訪問后符號 32位數(shù)據(jù)vs16_IO int16_t易揮發(fā)讀寫訪問后符號16位數(shù)據(jù)vs8_IO int8_t易揮發(fā)讀寫訪問后符號8位數(shù)據(jù)vsc32_I int32_t易揮發(fā)只
34、讀后符號32位數(shù)據(jù)vsc16_I int16_t易揮發(fā)只讀后符號 16位數(shù)據(jù)vsc8_I int8_t易揮發(fā)只讀后符號 8位數(shù)據(jù)u32uint32_t無符號32位數(shù)據(jù)u16uint16_t無符號16位數(shù)據(jù)u8uint8_t無符號8位數(shù)據(jù)uc32const uint32_t只讀無符號32位數(shù)據(jù)uc16const uint16_t只讀無符號16位數(shù)據(jù)uc8const uint8_t只讀無符號8位數(shù)據(jù)vu32_IO uint32_t易揮發(fā)讀寫訪問無符號 32位數(shù)據(jù)vu16_IO uint16_t易揮發(fā)讀寫訪問無符號16位數(shù)據(jù)vu8_IO uint8_t易揮發(fā)讀寫訪問無符號8位數(shù)據(jù)vuc32_I ui
35、nt32_t易揮發(fā)只讀無符號32位數(shù)據(jù)vuc16_I uint16_t易揮發(fā)只讀無符號 16位數(shù)據(jù)vuc8_I uint8_t易揮發(fā)只讀無符號8位數(shù)據(jù)文件中還包含了常用的布爾形變量定義,如:typedef enum RESET = 0, SET = !RESET FlagStatus, ITStatus;typedef enum DISABLE = 0, ENABLE = !DISABLE FunctionalState;#define IS_FUNCTIONAL_STATE(STATE) (STATE) = DISABLE) | (STATE) = ENABLE)typedef enum E
36、RROR = 0, SUCCESS = !ERROR ErrorStatus;不同版本的標準外設庫的變量定義略有不同,如版本中就沒有之前版本的TRU訝口 FALSE的定義,用戶也可以根據(jù)自己的需求按照上面的格式定義自己的布爾形變量。在使用標準外設庫進行開發(fā)遇到相關的定義問題時應首先找到對應的頭文件定義。4 .使用步驟前面幾個小節(jié)已經(jīng)詳細介紹了標準外設庫的組成結(jié)構(gòu)以及部分主要文件的功能描述,那么如這兒介紹的使用方法是果在開發(fā)中使用標準外設庫需要哪些描述呢下面就進行簡要的介紹,但是總體的流程都是與開發(fā)環(huán)境無關的,在不同的開發(fā)環(huán)境中可能在操作方式上略有不同,一樣的,下一小節(jié)將介紹在MDK ARMF發(fā)
37、環(huán)境下使用標準外設庫的詳細過程。首先新建一個項目并設置工具鏈對應的啟動文件,可以使用標準外設庫中提供的模板,也可以自己根據(jù)自己的需求新建。 標準外設庫中已經(jīng)提供了不同工具鏈對應的文件,位于目錄下。其次按照使用產(chǎn)品的具體型號選擇具體的啟動文件,加入工程。文件主要按照使用產(chǎn)品的容量進行區(qū)分,根據(jù)產(chǎn)品容量進行選擇即可。每個文件的具體含義可以在文件中找到對應的說明,摘錄如下:#if !defined (STM32F10X_LD) &&!defined (STM32F10X_LD_VL)&& !defined (STM32F10X_MD)&& !defin
38、ed (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined(STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)/* #define STM32F10X_LD */*!< STM32F10X_LD: STM32 Low density devices */* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low
39、 density Value Line devices */* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */* #define STM32F10X_MD_VL /*!< STM32F10X_MD_VLSTM32Medium density Value Linedevices */ /* #define STM32F10X_HI*y /*!< STM32F10X_HDSTM32High density devices*/* #define STM32F10X_HD_VL */
40、 /*!< STM32F10X_HD_VL: STM32 High density value line devices */* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */#endif/* Tip: To avoid modifying this file each time you need to switch betwe
41、en these devices, you can define the device in your toolchain compiler preprocessor.-Low-density devices are STM32F101xx, STM32F102xxand STM32F103xxmicrocontrollerswhere the Flash memory density ranges between 16 and 32 Kbytes.- Low-density value line devices are STM32F100xx microcontrollers where t
42、he Flashmemory density ranges between 16 and 32 Kbytes.- Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollerswhere the Flash memory density ranges between 64 and 128 Kbytes.- Medium-density value line devices are STM32F100xx microcontrollers where theFlash memory dens
43、ity ranges between 64 and 128 Kbytes.- High-density devices are STM32F101xx and STM32F103xx microcontrollers wherethe Flash memory density ranges between 256 and 512 Kbytes.- High-density value line devices are STM32F100xx microcontrollers where theFlash memory density ranges between 256 and 512 Kby
44、tes.- XL-density devices are STM32F101xx and STM32F103xx microcontrollers wherethe Flash memory density ranges between 512 and 1024 Kbytes.- Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.- /是整個標準外設庫的入口文件,這個文件包含了 STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射等。為了是
45、這個文件適用于不同系列的產(chǎn)品,程序中是通過宏定義來實現(xiàn)不同產(chǎn)品的匹配的,上面這段程序的注釋中已經(jīng)詳細給出了每個啟動文件所對應的產(chǎn)品系列,與之對應,也要相應的修改這個入口文件,需要根據(jù)所使用白產(chǎn)品系列正確的注釋/去掉相應的注釋define 。在這段程序的下方同樣有這樣的一個注釋程序 /*#define USE_STDPERIPH_DRIVER*/用于選擇是否使用 標準外設庫,如果保留這個注釋,則用戶開發(fā)程序可以基于直接訪問中定義的外設寄存器,所有的操作均基于寄存器完成,目前不使用固件庫的單片機開發(fā),如51、AVR MSP430等其實都是采用此種方式,通過在對應型號的頭文件中進行外設寄存器等方面的定義,從而在程序中對相應的寄存器操作完成相應的功能設計。如果去掉/*#define USE_STDPERIPH_DRIVER注釋,則是使用標準外設庫進行開發(fā),用戶需要使用在文件中,選擇要用的外設,外設同樣是通過注釋/去掉注釋的方式來選擇。示例程序如下:/* Uncomment the line below to enable periphe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全保衛(wèi)試題庫及答案解析
- 2025年鋼化玻璃產(chǎn)品項目市場調(diào)查研究報告
- 2025年金融業(yè)務管理系統(tǒng)項目市場調(diào)查研究報告
- 2025年金鹵筒燈項目市場調(diào)查研究報告
- 2025年醇基涂料項目市場調(diào)查研究報告
- 2025年遙控臺項目市場調(diào)查研究報告
- 教育培訓行業(yè)數(shù)字化升級的全面風險管理框架
- 2025年過濾帆布項目市場調(diào)查研究報告
- 2025年特技玩具車項目市場調(diào)查研究報告
- 2025年染料溶解劑項目市場調(diào)查研究報告
- 用表格為網(wǎng)頁布局教學設計
- GB/T 3733.1-1983卡套式端直通管接頭
- GB/T 1689-1998硫化橡膠耐磨性能的測定(用阿克隆磨耗機)
- 病原微生物實驗室生物安全管理手冊
- 上消化道出血病人的觀察與護理-課件
- 光纜測試報告
- 初中物理教育科學八年級下冊第十一章 機械與功《功》教學設計
- 神經(jīng)病學人衛(wèi)版習題集題庫
- (統(tǒng)編版小學語文教師)語文新課標新舊對比變化
- 達希納(尼洛替尼)毒副反應及處理
- 中班語言活動《傘》
評論
0/150
提交評論