當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]最近考試較多,教材編寫(xiě)暫停了一下,之前寫(xiě)了很多,只是每一章都感覺(jué)不是特別完整,最近把其中的部分內(nèi)容貼出來(lái)一下,歡迎指正。本文內(nèi)容基于我對(duì)固件庫(kù)的理解,按照便于理解的順序進(jìn)行整理介紹,部分參考了固件庫(kù)的

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

STM32標(biāo)準(zhǔn)外設(shè)庫(kù)之前的版本也稱(chēng)固件函數(shù)庫(kù)或簡(jiǎn)稱(chēng)固件庫(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 (application programming interface 應(yīng)用編程界面)驅(qū)動(dòng),API對(duì)該驅(qū)動(dòng)程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱(chēng)都進(jìn)行了標(biāo)準(zhǔn)化。

ST公司2007年10月發(fā)布了V1.0版本的固件庫(kù),MDK ARM3.22之前的版本均支持該庫(kù)。2008年6月發(fā)布了V2.0版的固件庫(kù),從2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件庫(kù)。V3.0以后的版本相對(duì)之前的版本改動(dòng)較大,本書(shū)使用目前較新的V3.4版本。

1.1.2 使用標(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é)就可以靈活規(guī)范的使用每一個(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)用。

1.1.3 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)更新到最新的3.5版本,開(kāi)發(fā)環(huán)境中自帶的標(biāo)準(zhǔn)外設(shè)庫(kù)為2.0.3版本,本書(shū)中以比較穩(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ù)文件夾描述

STM32F10x_StdPeriph_Lib_V3.4.0

_htmresc

本文件夾包含了所有的html頁(yè)面資源

Libraries

CMSIS

見(jiàn)表 5?6

STM32F10x_StdPeriph_Driver

inc

標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)頭文件

src

標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)源文件


Project

Examples

標(biāo)準(zhǔn)外設(shè)庫(kù)驅(qū)動(dòng)的完整例程

Template

MDK-ARM

KEIL RVMDK的項(xiàng)目模板示例

RIDE

Raisonance RIDE的項(xiàng)目模板示例


EWARM

IAR EWARM的項(xiàng)目模板示例


Utilities

STM3210-EVAL

本文件夾包含了用于STM3210B-EVAL和STM3210E-EVAL評(píng)估板的專(zhuān)用驅(qū)動(dòng)

標(biāo)準(zhǔn)外設(shè)庫(kù)的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是獨(dú)立于供應(yīng)商的Cortex-M 處理器系列硬件抽象層,為芯片廠商和中間件供應(yīng)商提供了簡(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官方的所有例程和基于不同編譯器的項(xiàng)目模板,這些例程是學(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)如圖 5?4所示。圖中很好的展示了各層以及具體文件之間的聯(lián)系,各文件的具體功能說(shuō)明如表 5?5所示。

圖 5?4 STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫(kù)體系結(jié)構(gòu)

表 5?5 文件功能說(shuō)明

文件名

功能描述

具體功能說(shuō)明

core_cm3.h

core_cm3.c

Cortex-M3內(nèi)核及其設(shè)備文件

訪問(wèn)Cortex-M3內(nèi)核及其設(shè)備:NVIC,SysTick等

訪問(wèn)Cortex-M3的CPU寄存器和內(nèi)核外設(shè)的函數(shù)

stm32f10x.h

微控制器專(zhuān)用頭文件

這個(gè)文件包含了STM32F10x全系列所有外設(shè)寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲(chǔ)空間的地址映射等

system_stm32f10x.h

system_stm32f10x.c

微控制器專(zhuān)用系統(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_stm32f10x_Xd.s

編譯器啟動(dòng)代碼

微控制器專(zhuān)用的中斷處理程序列表(與頭文件一致)

弱定義(Weak)的中斷處理程序默認(rèn)函數(shù)(可以被用戶代碼覆蓋) 該文件是與編譯器相關(guān)的

stm32f10x_conf.h

固件庫(kù)配置文件

通過(guò)更改包含的外設(shè)頭文件來(lái)選擇固件庫(kù)所使用的外設(shè),在新建程序和進(jìn)行功能變更之前應(yīng)當(dāng)首先修改對(duì)應(yīng)的配置。

stm32f10x_it.h

stm32f10x_it.c

外設(shè)中斷函數(shù)文件

用戶可以相應(yīng)的加入自己的中斷程序的代碼,對(duì)于指向同一個(gè)中斷向量的多個(gè)不同中斷請(qǐng)求,用戶可以通過(guò)判斷外設(shè)的中斷標(biāo)志位來(lái)確定準(zhǔn)確的中斷源,執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。

stm32f10x_ppp.h

stm32f10x_ppp.c

外設(shè)驅(qū)動(dòng)函數(shù)文件

包括了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用函數(shù),這部分是進(jìn)行編程功能實(shí)現(xiàn)的重要組成部分。

Application.c

用戶文件

用戶程序文件,通過(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)種類(lèi)繁多的產(chǎn)品,如果沒(méi)有一個(gè)通用的軟件接口標(biāo)準(zhǔn),那么當(dāng)開(kāi)發(fā)者在使用不同廠家的芯片時(shí)將極大的增加了軟件開(kāi)發(fā)成本,因此,ARM與Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER和ST等諸多芯片和軟件廠商合作,將所有Cortex芯片廠商產(chǎn)品的軟件接口標(biāo)準(zhǔn)化,制定了CMSIS標(biāo)準(zhǔn)。此舉意在降低軟件開(kāi)發(fā)成本,尤其針對(duì)新設(shè)備項(xiàng)目開(kāi)發(fā),或者將已有軟件移植到其他芯片廠商提供的基于Cortex處理器的微控制器的情況。有了該標(biāo)準(zhǔn),芯片廠商就能夠?qū)⑺麄兊馁Y源專(zhuān)注于產(chǎn)品外設(shè)特性的差異化,并且消除對(duì)微控制器進(jìn)行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)的需求,從而達(dá)到降低開(kāi)發(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è)寄存器的不同定義;另一方面又向上層的操作系統(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ù)雜。

圖 5?5 CMSIS標(biāo)準(zhǔn)的軟件架構(gòu)

層主要分為以下3 個(gè)部分:

(1) 核內(nèi)外設(shè)訪問(wèn)層(CPAL,Core Peripheral Access Layer):該層由ARM 負(fù)責(zé)實(shí)現(xiàn)。包括對(duì)寄存器名稱(chēng)、地址的定義,對(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, Device Peripheral Access Layer):該層由芯片廠商負(fù)責(zé)實(shí)現(xiàn)。該層的實(shí)現(xiàn)與CPAL 類(lèi)似,負(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, Access Functions for Peripherals):該層也由芯片廠商負(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è)的寄存器名稱(chēng)和核異常向量的名稱(chēng);

l 為RTOS 核定義了與設(shè)備獨(dú)立的接口,包括Debug 通道。

這樣芯片廠商就能專(zhuān)注于對(duì)其產(chǎn)品的外設(shè)特性進(jìn)行差異化,并且消除他們對(duì)微控制器進(jìn)

行編程時(shí)需要維持的不同的、互相不兼容的標(biāo)準(zhǔn)需求,以達(dá)到低成本開(kāi)發(fā)的目的。CMSIS中的具體文件結(jié)構(gòu)如表 5?6所示。

表 5?6 CMSIS文件夾結(jié)構(gòu)

CMSIS

Core

Documentation

CMSIS文檔


CM3

Startup

arm

MDK ARM編譯器啟動(dòng)文件

startup_stm32f10x_hd.s: 大容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉