STM32F10X系列微控制器標準外設庫的應用
摘要:基于簡化Codex-M核微控制器嵌入式軟件的開發(fā)步驟,增強軟件可移植性的目的,時微控制器軟件接口標準(CMSIS)、ST公司標準外設庫V3.5的文件結構、相互聯(lián)系、功能作用進行了簡要介紹,并以具有Cortex-M3內核的STM32F103VET6為例,給出了IAR FOR ARM6.30編程環(huán)境下的開發(fā)步驟。結合具體應用,本文對數(shù)據(jù)端口、中斷進行設置,縮短了開發(fā)時間,提高了代碼效率。
關鍵詞:Cortex-M;微控制器;外設庫;CMSIS
Stm32f10x系列微控制器具有Cortex-M3內核結構,它集成了CM3core的中心處理器內核和先進的系統(tǒng)外設,實現(xiàn)了內置的中斷控制、存儲器保護,以及系統(tǒng)的調試和跟蹤功能。在進行嵌入式系統(tǒng)設計時,控制軟件首先需要對微控制器的啟動、系統(tǒng)時鐘、存儲器映射、中斷向量、異常處理等進行設置,增加了控制軟件的前期開發(fā)時間,更加造成了初學者的難度。為了縮短開發(fā)時間、提高軟件的可移植性,同時降低開發(fā)成本,ST公司提供了標準外設驅動庫,該庫集成了CMSIS文件及微控制器所有外設驅動函數(shù),由于屏蔽了不同型號微控制器之間的差異,用戶文件僅需調用相應的庫函數(shù)便可完成系統(tǒng)配置,簡化了開發(fā)流程,降低了開發(fā)難度。
1 CMSIS文件結構
CMSIS為Codex微控制器軟件接口標準,提供了獨立于Cortex-M處理器的外設、實時操作系統(tǒng)、中間組件的通用接口方法,解決了軟件組件應用于不同Cortex核微控制器時所帶來的難題,簡化了軟件復用,降低了Codex-M上操作系統(tǒng)的移植難度。
CMSIS的文件結構如圖1所示(以Codex-M3為例),其中stdint.h包括對8位、16位、32位等類型指示符的定義,主要用來屏蔽不同編譯器之前的差異。core_cm3.h和core_cm3.c中包括Cortex_M3核的全局變量聲明和定義,并定義一些靜態(tài)功能函數(shù)。system_stm32.h和system_ stm 32.c是不同芯片廠商定義的系統(tǒng)初始化函數(shù)SystemInit(),以及一些指示時鐘的變量。Stm32f10x.h是提供給應用程序的頭文件,包含core _cm3.h和system_stm32.h,定義了與特定芯片廠商相關的寄存器以及各中斷異常號,并可定制M3核中的特殊設備,如MCU、中斷優(yōu)先級位數(shù)以及SysTick時鐘配置。雖然CMSIS提供的文件很多,但在應用程序中只需包含h頭文件。
2 標準外設庫簡介
ST官方提供的標準外設庫文件包括標準外設庫文件、標準外設驅動例程、各種開發(fā)環(huán)境下的模板示例、評估板專用驅動等幾部分,其中,CMSIS和STM32F10x_StdPeriph_Driver是最重要的部分。STM32F10x_StdPeriph_Driver則包括了微控制器所有外設對應驅動函數(shù),這些驅動函數(shù)均使用C語言編寫,并提供了統(tǒng)一的函數(shù)調用接口。Project文件夾中則包括了ST官方的所有例程和基于不同編譯器的項目模板,這些例程是學習和使用STM32的重要參考。Utilities包含了相關評估板的示例程序和驅動函數(shù),供使用官方評估板的開發(fā)者使用,其中很多驅動函數(shù)同樣可以作為學習的重要參考。
標準外設庫文件之間的關系如圖2所示,每一個標準外設驅動包括源文件stm32f10x_PPP.C和頭文件stm32f10x_ppp.h兩個文件(PPP表示外設,如GPIO、EXTI、I2C等),源文件中包含了相應外設的所有驅動函數(shù),在misc.c文件中定義了CMSIS功能的一些附加函數(shù),如對NVIC的配置等。STM32f10x.h為CMSIS Codex-M3設備外設訪問層頭文件,包含了STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射,以及是否使用標準外設庫設置等。System_stm32f10x.C為CMSIS Cortex-M3設備外設訪問層系統(tǒng)文件,完成系統(tǒng)初始化及時鐘配置。Stm32f10x_conf.h為標準外設驅動配置文件,通過更改包含的外設頭文件來選擇所使用的外設,在新建程序和進行功能變更之前應當首先修改對應的配置。Stm32f10x_it.c為外設中斷函數(shù)文件,通過在相應位置加入中斷程序代碼執(zhí)行相應中斷操作,在實際應用中,中斷函數(shù)也可以設置在項目主程序文件中,但中斷函數(shù)名必須正確。
3 基于標準外設庫的實現(xiàn)步驟
在IAR FOR ARM6.30編程環(huán)境下,采用V3.50的標準外設庫,開發(fā)步驟如下:
1)首先創(chuàng)建一能夠象征項目含義的文件夾(如touch),并在該文件夾下創(chuàng)建名為EVARM和Library的文件夾;
2)STM32F10x_StdPeriph_Lib_V3.5.0中STM32F10x_StdPeriph_Driver和CMSIS文件夾拷貝到touch目錄下;
3)將\STM32F10x_StdPeriph_Lib_V350\Project\STM32F10x_StdPeriph_Template下的main.c、stm32f10x_confh、stm32f10x_it.c、stm32f10x_it.h拷貝到touch目錄下;
4)將\STM32F10x_StdPeriph_Lib_V350\Project\STM32F10x_StdPeriph_Template\EWARM下的stm32f10x_flashcfstm32f10x_flash_ex tsram.icf、stm32f10x_nor.icf、stm32f10x_ram.icf拷貝至/touch/EVARM;
5)打開IAR Embedded Workbench IDE,創(chuàng)建一個新的workspace,而后按照模板創(chuàng)建一個新空白項目;
6)為項目添加工作組CMSIS、StdPeriph_Driver、EVARM、User、Doc,如圖3所示;
7)向各工作組添加文件,將core_cm3.c、system_stm32f10x.c添加到CMSIS;將startup_stm32f10x_hd.s添加到EVARM;將misc.c、stm32f10x_rcc.c及所需其它外設驅動源文件添加到StdPeriph_Driver;將main.c、stm32f10x_it.c添加到User;
8)在Project→options→C/C++Compiler→Preprocessor中設置、添加編譯搜索路徑,最好包括所有項目中所調用文件的路徑,否則需要在源文件中給出被調文件的完整路徑;
9)在Project→options→Ceneral Options→Target標簽頁選擇相應器件;
10)勾選Project→Options→General Options→Library Configuration→Use CMSIS選項;
11)在stm32f10x.h文件中配置控制器啟動文件,根據(jù)所選用產(chǎn)品系列,去掉相應注釋即可,如令#defineSTM32F10X_HD有意義;同時,去掉/*#define USE_STDPERIPH_DRIVER*/的注釋,表示使用標準外設庫;
12)選擇使用HSI或HSE,system_stm32f10x.c中相關程序代碼段如下:
在不進行任何改動情況下,系統(tǒng)默認使用HIS作為系統(tǒng)時鐘,如使用HSE作為系統(tǒng)時鐘,則需將/*#define SYSCLK_FREQ_HSE HSE_VALU E*/的注釋去掉,屏蔽HSI頻率定義項,同時根據(jù)所用外部晶振頻率在stm32f10x.h中重新定義HSE_VALUE的數(shù)值。
13)對main.c文件內容進行修改,但須保留#include“stm32f10x.h”,編譯、連接項目文件后生成可執(zhí)行代碼;
14)在仿真器編譯環(huán)境下,進行系統(tǒng)調試。
4 應用實例
采用STM32F103VET6微控制器實現(xiàn)LCD顯示器的各種操作,LCD顯示器采用北京寧和公司的480×234TFT256色顯示器,配套控制器為NHC_ 36。微控制器PD口高8位作為數(shù)據(jù)口,PB15、PB14、PC6、PC7、PC8分別作為A0、WR、A1、CS、RD的控制信號,當PBO引腳電平在下降沿時觸發(fā)外部中斷線0中斷,在顯示器上繪制一條直線。建立項目步驟如3所述,將中斷函數(shù)設置在主程序文件中,使用HSE為系統(tǒng)時鐘,本文且未對LCD操作函數(shù)進行說明,僅給出利用標準外設庫進行端口及中斷設置的代碼。
微控制器I/O口配置程序代碼如下:
為了將PB0配置為中斷輸入且中斷有效,須開啟PB口I/O時鐘及AFIO時鐘,中斷配置代碼如下:
在主程序中設置循環(huán)狀態(tài)以等待中斷,當PB0口由高電平跳變?yōu)榈碗娖綍r,觸發(fā)中斷,調用外部中斷線0中斷函數(shù)。具體應用中,如果有多個中斷源可以觸發(fā)該外部中斷,還須判斷中斷標志位以確定執(zhí)行何種操作。
5 結束語
文中介紹了ST公司V3.50標準外設庫的文件架構和相互聯(lián)系,基于IAR FOR ARM6.30開發(fā)環(huán)境給出了參考編程步驟,并根據(jù)實例設計了具體的程序代碼。采用標準外設庫進行嵌入式軟件開發(fā),無需太多了解微處理器底層硬件結構,只要具有C/C++軟件基礎,根據(jù)本文介紹的參考步驟,便可開發(fā)出高效直觀的程序代碼。
c++相關文章:c++教程
評論