999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

STM 32F10X系列微控制器標準外設庫的應用

2012-03-17 07:20:34楊鳳彪
電子設計工程 2012年11期
關鍵詞:定義標準

楊鳳彪,劉 云

(1.軍械工程學院 電氣工程系,河北 石家莊 050003;

2.河北普興電子科技有限責任公司 綜合管理部,河北 石家莊 050200)

Stm32f10x系列微控制器具有Cortex-M3內核結構,它集成了CM3core的中心處理器內核和先進的系統外設,實現了內置的中斷控制、存儲器保護,以及系統的調試和跟蹤功能[1]。在進行嵌入式系統設計時,控制軟件首先需要對微控制器的啟動、系統時鐘、存儲器映射、中斷向量、異常處理等進行設置,增加了控制軟件的前期開發時間,更加造成了初學者的難度。為了縮短開發時間、提高軟件的可移植性,同時降低開發成本,ST公司提供了標準外設驅動庫,該庫集成了CMSIS文件及微控制器所有外設驅動函數,由于屏蔽了不同型號微控制器之間的差異,用戶文件僅需調用相應的庫函數便可完成系統配置,簡化了開發流程,降低了開發難度。中stdint.h包括對8位、16位、32位等類型指示符的定義,主要用來屏蔽不同編譯器之前的差異。core_cm3.h和core_cm3.c中包括Cortex_M3核的全局變量聲明和定義,并定義一些靜態功能函數。system_stm32.h和 system_stm32.c是不同芯片廠商定義的系統初始化函數System Init(),以及一些指示時鐘的變量。Stm32f10x.h是提供給應用程序的頭文件,包含core_cm3.h和 system_stm32.h,定義了與特定芯片廠商相關的寄存器以及各中斷異常號,并可定制M3核中的特殊設備,如MCU、中斷優先級位數以及SysTick時鐘配置。雖然CMSIS提供的文件很多,但在應用程序中只需包含h頭文件[3]。

1 CMSIS文件結構

圖1 CMISIS文件結構Fig.1 File structure of CMSIS

CMSIS為Cortex微控制器軟件接口標準,提供了獨立于Cortex-M處理器的外設、實時操作系統、中間組件的通用接口方法,解決了軟件組件應用于不同Cortex核微控制器時所帶來的難題,簡化了軟件復用,降低了Cortex-M上操作系統的移植難度[2]。

CMSIS的文件結構如圖1所示 (以Cortex-M3為例),其

2 標準外設庫簡介

ST官方提供的標準外設庫文件包括標準外設庫文件、標準外設驅動例程、各種開發環境下的模板示例、評估板專用驅動等幾部分,其中,CMSIS和STM32F10x_StdPeriph_Driver是最重要的部分。STM32F10x_StdPeriph_Driver則包括了微控制器所有外設對應驅動函數,這些驅動函數均使用C語言編寫,并提供了統一的函數調用接口。Project文件夾中則包括了ST官方的所有例程和基于不同編譯器的項目模板,這些例程是學習和使用STM32的重要參考。Utilities包含了相關評估板的示例程序和驅動函數,供使用官方評估板的開發者使用,其中很多驅動函數同樣可以作為學習的重要參考[4]。

圖2 標準外設庫文件關系Fig.2 Standard peripherals library file inclusions relationship

標準外設庫文件之間的關系如圖2所示,每一個標準外設驅動包括源文件stm32f10x_ppp.c和頭文件stm32f10x_ppp.h 兩個文件(PPP 表示外設,如 GPIO、EXTI、I2C 等),源文件中包含了相應外設的所有驅動函數,在misc.c文件中定義了CMSIS功能的一些附加函數,如對NVIC的配置等。STM32f10x.h為CMSISCortex-M3設備外設訪問層頭文件,包含了STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射,以及是否使用標準外設庫設置等。System_stm32f10x.c為CMSISCortex-M3設備外設訪問層系統文件,完成系統初始化及時鐘配置。Stm32f10x_conf.h為標準外設驅動配置文件,通過更改包含的外設頭文件來選擇所使用的外設,在新建程序和進行功能變更之前應當首先修改對應的配置。Stm32f10x_it.c為外設中斷函數文件,通過在相應位置加入中斷程序代碼執行相應中斷操作,在實際應用中,中斷函數也可以設置在項目主程序文件中,但中斷函數名必須正確。

3 基于標準外設庫的實現步驟

在IAR FOR ARM6.30編程環境下, 采用 V3.50的標準外設庫,開發步驟如下[3-6]:

1)首先創建一能夠象征項目含義的文件夾(如touch),并在該文件夾下創建名為EVARM和Library的文件夾;

2)STM32F10x_StdPeriph_Lib_V3.5.0 中 STM32F10x_StdPeriph_Driver和CMSIS文件夾拷貝到touch目錄下;

3)將 STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template 下 的 main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 拷貝到 touch 目錄下;

4) 將 STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_TemplateEWARM 下的 stm32f10x_flash.icf、stm32f10x_flash_extsram.icf、stm32f10x_nor.icf、stm32f10x_ram.icf 拷 貝 至 /touch/EVARM;

5)打開IAR Embedded Workbench IDE,創建一個新的workspace,而后按照模板創建一個新空白項目;

6)為項目添加工作組 CMSIS、StdPeriph_Driver、EVARM、User、Doc,如圖 3 所示;

圖3 添加工作組界面Fig.3 Interface of add workgroup

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→General Options→Target標簽頁選擇相應器件;

10)勾選 Project→Options→General Options→Library Configuration→Use CMSIS選項;

11)在stm32f10x.h文件中配置控制器啟動文件,根據所選用產品系列,去掉相應注釋即可,如令#defineSTM32F10X_HD有意義;同時,去掉/*#define USE_STDPERIPH_DRIVER*/的注釋,表示使用標準外設庫;

12)選擇使用 HSI或 HSE,system_stm32f10x.c 中相關程序代碼段如下:

#if defined (STM32F10X_LD_VL) ||(defined STM32F10X_MD_VL) ||(defined STM32F10X_HD_VL)

/*#define SYSCLK_FREQ_HSE HSE_VALUE*/

#define SYSCLK_FREQ_24MHz 24000000

#else

/*#define SYSCLK_FREQ_HSE HSE_VALUE*/

/*#define SYSCLK_FREQ_24MHz 24000000*/

/*#define SYSCLK_FREQ_36MHz 36000000*/

/*#define SYSCLK_FREQ_48MHz 48000000*/

#define SYSCLK_FREQ_56MHz 56000000

/*#define SYSCLK_FREQ_72MHz 72000000*/

#endif

在不進行任何改動情況下,系統默認使用HIS作為系統時鐘,如使用HSE作為系統時鐘,則需將/*#define SYSCLK_FREQ_HSE HSE_VALUE*/的注釋去掉,屏蔽HSI頻率定義項,同時根據所用外部晶振頻率在stm32f10x.h中重新定義HSE_VALUE的數值。

13)對 main.c文件內容進行修改,但須保留 #include“stm32f10x.h”,編譯、連接項目文件后生成可執行代碼;

14)在仿真器編譯環境下,進行系統調試。

4 應用實例

采用STM32F103VET6微控制器實現LCD顯示器的各種操作,LCD顯示器采用北京寧和公司的480×234TFT256色顯示器,配套控制器為NHC_36。微控制器PD口高8位作為數 據 口 ,PB15、PB14、PC6、PC7、PC8 分 別 作 為 A0、WR、A1、CS、RD的控制信號,當PB0引腳電平在下降沿時觸發外部中斷線0中斷,在顯示器上繪制一條直線。建立項目步驟如3所述,將中斷函數設置在主程序文件中,使用HSE為系統時鐘,本文且未對LCD操作函數進行說明,僅給出利用標準外設庫進行端口及中斷設置的代碼[5]。

微控制器I/O口配置程序代碼如下:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;

GPIO_Init(GPIOC,&GPIO_InitStructure);

為了將PB0配置為中斷輸入且中斷有效,須開啟PB口I/O時鐘及AFIO時鐘,中斷配置代碼如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, EN ABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, EN ABLE);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_Pin Source0);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_Struture.NVIC_IRQChannel=EXTI0_IRQn;

NVIC_Struture.NVIC_IRQChannelPreemptionPriority=0;

NVIC_Struture.NVIC_IRQChannelSubPriority=1;

NVIC_Struture.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_Struture);

EXTI_InitStruture.EXTI_Line=EXTI_Line0;

EXTI_InitStruture.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStruture.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_InitStruture.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStruture);

外部中斷線0中斷函數代碼如下:

void EXTI0_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line0)!=RESET)

{

Line_Lcd(50,200,300,50,80); //畫直線函數

EXTI_ClearITPendingBit(EXTI_Line0);

}

}

在主程序中設置循環狀態以等待中斷,當PB0口由高電平跳變為低電平時,觸發中斷,調用外部中斷線0中斷函數。具體應用中,如果有多個中斷源可以觸發該外部中斷,還須判斷中斷標志位以確定執行何種操作。

5 結束語

文中介紹了ST公司V3.50標準外設庫的文件架構和相互聯系,基于IAR FOR ARM6.30開發環境給出了參考編程步驟,并根據實例設計了具體的程序代碼。采用標準外設庫進行嵌入式軟件開發,無需太多了解微處理器底層硬件結構,只要具有C/C++軟件基礎,根據本文介紹的參考步驟,便可開發出高效直觀的程序代碼。

[1]劉波文.ARM Cortex-M3應用開發實例詳解 [M].北京:電子工業出版社,2011.

[2]ST.stm32f10x_stdperiph_lib_um.chm[EB/OL].[2011-04].http://www.st.com/STM32

[3]langen.基于CMSIS標準的Cortex-M3應用軟件開發[EB/OL].[2009-12].http://www.dzsc.com/data/htm l

[4]emouse.STM32固件庫詳解[EB/OL].[2011-11].http://www.cnblogs.com/emouse

[5]jhliuzj.IAR FOR ARM 6.20 工程創建建議 (固件庫為3.5)[EB/OL].[2011-10].http://hi.baidu.com/jhliuzj.

[6]徐愛鈞.IAR EWAR V5嵌入式系統應用編程開發 [M].北京:北京航空航天大學出版社,2009.

猜你喜歡
定義標準
2022 年3 月實施的工程建設標準
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
忠誠的標準
當代陜西(2019年8期)2019-05-09 02:22:48
美還是丑?
你可能還在被不靠譜的對比度標準忽悠
一家之言:新標準將解決快遞業“成長中的煩惱”
專用汽車(2016年4期)2016-03-01 04:13:43
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
2015年9月新到標準清單
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 色久综合在线| 亚洲无码电影| 免费无码在线观看| 97超碰精品成人国产| 尤物成AV人片在线观看| 情侣午夜国产在线一区无码| 国产精品永久久久久| 国产日韩欧美一区二区三区在线| 91美女视频在线| 婷婷六月天激情| 亚洲精品视频免费| aa级毛片毛片免费观看久| 国产婬乱a一级毛片多女| 日韩av手机在线| 国产在线观看一区精品| 欧美日韩在线成人| 五月婷婷欧美| 欧美日韩在线国产| 亚洲国产一区在线观看| 亚洲精品无码久久毛片波多野吉| 久爱午夜精品免费视频| 国产免费人成视频网| 国产国语一级毛片| 中文字幕亚洲无线码一区女同| 99热这里只有精品久久免费| 日韩免费毛片| 五月婷婷导航| 亚洲一区二区日韩欧美gif| 亚洲无码一区在线观看| 亚洲视频一区在线| 欧美精品成人一区二区在线观看| 在线观看热码亚洲av每日更新| 91啪在线| 91小视频版在线观看www| 91在线视频福利| 性视频一区| 日韩精品亚洲人旧成在线| 国产极品美女在线观看| 久久精品电影| 中文无码毛片又爽又刺激| 99视频精品在线观看| 亚洲毛片在线看| 亚洲天堂日韩av电影| 亚洲一区二区三区在线视频| 在线高清亚洲精品二区| 成年女人a毛片免费视频| 91久久偷偷做嫩草影院电| 久久毛片基地| 色老头综合网| 欧美激情综合一区二区| 国产丝袜91| Jizz国产色系免费| 国产情精品嫩草影院88av| 国产 在线视频无码| 黄色网址手机国内免费在线观看| 99爱视频精品免视看| 精品在线免费播放| 视频二区亚洲精品| 色综合五月| 欧美日一级片| 国产AV无码专区亚洲A∨毛片| 亚洲欧美日韩高清综合678| 在线观看国产网址你懂的| 国产一区二区三区精品久久呦| 激情乱人伦| 久久96热在精品国产高清| 亚洲乱码精品久久久久..| 精品剧情v国产在线观看| 亚洲综合在线网| 久久精品人人做人人综合试看| 成人国产精品视频频| 久久综合亚洲鲁鲁九月天| 成人福利在线免费观看| 99视频在线观看免费| 国产精品亚洲日韩AⅤ在线观看| 欧美黑人欧美精品刺激| 久久久久亚洲AV成人人电影软件| 四虎精品国产AV二区| 久久久久亚洲AV成人人电影软件 | a毛片在线免费观看| 麻豆精品视频在线原创| 在线观看国产精美视频|