(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è)寄存器和異常向量的通用方法;
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)
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è)訪問層和內(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.h:CMSIS的Cortex-M3 STM32f10xxx微控制器外設(shè)訪問層頭文件
system_stm32f10x.c:CMSIS的Cortex-M3 STM32f10xxx微控制器外設(shè)訪問層源文件
在實(shí)際開發(fā)過程中,根據(jù)應(yīng)用程序的需要,可以采取2種方法使用標(biāo)準(zhǔn)外設(shè)庫(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è)庫開發(fā)的優(yōu)勢(shì)”小節(jié)中已經(jīng)有了具體的介紹,這里仍要說明的是,使用使用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行開發(fā)可以極大的減小軟件開發(fā)的工作量,也是目前嵌入式系統(tǒng)開發(fā)的一個(gè)趨勢(shì)。
標(biāo)準(zhǔn)外設(shè)庫(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è)庫(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)品
在庫文件中這些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ù)
因此通過宏定義這種方式,可以使標(biāo)準(zhǔn)外設(shè)庫適用于不同系列的產(chǎn)品,同時(shí)也方便與不同產(chǎn)品之間的軟件移植,極大的方便了軟件的開發(fā)。
1.1.4 STM32F10XXX標(biāo)準(zhǔn)外設(shè)庫的使用標(biāo)準(zhǔn)外設(shè)庫中包含了眾多的變量定義和功能函數(shù),如果不能了解他們的命名規(guī)范和使用規(guī)律將會(huì)給編程帶來很大的麻煩,本節(jié)將主要敘述標(biāo)準(zhǔn)外設(shè)庫中的相關(guān)規(guī)范,通過這些規(guī)范的學(xué)習(xí)可以更加靈活的使用固件庫,同時(shí)也將極大增強(qiáng)程序的規(guī)范性和易讀性,同時(shí)標(biāo)準(zhǔn)外設(shè)庫中的這種規(guī)范也值得我們?cè)谶M(jìn)行其他相關(guān)的開發(fā)時(shí)使用和借鑒。
1. 縮寫定義標(biāo)準(zhǔn)外設(shè)庫中的主要外設(shè)均采用了縮寫的形式,通過這些縮寫可以很容易的辨認(rèn)對(duì)應(yīng)的外設(shè)。
縮寫
外設(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ú)立看門狗
PWR
電源/功耗控制
RCC
復(fù)位與時(shí)鐘控制器
RTC
實(shí)時(shí)時(shí)鐘
SDIO
SDIO接口
SPI
串行外設(shè)接口
TIM
定時(shí)器
USART
通用同步/異步收發(fā)器
WWDG
窗口看門狗
2. 命名規(guī)則
評(píng)論