STMCM程序設(shè)計(jì)_第1頁(yè)
STMCM程序設(shè)計(jì)_第2頁(yè)
STMCM程序設(shè)計(jì)_第3頁(yè)
STMCM程序設(shè)計(jì)_第4頁(yè)
STMCM程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第3 3章章 STM32STM32程序設(shè)計(jì)程序設(shè)計(jì)主講:朱兆優(yōu)主講:朱兆優(yōu)CM3CM3微控制器軟件接口標(biāo)準(zhǔn)微控制器軟件接口標(biāo)準(zhǔn)(CMSISCMSIS)1、CMSIS簡(jiǎn)介2、CMSIS架構(gòu)3、CMSIS文件結(jié)構(gòu)4、CMSIS支持的工具鏈5、CMSIS中的中斷定義6、CMSIS中的編程約定7、CMSIS實(shí)例8、總結(jié)CMSISCMSIS簡(jiǎn)介簡(jiǎn)介 Cortex微控制器軟件接口標(biāo)準(zhǔn)( (Cortex Microcontroller Software Interface Standard)是是ARM和一些編譯器廠家以和一些編譯器廠家以及半導(dǎo)體廠家及半導(dǎo)體廠家共同遵循的一套標(biāo)準(zhǔn)共同遵循的一套標(biāo)準(zhǔn),是由,是

2、由ARM提出,提出,專門專門針對(duì)針對(duì)Cortex-M系列的標(biāo)準(zhǔn)。在該標(biāo)準(zhǔn)的約定下,系列的標(biāo)準(zhǔn)。在該標(biāo)準(zhǔn)的約定下,ARM和芯片和芯片廠商將提供廠商將提供一些通用的一些通用的API接口接口來(lái)來(lái)訪問(wèn)訪問(wèn)Cortex內(nèi)核內(nèi)核以及一些專用外設(shè),以以及一些專用外設(shè),以減少更換芯片減少更換芯片以以及及開發(fā)工具開發(fā)工具等移植工作所帶來(lái)等移植工作所帶來(lái)的金錢、時(shí)間的金錢、時(shí)間上的消上的消耗。只要都是耗。只要都是基于基于Cortex-M3的芯片,代碼均是可的芯片,代碼均是可以復(fù)用的。以復(fù)用的。CMSIS的架構(gòu)的架構(gòu)CMSIS可以分為以下可以分為以下三三個(gè)基本功能層個(gè)基本功能層; 1、核內(nèi)外設(shè)訪問(wèn)層核內(nèi)外設(shè)訪問(wèn)層

3、Core Peripheral Access Layer (CPAL) 2、中間件訪問(wèn)層中間件訪問(wèn)層 Middleware Access Layer (MWAL) 3、設(shè)備訪問(wèn)層設(shè)備訪問(wèn)層 Device Peripheral Access Layer (DPAL)CMSIS文件結(jié)構(gòu)文件結(jié)構(gòu)CMSIS首先對(duì)文件名的定義給出了標(biāo)準(zhǔn)1、core_cm3.h Cortex-M3 global declarations and definitions, static function definitions(內(nèi)核設(shè)備訪問(wèn)層頭文件)2、core_cm3.c Cortex-M3 global definit

4、ions (-源文件)3、.h Top-level header file (device specific). To be included by application code.Includes core_cm3.h and system_.h (微控制器外設(shè)訪問(wèn)頭文件)4、system_.h Device specific declarations (-頭文件)5、system_.c Device specific definitions (-源文件) e.g: SystemInit() 應(yīng)用程序只需包含 即可。 由于Cortex-M3有一些可選硬件如MPU,在中包含core_cm3.

5、h和system_.h時(shí)需注意以下一點(diǎn),以STM32.h為例。/* Configuration of the CM3 Processor and Core Peripherals */#define_MPU_PRESENT 0 /*! STM32 does not provide a MPU present or not*/#define_NVIC_PRIO_BITS 4 /*! STM32 uses 4 Bits for the Priority Levels */#define_Vendor_SysTickConfig 0 /*! Set to 1 if different SysTick

6、 Config is used */#include core_cm3.h /* Cortex-M3 processor and core peripherals */#include system_stm32.h /* STM32 System */ 即需定義以上三個(gè)宏之后,再包含相應(yīng)的頭文件,因?yàn)檫@些頭文件中用到了這些宏。注意:注意:如果如果_Vendor_SysTickConfig 被定義為被定義為1,則在,則在cm3_core.h中定義的中定義的SysTickConfig()將不被包含,因此廠商必須將不被包含,因此廠商必須在在中給以中給以實(shí)現(xiàn)。實(shí)現(xiàn)。CMSIS支持的工具鏈支持的工具鏈

7、CMSIS目前支持目前支持三大主流的工具鏈三大主流的工具鏈,即,即ARM RealView (armcc), IAR EWARM (iccarm), and GNU Compiler Collection (gcc). 在在core_cm3.h中有如下定義:中有如下定義: /* define compiler specific symbols */定義定義編譯器特定符號(hào)編譯器特定符號(hào) #if defined ( _CC_ARM ) /是否選用ARMCC編譯器 #define _ASM _asm /*! asm keyword for armcc */ #define _INLINE _inli

8、ne /*! inline keyword for armcc */ #elif defined ( _ICCARM_ ) #define _ASM _asm /*! asm keyword for iarcc */ #define _INLINE inline /*! inline keyword for iarcc. Only avaiable in High optimization mode! */ #define _nop _no_operation /*! no operation intrinsic in iarcc */ #elif defined ( _GNUC_ ) #de

9、fine _ASM asm /*! asm keyword for gcc */ #define _INLINE inline /*!AIRCR, GPIOB, LDMIAEQ外設(shè)訪問(wèn)函數(shù)以及中斷和中斷處理函數(shù)用大小寫(“CamelCase)定義例如:SysTickConfig(),DebugMonitor_IRQn對(duì)一些外設(shè)的操作函數(shù)前面將相應(yīng)的前綴例如:ITM_SendChar(),NVIC_SystemReset()2.注釋注釋/* brief Enable Interrupt in NVIC Interrupt Controller* param IRQn_Type IRQn spec

10、ifies the interrupt number* return none* Enable a device specific interupt in the NVIC interrupt controller.* The interrupt number cannot be a negative value.*/8CMSIS微控制器軟件接口標(biāo)準(zhǔn) -內(nèi)核文件core_cm3.csystem_stm32f10 x.ccore_cm3.hsystem_stm32f10 x.hstm32f10 x.h-映射文件V3.4的CMSIS實(shí)例實(shí)例#include stm32.h#include main

11、.hvolatile unsigned int seconds=0;int main(void) SystemInit(); if (SysTick_Config(SystemFrequency / 1000) /* Setup SysTick Timer for 1 msec interrupts */ while (1); /* Capture error */ while(1);void SysTick_Handler(void) static int count=0; count+; if(count = 1000) count=0; seconds+; FWLib固件庫(kù)簡(jiǎn)介固件庫(kù)簡(jiǎn)介

12、1、該固件庫(kù)是一個(gè)函數(shù)包它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器的所有外設(shè)的性能特征包括每一個(gè)外設(shè)的驅(qū)動(dòng)描述和應(yīng)用實(shí)例最新版本3.4.02、外設(shè)驅(qū)動(dòng)API3、ANSI-C標(biāo)準(zhǔn)4、實(shí)時(shí)錯(cuò)誤檢查5、固件庫(kù)的通用性固件庫(kù)命名規(guī)則固件庫(kù)命名規(guī)則 1、系統(tǒng)、源程序文件和頭文件命名都以“stm32f10 x_”作為開頭。例如:stm32f10 x_gpio.h 2、外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線開頭,每個(gè)單詞第一個(gè)字母大寫。例如:GPIO_Init 3、常量、寄存器作為常量都由英文字母命名,定義在頭文件中。幾個(gè)重要的幾個(gè)重要的固件函數(shù)庫(kù)固件函數(shù)庫(kù)文件描述文件描述stm32f10 x_conf.h

13、參數(shù)設(shè)置文件,起到應(yīng)用和庫(kù)之間界面的作用。用戶必須在運(yùn)行自己的程序前修改該文件。 stm32f10 x_it.h 頭文件,包含所有中斷處理函數(shù)原形。 stm32f10 x_it.c 外設(shè)中斷函數(shù)文件。用戶可以加入自己的中斷程序代碼。固件函數(shù)庫(kù)提供了這些函數(shù)的名稱。stm32f10 x_lib.h 包含了所有外設(shè)的頭文件的頭文件。它是唯一一個(gè)用戶需要包括在自己應(yīng)用中的文件,起到應(yīng)用和庫(kù)之間界面的作用。stm32f10 x_lib.c Debug模式初始化文件。它包括多個(gè)指針的定義,每個(gè)指針指向特定外設(shè)的首地址,以及在Debug模式被使能時(shí),被調(diào)用的函數(shù)的定義。stm32f10 x_map.h 該

14、文件包含了存儲(chǔ)器映像和所有寄存器物理地址的聲明,既可以用于Debug模式也可以用于release模式。所有外設(shè)都使用該文件。stm32f10 x_type.h 通用聲明文件。包含所有外設(shè)驅(qū)動(dòng)使用的通用類型和常數(shù)。stm32f10 x_ppp.c 由C語(yǔ)言編寫的外設(shè)PPP的驅(qū)動(dòng)源程序文件。stm32f10 x_ppp.h 外設(shè)PPP的頭文件。包含外設(shè)PPP函數(shù)的定義,和這些函數(shù)使用的變量。cortexm3_macro.h 文件cortexm3_macro.s的頭文件。cortexm3_macro.s Cortex-M3內(nèi)核特殊指令的指令包裝。驅(qū)動(dòng)函數(shù)的命名驅(qū)動(dòng)函數(shù)的命名函數(shù)名格式函數(shù)名格式作用作

15、用PPP_Init根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP_DeInit復(fù)位外設(shè)PPP的所有寄存器至缺省值PPP_StructInit通過(guò)設(shè)置PPP_InitTypeDef結(jié)構(gòu)中的各種參數(shù)來(lái)定義外設(shè)的功能PPP_Cmd使能或者關(guān)閉外設(shè)PPPPPP_ITConfig使能或者關(guān)閉外設(shè)PPP某中斷源PPP_DMAConfig使能或者關(guān)閉PPP的DMA接口PPP_GetFlagStatus檢查外設(shè)PPP某標(biāo)志位是否被設(shè)置PPP_ClearFlag清除外設(shè)PPP標(biāo)志位PPP_GetITStatus判斷來(lái)自外設(shè)PPP的中斷發(fā)生與否PPP_ClearITPendingBit清除外設(shè)P

16、PP中斷待處理標(biāo)志位變量定義變量定義 固件庫(kù)定義了24個(gè)變量類型,存放在“stm32f10 x_type.h”頭文件中1、IO類型限定詞_I只讀訪問(wèn)_O只寫訪問(wèn)_IO讀寫訪問(wèn)2、數(shù)據(jù)類型舉例s32有符號(hào)32位數(shù)據(jù)u32無(wú)符號(hào)32位數(shù)據(jù)s16有符號(hào)16位數(shù)據(jù)s8有符號(hào)8位數(shù)據(jù)typedef signed long s32;/* 32位有符號(hào)變量數(shù) */typedef signed short s16; /*16位有符號(hào)變量數(shù) */typedef signed char s8; /* 8位有符號(hào)變量數(shù) */typedef signed long const sc32; /* 32位有符號(hào)常量數(shù) R

17、ead Only */typedef signed short const sc16; /* 16位有符號(hào)常量數(shù) Read Only */typedef signed char const sc8; /* 8位有符號(hào)常量數(shù) Read Only */typedef volatile signed long vs32; /* 32位有符號(hào)限定變量數(shù) */typedef volatile signed short vs16; /* 16位有符號(hào)限定變量數(shù) */typedef volatile signed char vs8; /* 8位有符號(hào)限定變量數(shù) */typedef volatile sign

18、ed long const vsc32; /* 32位有符號(hào)限定常量數(shù) Read Only */typedef volatile signed short const vsc16; /* 16位有符號(hào)限定常量數(shù) Read Only */typedef volatile signed char const vsc8; /* 8位有符號(hào)限定常量數(shù) Read Only */typedef unsigned long u32; /* 32位無(wú)符號(hào)變量數(shù) */typedef unsigned short u16; /* 16位無(wú)符號(hào)變量數(shù) */typedef unsigned char u8; /* 8

19、位無(wú)符號(hào)變量數(shù) */typedef unsigned long const uc32; /* 32位無(wú)符號(hào)常數(shù) Read Only */typedef unsigned short const uc16; /* 16位無(wú)符號(hào)常數(shù) Read Only */typedef unsigned char const uc8; /* 8位無(wú)符號(hào)常數(shù) Read Only */typedef volatile unsigned long vu32; /* 32位無(wú)符號(hào)限定變量數(shù) */typedef volatile unsigned short vu16; /* 16位無(wú)符號(hào)限定變量數(shù) */typedef

20、volatile unsigned char vu8; /* 8位無(wú)符號(hào)限定變量數(shù) */typedef volatile unsigned long const vuc32; /* 32位無(wú)符號(hào)限定常量數(shù) Read Only */typedef volatile unsigned short const vuc16; /* 16位無(wú)符號(hào)限定常量數(shù) Read Only */typedef volatile unsigned char const vuc8; /* 8位無(wú)符號(hào)限定常量數(shù) Read Only */專用數(shù)據(jù)類型專用數(shù)據(jù)類型枚舉類型枚舉類型結(jié)構(gòu)體類型結(jié)構(gòu)體類型STM32標(biāo)準(zhǔn)外設(shè)庫(kù)標(biāo)準(zhǔn)外設(shè)

21、庫(kù)-外設(shè)控制寄存器結(jié)構(gòu) 1、STM32F10 xx固件庫(kù)函數(shù)被壓縮在一個(gè)zip文件中,解壓后的文件結(jié)構(gòu)如圖。 2、在文件“stm32f10 x_map.h”中,包含了所有外設(shè)控制寄存器的結(jié)構(gòu)聲明; 3、用戶可以通過(guò)指向各外設(shè)的指針來(lái)訪問(wèn)外設(shè)的控制寄存器。這些指針?biāo)赶虻臄?shù)據(jù)與各個(gè)外設(shè)的控制寄存器一一對(duì)應(yīng)。固件庫(kù)目錄結(jié)構(gòu)固件庫(kù)目錄結(jié)構(gòu)core_cm3.hcore_cm3.cstm32f10 x.hsystem_stm32f10 x.hsystem_stm32f10 x.cstm32f10 x_ppp.hstm32f10 x_ppp.cADCCANGPIORCCRTC.固件庫(kù)架構(gòu)固件函數(shù)庫(kù)文件固件

22、函數(shù)庫(kù)文件 1、子文件夾inc包含固件函數(shù)庫(kù)所需要的頭文件,用戶不需要修改該文件夾的文件。 2、子文件夾src包括了固件函數(shù)庫(kù)所需要的源文件,用戶不需要修改該文件夾的文件; 3、固件庫(kù)優(yōu)點(diǎn):兼容性強(qiáng),命名規(guī)范,通用性強(qiáng); 4、固件函數(shù)庫(kù)文件: (P74庫(kù)文件描述)STM32編程步驟編程步驟1、解壓縮包,復(fù)制公共文件2、配置項(xiàng)目3、更改設(shè)置4、頭文件的包含5、改寫預(yù)設(shè)的程序模板(開時(shí)鐘、初始化、引腳配置、中斷)6、編寫主函數(shù)main( )7、添加中斷子程序(在stm32f10 x_it.c文件中進(jìn)行)8、編譯生成.hex/.bin文件9、進(jìn)入Debug下載調(diào)試程序RealVeiw MDKARMA

23、RM調(diào)試軟件調(diào)試軟件介紹一、調(diào)試軟件一、調(diào)試軟件 (1)keil uVision德國(guó)keil公司開發(fā) (2) ADSARM公司開發(fā) ARM公司收購(gòu)keil公司后開發(fā)出新的ARM處理器調(diào)試軟件為RealVeiw MDK,本次實(shí)驗(yàn)采用RVCT4.0版,可到下載 (3) IAR EWARM瑞典IAR Sytems公司開發(fā)二、軟件安裝 1、安裝RVCT4.0:軟件默認(rèn)安裝目錄為c:keil,可改為c:keil MDK4.0 2、輸入License:運(yùn)行keil MDK軟件,選File菜單下的License Management子項(xiàng),將LIC中序列號(hào)復(fù)制。 3、硬件連接:串行連接線、USB轉(zhuǎn)串口、USB線、ULink編程下載器與計(jì)算機(jī)連接。 4、通電檢查:實(shí)驗(yàn)板電源3.3V或5V三、三、KeilKeil軟件目錄結(jié)構(gòu)軟件目錄結(jié)構(gòu) Keil MDK調(diào)試軟件安裝后的子目錄結(jié)構(gòu): 1、bin子目錄動(dòng)態(tài)鏈接文件(.DLL) 2、binxx編譯器和鏈接器 3、boards廠商設(shè)計(jì)開發(fā)板例子 4、examples大眾化實(shí)例 5、flash廠商的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論