(2) 片上外設(shè)訪問(wèn)層(DPAL, Device Peripheral Access Layer):該層由芯片廠商負(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, 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è)的寄存器名稱和核異常向量的名稱;
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)如表 5?6所示。
表 5?6 CMSIS文件夾結(jié)構(gòu)
CMSIS
Core
Documentation
CMSIS文檔
CM3
Startup
arm
MDK ARM編譯器啟動(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_ride7
GCC編譯器啟動(dòng)文件
iar
IAR編譯器啟動(dòng)文件
TrueSTUDIO
TrueSTUDIO編譯器啟動(dòng)文件
本文件夾包含STMF10xxx CMSIS文件:微控制器外設(shè)訪問(wèn)層和內(nèi)核設(shè)備訪問(wèn)層:
core_cm3.h:CMSIS的Cortex-M3內(nèi)核設(shè)備訪問(wèn)層頭文件
core_cm3.c:CMSIS的Cortex-M3內(nèi)核設(shè)備訪問(wèn)層源文件
stm32f10x.h:CMSIS的Cortex-M3 STM32f10xxx微控制器外設(shè)訪問(wèn)層頭文件
system_stm32f10x.h:CMSIS的Cortex-M3 STM32f10xxx微控制器外設(shè)訪問(wèn)層頭文件
system_stm32f10x.c:CMSIS的Cortex-M3 STM32f10xxx微控制器外設(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)品。從表 5?6中也可以看出,啟動(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ā)。
1.1.4 STM32F10XXX標(biāo)準(zhǔn)外設(shè)庫(kù)的使用標(biāo)準(zhǔn)外設(shè)庫(kù)中包含了眾多的變量定義和功能函數(shù),如果不能了解他們的命名規(guī)范和使用規(guī)律將會(huì)給編程帶來(lái)很大的麻煩,本節(jié)將主要敘述標(biāo)準(zhǔn)外設(shè)庫(kù)中的相關(guān)規(guī)范,通過(guò)這些規(guī)范的學(xué)習(xí)可以更加靈活的使用固件庫(kù),同時(shí)也將極大增強(qiáng)程序的規(guī)范性和易讀性,同時(shí)標(biāo)準(zhǔn)外設(shè)庫(kù)中的這種規(guī)范也值得我們?cè)谶M(jìn)行其他相關(guān)的開(kāi)發(fā)時(shí)使用和借鑒。
1. 縮寫(xiě)定義標(biāo)準(zhǔn)外設(shè)庫(kù)中的主要外設(shè)均采用了縮寫(xiě)的形式,通過(guò)這些縮寫(xiě)可以很容易的辨認(rèn)對(duì)應(yīng)的外設(shè)。
縮寫(xiě)
外設(shè)/單元
ADC
模數(shù)轉(zhuǎn)換器
BKP
備份寄存器
CAN
控制器局域網(wǎng)模塊
CEC
CRC
CRC計(jì)算單元
DAC
數(shù)模轉(zhuǎn)換器
DBGMCU
調(diào)試支持
DMA
直接內(nèi)存存取控制器
EXTI
外部中斷事件控制器
FLASH
閃存存儲(chǔ)器
FSMC
靈活的靜態(tài)存儲(chǔ)器控制器
GPIO
通用輸入輸出
I2C
I2C接口
IWDG
獨(dú)立看門(mén)狗
PWR
電源/功耗控制
RCC
復(fù)位與時(shí)鐘控制器
RTC
實(shí)時(shí)時(shí)鐘
SDIO
SDIO接口
SPI
串行外設(shè)接口
TIM
定時(shí)器
USART
通用同步/異步收發(fā)器
WWDG
窗口看門(mén)狗
2. 命名規(guī)則
評(píng)論