版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、STM32固件庫詳解1.1 基于標準外設庫的軟件開發(fā)1.1.2 使用標準外設庫開發(fā)的優(yōu)勢簡單的說,使用標準外設庫進行開發(fā)最大的優(yōu)勢就在于可以使開發(fā)者不用深入了解底層硬件細節(jié)就可以靈活規(guī)范的使用每一個外設。標準外設庫覆蓋了從GPIO到定時器,再到CAN、I2C、 SP、I UART和 ADC等等的所有標準外設。對應的C源代碼只是用了最基本的C編程的知識, 所有代碼經(jīng)過嚴格測試,易于理解和使用,并且配有完整的文檔,非常方便進行二次開發(fā)和應用。1.1.3 STM32F10XXX標準外設庫結構與文件描述1. 標準外設庫的文件結構在上一小節(jié)中已經(jīng)介紹了使用標準外設庫的開發(fā)的優(yōu)勢,因此對標準外設庫的熟悉程
2、度直接影響到程序的編寫,下面讓我們來認識一下STM32F10XXX的標準外設庫。STM32F10XXX的標準外設庫經(jīng)歷眾多的更新目前已經(jīng)更新到最新的3.5 版本, 開發(fā)環(huán)境中自帶的標準外設庫為 2.0.3 版本,本書中以比較穩(wěn)定而且較新的V3.4版本為基礎介紹標準外設庫的結構??梢詮?ST的官方網(wǎng)站下載到各種版本的標準外設庫,首先看一下3.4 版本標準外設庫的文件結構,如圖5-3 所示。 3.0 以上版本的文件結構大致相同,每個版本可能略有調(diào)整。STM32F10x_StdPeriph_Lib_V3.4.0_htmresc本文件夾包含了所有的html 頁面資源LibrariesCMSIS見表5-
3、6STM32F10x_StdPeriph_Driverinc標準外設庫驅(qū)動頭文件src標準外設庫驅(qū)動源文 件ProjectExamples標準外設庫驅(qū)動的完整例程TemplateMDK-ARMKEIL RVMDK的項目模板示例RIDERaisonance RIDE的項 目模板示例EWARMIAR EWARM的項目模 板示例UtilitiesSTM3210-EVAL本文件夾包含了用于 STM3210B-EVAL 和 STM3210E-EVAL 評估板的專用驅(qū)動標準外設庫的第一部分是CMSIS 和 STM32F10x_StdPeriph_Driver, CMSIS 是獨立于供應商的Cortex-M
4、 處理器系列硬件抽象層,為芯片廠商和中間件供應商提供了簡單的處理器軟件接口,簡化了軟件復用工作,降低了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ù)
5、同樣可以作為學習的重要參考。STM32F10xxx標準外設庫體系結構如圖5-4所示。 圖中很好的展示了各層以及具體文件之間的聯(lián)系,各文件的具體功能說明如表5-5 所示。圖5-4 STM32F10xxx標準外設庫體系結構表 5-5 文件功能說明文件名功能描述具體功能說明core_cm3.hcore_cm3.cCortex-M3 內(nèi)核及其 設備文件訪問Cortex-M3 內(nèi)核及其設備:NVIC, SysTick等訪問Cortex-M3 的 CPU寄存器和內(nèi)核外設的函數(shù)stm32f10x.h微控制器專用頭文 件這個文件包含了STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義
6、、中斷向量表、存儲空間的地址映射等system_stm32f10x.hsystem_stm32f10x.c微控制器專用系統(tǒng) 文件函數(shù)SystemInit,用來初始化微控制器函數(shù)Sysem_ExtMemCtl,用來配置外部存儲器控制器。它位于文件startup_stm32f10x_xx.s/.c,在跳轉(zhuǎn)到main 前調(diào)用SystemFrequncy,該值代表系統(tǒng)時鐘頻率startup_stm32f10x_Xd.s編譯器啟動代碼微控制器專用的中斷處理程序列表(與頭文件一致 )弱定義(Weak)的中斷處理程序默認函數(shù)(可以被用戶代碼覆蓋) 該文件是與編譯器相關的stm32f10x_conf.h固件庫
7、配置文件通過更改包含的外設頭文件來選擇固件庫所 使用的外設,在新建程序和進行功能變更之前 應當首先修改對應的配置。stm32f10x_it.h外設中斷函數(shù)文件用戶可以相應的加入自己的中斷程序的代碼,stm32f10x_it.c對于指向同一個中斷向量的多個不同中斷請 求,用戶可以通過判斷外設的中斷標志位來確 定準確的中斷源,執(zhí)行相應的中斷服務函數(shù)。stm32f10x_ppp.hstm32f10x_ppp.c外設驅(qū)動函數(shù)文件包括了相關外設的初始化配置和部分功能應 用函數(shù),這部分是進行編程功能實現(xiàn)的重要組 成部分。Application.c用戶文件用戶程序文件,通過標準外設庫提供的接口進 行相應的外
8、設配置和功能設計。2. 基于 CMSIS標準的軟件架構根據(jù)調(diào)查研究,軟件開發(fā)已經(jīng)被嵌入式行業(yè)公認為最主要的開發(fā)成本。對于 ARM 公司來說,一個 ARM 內(nèi)核往往會授權給多個廠家,生產(chǎn)種類繁多的產(chǎn)品,如果沒有一個通用的軟件接口標準,那么當開發(fā)者在使用不同廠家的芯片時將極大的增加了軟件開發(fā)成本,因此, ARM與 Atmel、 IAR、 Keil、 hami-nary Micro、 Micrium 、 NXP、 SEGGER和 ST等諸多芯片和軟件廠商合作,將所有Cortex 芯片廠商產(chǎn)品的軟件接口標準化,制定了CMSIS標準。此舉意在降低軟件開發(fā)成本,尤其針對新設備項目開發(fā),或者將已有軟件移植到
9、其他芯片廠商提供的基于 Cortex 處理器的微控制器的情況。有了該標準,芯片廠商就能夠?qū)⑺麄兊馁Y源專注于產(chǎn)品外設特性的差異化,并且消除對微控制器進行編程時需要維持的不同的、互相不兼容的標準的需求,從而達到降低開發(fā)成本的目的。如圖 5-5 所示,基于CMSIS標準的軟件架構主要分為以下4 層:用戶應用層、操作系統(tǒng)及中間件接口層、CMSIS層、硬件寄存器層。其中CMSIS層起著承上啟下的作用:一方面該層對硬件寄存器層進行統(tǒng)一實現(xiàn),屏蔽了不同廠商對Cortex-M 系列微處理器核內(nèi)外設寄存器的不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和應用層提供接口,簡化了應用程序開發(fā)難度,使開發(fā)人員能夠
10、在完全透明的情況下進行應用程序開發(fā)。也正是如此,CMSIS層的實現(xiàn)相對復雜。層主要分為以下3 個部分:(1) 核內(nèi)外設訪問層(CPAL, Core Peripheral Access Layer) :該層由ARM 負責實現(xiàn)。包括對寄存器名稱、地址的定義,對核寄存器、NVIC、 調(diào)試子系統(tǒng)的訪問接口定義以及對特殊用途寄存器的訪問接口(例如:CONTROL, xPSR)定義。由于對特殊寄存器的訪問以內(nèi)聯(lián)方式定義,所以針對不同的編譯器ARM 統(tǒng)一用來屏蔽差異。該層定義的接口函數(shù)均是可重入的。(2) 片上外設訪問層(DPAL, Device Peripheral Access Layer) :該層由芯
11、片廠商負責實現(xiàn)。該層的實現(xiàn)與CPAL 類似,負責對硬件寄存器地址以及外設訪問接口進行定義。該層可調(diào)用CPAL 層提供的接口函數(shù)同時根據(jù)設備特性對異常向量表進行擴展,以處理相應外設的中斷請求。(3) 外設訪問函數(shù)( AFP, Access Functions for Peripherals) : 該層也由芯片廠商負責實現(xiàn),主要是提供訪問片上外設的訪問函數(shù),這一部分是可選的。對一個 Cortex-M 微控制系統(tǒng)而言,CMSIS 通過以上三個部分實現(xiàn)了:l 定義了訪問外設寄存器和異常向量的通用方法;l 定義了核內(nèi)外設的寄存器名稱和核異常向量的名稱;l 為 RTOS 核定義了與設備獨立的接口,包括De
12、bug 通道。這樣芯片廠商就能專注于對其產(chǎn)品的外設特性進行差異化,并且消除他們對微控制器進行編程時需要維持的不同的、互相不兼容的標準需求,以達到低成本開發(fā)的目的。CMSIS中的具體文件結構如表5-6 所示。表5-6 CMSIS文件夾結構CMSISCoreDocumentationCMSIS 文 檔CM3StartuparmMDK ARM編 譯 器啟動文件startup_stm32f10x_hd.s:大容量產(chǎn)品啟動文件startup_stm32f10x_md.s:中容量產(chǎn)品啟動文件startup_stm32f10x_ld.s:小容量產(chǎn)品啟動文件gcc_ride7GCC 編譯器 啟動文件iarIA
13、R 編 譯 器 啟動文件TrueSTUDIOTrueSTUDIO編譯器啟動 文件本文件夾包含STMF10xxxCMSIS 文件:微控制器外設訪問層和內(nèi)核設備訪問層:core_cm3.h : CMSIS 的Cortex-M3 內(nèi)核設備訪問層頭文件core_cm3.c : CMSIS 的Cortex-M3 內(nèi)核設備訪問層源文件stm32f10x.h : CMSIS 的Cortex-M3 STM32f10xxx 微控制器外設訪問層頭文件system_stm32f10x.h:CMSIS 的Cortex-M3STM32f10xxx 微控制器外設訪問層頭文件system_stm32f10x.c:CMSIS
14、 的Cortex-M3STM32f10xxx 微控制器外設訪問層源文件在實際開發(fā)過程中,根據(jù)應用程序的需要,可以采取2種方法使用標準外設庫(StdPeriph_Lib):(1) 使用外設驅(qū)動:這時應用程序開發(fā)基于外設驅(qū)動的API(應用編程接口)。 用戶只需要配置文件 ” stm32f10x_conf.h,并使用相應的文件 ” stm32f10x_ppp.h/.c 即可。 ”(2) 不使用外設驅(qū)動:這時應用程序開發(fā)基于外設的寄存器結構和位定義文件。這兩種方法的優(yōu)缺點在“使用標準外設庫開發(fā)的優(yōu)勢”小節(jié)中已經(jīng)有了具體的介紹,這里仍要說明的是,使用使用標準外設庫進行開發(fā)可以極大的減小軟件開發(fā)的工作量,
15、也是目前嵌入式系統(tǒng)開發(fā)的一個趨勢。標準外設庫(StdPeriph_Lib)支持STM32F10xxx系列全部成員:大容量, 中容量和小容量產(chǎn)品。從表 5-6 中也可以看出,啟動文件已經(jīng)對不同的系列進行了劃分,實際開發(fā)中根據(jù)使用的STM32 產(chǎn)品具體型號,用戶可以通過文件” stm32f10x.h中的預處理 ” define 或者通過開發(fā)環(huán)境中的全局設置來配置標準外設庫(StdPeriph_Lib),一個define 對應一個產(chǎn)品系列。下面列出支持的產(chǎn)品系列STM32F10x_LD: STM32小容量產(chǎn)品STM32F10x_MD: STM32中容量產(chǎn)品STM32F10x_HD: STM32大容量
16、產(chǎn)品在庫文件中這些define 的具體作用范圍是:l 文件 “ stm3210f.h中的中斷 ”IRQ定義l 啟動文件中的向量表,小容量,中容量,大容量產(chǎn)品各有一個啟動文件l 外設存儲器映像和寄存器物理地址l 產(chǎn)品設置:外部晶振(HSE)的值等l 系統(tǒng)配置函數(shù)因此通過宏定義這種方式,可以使標準外設庫適用于不同系列的產(chǎn)品,同時也方便與不同產(chǎn)品之間的軟件移植,極大的方便了軟件的開發(fā)。4. 使用步驟前面幾個小節(jié)已經(jīng)詳細介紹了標準外設庫的組成結構以及部分主要文件的功能描述,那么如果在開發(fā)中使用標準外設庫需要哪些描述呢?下面就進行簡要的介紹,這兒介紹的使用方法是與開發(fā)環(huán)境無關的,在不同的開發(fā)環(huán)境中可能在
17、操作方式上略有不同,但是總體的流程都是一樣的,下一小節(jié)將介紹在MDK ARM 開發(fā)環(huán)境下使用標準外設庫的詳細過程。首先新建一個項目并設置工具鏈對應的啟動文件,可以使用標準外設庫中提供的模板,也可以自己根據(jù)自己的需求新建。標準外設庫中已經(jīng)提供了不同工具鏈對應的文件,位于STM32F10x_StdPeriph_Lib_V3.4.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartup目錄下。其次按照使用產(chǎn)品的具體型號選擇具體的啟動文件,加入工程。文件主要按照使用產(chǎn)品的容量進行區(qū)分,根據(jù)產(chǎn)品容量進行選擇即可。每個文件的具體含義可以在“ stm32f10x.h
18、文件中”找到對應的說明,摘錄如下:#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)/*
19、#define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices*/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: S
20、TM32 Medium density Value Linedevices */ /* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */* #define ST
21、M32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */#endif/* Tip: To avoid modifying this file each time you need to switch between thesedevices, you can define the device in your toolchain compiler preprocessor.- Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx mic
22、rocontrollers where the Flash memory density ranges between 16 and 32 Kbytes.- Low-density value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.- Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where t
23、he Flash memory density ranges between 64 and 128 Kbytes.- Medium-density value line devices are STM32F100xx microcontrollers where theFlash memory density ranges between 64 and 128 Kbytes.- High-density devices are STM32F101xx and STM32F103xx microcontrollers wherethe Flash memory density ranges be
24、tween 256 and 512 Kbytes.- High-density value line devices are STM32F100xx microcontrollers where theFlash memory density ranges between 256 and 512 Kbytes.- XL-density devices are STM32F101xx and STM32F103xx microcontrollers wherethe Flash memory density ranges between 512 and 1024 Kbytes.- Connect
25、ivity line devices are STM32F105xx and STM32F107xx microcontrollers.- /“ stm32f10x.h是整個標準外設庫的入口文件,這個文件包含了 ”STM32F10x 全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射等。為了是這個文件適用于不同系列的產(chǎn)品,程序中是通過宏定義來實現(xiàn)不同產(chǎn)品的匹配的,上面這段程序的注釋中已經(jīng)詳細給出了每個啟動文件所對應的產(chǎn)品系列,與之對應,也要相應的修改這個入口文件,需要根據(jù)所使用的產(chǎn)品系列正確的注釋/去掉相應的注釋define。在這段程序的下方同樣有這樣的
26、一個注釋程序/*#define USE_STDPERIPH_DRIVER用于選擇是*/否使用標準外設庫,如果保留這個注釋,則用戶開發(fā)程序可以基于直接訪問“ stm32f10x.h中定義的外設寄存器,所有的操作均基于寄存器完成,目前不使用固件庫的單片機開發(fā),如51 、 AVR、 MSP430 等其實都是采用此種方式,通過在對應型號的頭文件中進行外設寄存器等方面的定義,從而在程序中對相應的寄存器操作完成相應的功能設計。如果去掉/*#define USE_STDPERIPH_DRIVER的注釋,則是使用標準外設庫進行開發(fā),用戶 */需要使用在文件“ stm32f10x_conf.h中,選擇要用的外設
27、,外設同樣是通過注釋 ”/去掉注釋的方式來選擇。示例程序如下:/* 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" */* #include "stm32f10x_crc.h&quo
28、t; */* #include "stm32f10x_dac.h" */* #include "stm32f10x_dbgmcu.h" */#include "stm32f10x_dma.h"/* #include "stm32f10x_exti.h" */* #include "stm32f10x_flash.h" */* #include "stm32f10x_fsmc.h" */#include "stm32f10x_gpio.h"/* #inclu
29、de "stm32f10x_i2c.h" */* #include "stm32f10x_iwdg.h" */* #include "stm32f10x_pwr.h" */#include "stm32f10x_rcc.h"/* #include "stm32f10x_rtc.h" */* #include "stm32f10x_sdio.h" */* #include "stm32f10x_spi.h" */* #include "stm32f10x_tim.h" */* #include "stm32f10x_usart.h" */* #include "stm32f10x_wwdg.h" */#include "misc.h" /* High level functions for NVI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三方投資合作合同樣本
- 個人合伙合同承諾書及擔保條款范文
- 2025年二手車聯(lián)盟運營協(xié)議范本
- 2025年餐飲行業(yè)技術股權合作協(xié)議書
- 2025年標準動產(chǎn)寄托協(xié)議文本
- 二手汽車交易合同
- 中外貿(mào)易進口合同范本(DDP條款)
- 上海市商品房購買合同范本
- 個人股權轉(zhuǎn)讓合同范文
- 個人車位轉(zhuǎn)讓正式合同模板
- 2024年山東省東營市中考數(shù)學試題 (原卷版)
- 2024全國能源行業(yè)火力發(fā)電集控值班員理論知識技能競賽題庫(多選題)
- 公司員工外派協(xié)議書范文
- 信息科技重大版 七年級上冊 互聯(lián)網(wǎng)應用與創(chuàng)新 第二單元教學設計 互聯(lián)網(wǎng)原理
- 肺栓塞的護理查房完整版
- 手術患者手術部位標識制度
- 運輸安全生產(chǎn)知識培訓試卷
- 抖音麗人行業(yè)短視頻直播項目運營策劃方案
- (2024年)知識產(chǎn)權全套課件(完整)
- 2024-2030年中國城市軌道交通行業(yè)發(fā)展現(xiàn)狀分析及市場供需預測報告
- 預防靜脈血栓疾病知識講座
評論
0/150
提交評論