• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      STM 32F10X系列微控制器標(biāo)準(zhǔn)外設(shè)庫的應(yīng)用

      2012-03-17 07:20:34楊鳳彪
      電子設(shè)計(jì)工程 2012年11期
      關(guān)鍵詞:程序代碼外設(shè)微控制器

      楊鳳彪,劉 云

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

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

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

      1 CMSIS文件結(jié)構(gòu)

      圖1 CMISIS文件結(jié)構(gòu)Fig.1 File structure of CMSIS

      CMSIS為Cortex微控制器軟件接口標(biāo)準(zhǔn),提供了獨(dú)立于Cortex-M處理器的外設(shè)、實(shí)時(shí)操作系統(tǒng)、中間組件的通用接口方法,解決了軟件組件應(yīng)用于不同Cortex核微控制器時(shí)所帶來的難題,簡化了軟件復(fù)用,降低了Cortex-M上操作系統(tǒng)的移植難度[2]。

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

      2 標(biāo)準(zhǔn)外設(shè)庫簡介

      ST官方提供的標(biāo)準(zhǔn)外設(shè)庫文件包括標(biāo)準(zhǔn)外設(shè)庫文件、標(biāo)準(zhǔn)外設(shè)驅(qū)動例程、各種開發(fā)環(huán)境下的模板示例、評估板專用驅(qū)動等幾部分,其中,CMSIS和STM32F10x_StdPeriph_Driver是最重要的部分。STM32F10x_StdPeriph_Driver則包括了微控制器所有外設(shè)對應(yīng)驅(qū)動函數(shù),這些驅(qū)動函數(shù)均使用C語言編寫,并提供了統(tǒng)一的函數(shù)調(diào)用接口。Project文件夾中則包括了ST官方的所有例程和基于不同編譯器的項(xiàng)目模板,這些例程是學(xué)習(xí)和使用STM32的重要參考。Utilities包含了相關(guān)評估板的示例程序和驅(qū)動函數(shù),供使用官方評估板的開發(fā)者使用,其中很多驅(qū)動函數(shù)同樣可以作為學(xué)習(xí)的重要參考[4]。

      圖2 標(biāo)準(zhǔn)外設(shè)庫文件關(guān)系Fig.2 Standard peripherals library file inclusions relationship

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

      3 基于標(biāo)準(zhǔn)外設(shè)庫的實(shí)現(xiàn)步驟

      在IAR FOR ARM6.30編程環(huán)境下, 采用 V3.50的標(biāo)準(zhǔn)外設(shè)庫,開發(fā)步驟如下[3-6]:

      1)首先創(chuàng)建一能夠象征項(xiàng)目含義的文件夾(如touch),并在該文件夾下創(chuàng)建名為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,創(chuàng)建一個(gè)新的workspace,而后按照模板創(chuàng)建一個(gè)新空白項(xiàng)目;

      6)為項(xiàng)目添加工作組 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 及所需其它外設(shè)驅(qū)動源文件添加到 StdPeriph_Driver;將 main.c、stm32f10x_it.c 添加到 User;

      8)在 Project→options→C/C++Compiler→Preprocessor中設(shè)置、添加編譯搜索路徑,最好包括所有項(xiàng)目中所調(diào)用文件的路徑,否則需要在源文件中給出被調(diào)文件的完整路徑;

      9)在 Project→options→General Options→Target標(biāo)簽頁選擇相應(yīng)器件;

      10)勾選 Project→Options→General Options→Library Configuration→Use CMSIS選項(xiàng);

      11)在stm32f10x.h文件中配置控制器啟動文件,根據(jù)所選用產(chǎn)品系列,去掉相應(yīng)注釋即可,如令#defineSTM32F10X_HD有意義;同時(shí),去掉/*#define USE_STDPERIPH_DRIVER*/的注釋,表示使用標(biāo)準(zhǔn)外設(shè)庫;

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

      #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

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

      13)對 main.c文件內(nèi)容進(jìn)行修改,但須保留 #include“stm32f10x.h”,編譯、連接項(xiàng)目文件后生成可執(zhí)行代碼;

      14)在仿真器編譯環(huán)境下,進(jìn)行系統(tǒng)調(diào)試。

      4 應(yīng)用實(shí)例

      采用STM32F103VET6微控制器實(shí)現(xiàn)LCD顯示器的各種操作,LCD顯示器采用北京寧和公司的480×234TFT256色顯示器,配套控制器為NHC_36。微控制器PD口高8位作為數(shù) 據(jù) 口 ,PB15、PB14、PC6、PC7、PC8 分 別 作 為 A0、WR、A1、CS、RD的控制信號,當(dāng)PB0引腳電平在下降沿時(shí)觸發(fā)外部中斷線0中斷,在顯示器上繪制一條直線。建立項(xiàng)目步驟如3所述,將中斷函數(shù)設(shè)置在主程序文件中,使用HSE為系統(tǒng)時(shí)鐘,本文且未對LCD操作函數(shù)進(jìn)行說明,僅給出利用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行端口及中斷設(shè)置的代碼[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時(shí)鐘及AFIO時(shí)鐘,中斷配置代碼如下:

      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中斷函數(shù)代碼如下:

      void EXTI0_IRQHandler(void)

      {

      if(EXTI_GetITStatus(EXTI_Line0)!=RESET)

      {

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

      EXTI_ClearITPendingBit(EXTI_Line0);

      }

      }

      在主程序中設(shè)置循環(huán)狀態(tài)以等待中斷,當(dāng)PB0口由高電平跳變?yōu)榈碗娖綍r(shí),觸發(fā)中斷,調(diào)用外部中斷線0中斷函數(shù)。具體應(yīng)用中,如果有多個(gè)中斷源可以觸發(fā)該外部中斷,還須判斷中斷標(biāo)志位以確定執(zhí)行何種操作。

      5 結(jié)束語

      文中介紹了ST公司V3.50標(biāo)準(zhǔn)外設(shè)庫的文件架構(gòu)和相互聯(lián)系,基于IAR FOR ARM6.30開發(fā)環(huán)境給出了參考編程步驟,并根據(jù)實(shí)例設(shè)計(jì)了具體的程序代碼。采用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行嵌入式軟件開發(fā),無需太多了解微處理器底層硬件結(jié)構(gòu),只要具有C/C++軟件基礎(chǔ),根據(jù)本文介紹的參考步驟,便可開發(fā)出高效直觀的程序代碼。

      [1]劉波文.ARM Cortex-M3應(yīng)用開發(fā)實(shí)例詳解 [M].北京:電子工業(yè)出版社,2011.

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

      [3]langen.基于CMSIS標(biāo)準(zhǔn)的Cortex-M3應(yīng)用軟件開發(fā)[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 工程創(chuàng)建建議 (固件庫為3.5)[EB/OL].[2011-10].http://hi.baidu.com/jhliuzj.

      [6]徐愛鈞.IAR EWAR V5嵌入式系統(tǒng)應(yīng)用編程開發(fā) [M].北京:北京航空航天大學(xué)出版社,2009.

      猜你喜歡
      程序代碼外設(shè)微控制器
      計(jì)算機(jī)網(wǎng)絡(luò)信息安全未來發(fā)展趨勢
      物聯(lián)網(wǎng)技術(shù)在微控制器實(shí)驗(yàn)教學(xué)中的應(yīng)用
      電子制作(2017年14期)2017-12-18 07:07:58
      基于圖元裝接模式由程序流程圖自動生成源代碼
      軟件工程(2016年11期)2017-01-17 16:56:57
      Atmel針對新一代物聯(lián)網(wǎng)應(yīng)用發(fā)布全新32位微控制器
      最新STM32設(shè)計(jì)工具增加對混合信號微控制器的支持
      意法半導(dǎo)體(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器
      Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線
      貼身呵護(hù) 必不可少的PSP外設(shè)
      外設(shè)天地行情
      外設(shè)天地行情
      思南县| 梨树县| 朝阳区| 永城市| 依兰县| 芮城县| 新密市| 土默特右旗| 孝昌县| 闽清县| 上杭县| 孝昌县| 桃园县| 黄石市| 武平县| 县级市| 保山市| 普兰县| 甘孜| 山阳县| 曲周县| 囊谦县| 富川| 贺州市| 玉门市| 纳雍县| 翼城县| 塔河县| 丰城市| 安陆市| 汶川县| 甘南县| 靖边县| 黑河市| 深水埗区| 三门峡市| 仲巴县| 高州市| 钟祥市| 精河县| 昌宁县|