嵌入式原理與應(yīng)用期末復(fù)習(xí)_第1頁
嵌入式原理與應(yīng)用期末復(fù)習(xí)_第2頁
嵌入式原理與應(yīng)用期末復(fù)習(xí)_第3頁
嵌入式原理與應(yīng)用期末復(fù)習(xí)_第4頁
嵌入式原理與應(yīng)用期末復(fù)習(xí)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、溫州大學(xué)物理與電子信息工程學(xué)院 楊衛(wèi)波嵌入式系統(tǒng)原理與應(yīng)用期末復(fù)習(xí)電話:電話:660345mail: ywb_12:49嵌入式系統(tǒng)原理與應(yīng)用2課程性質(zhì)與目的 嵌入式原理與應(yīng)用是電類本科專業(yè)的一門核心選修課程,該課程涵蓋了微電子技術(shù)、電子信息技術(shù)、計(jì)算機(jī)軟、硬件等多個(gè)領(lǐng)域,且技術(shù)性、工程性、實(shí)踐性和綜合性都很強(qiáng)的一門課。 使學(xué)生獲得嵌入式系統(tǒng)的有關(guān)軟硬知識,掌握嵌入式系統(tǒng)程序設(shè)計(jì)的基本方法和技巧;結(jié)合上機(jī)實(shí)踐,使學(xué)生對嵌入式系統(tǒng)程序設(shè)計(jì)和軟件開發(fā)過程有一個(gè)比較全面地、系統(tǒng)地了解;初步具備應(yīng)用嵌入式系統(tǒng)解決實(shí)際問題的能力。 12:49嵌入式系統(tǒng)原理與應(yīng)用3課程內(nèi)容12:4

2、9嵌入式系統(tǒng)原理與應(yīng)用4嵌入式系列課程 嵌入式系統(tǒng)原理與應(yīng)用 面向數(shù)據(jù)采集、控制等實(shí)時(shí)應(yīng)用,基于STM32 Cortex M3嵌入式微控制器,講述嵌入式系統(tǒng)基本原理與應(yīng)用 嵌入式操作系統(tǒng)基礎(chǔ) 基于ucOS/II嵌入式實(shí)時(shí)操作系統(tǒng),講述嵌入式操作系統(tǒng)基本原理 嵌入式系統(tǒng)軟件開發(fā) 面向嵌入式網(wǎng)關(guān)等高端應(yīng)用,基于嵌入式Linux操作系統(tǒng),側(cè)重嵌入式Linux下的軟件開發(fā)STM32F系列 圖解STM32F10 x系列微控制器 系統(tǒng)結(jié)構(gòu)存儲(chǔ)器組織4G字節(jié)的尋址空間,地址范圍:0 x0000 0000-0 xffff ffff1. 空間空間共分為8塊塊:block0block7,每塊512M外設(shè)寄存器組(

3、PERIPHERALS )-包括輸入輸出端口數(shù)據(jù)存儲(chǔ)器(SRAM) 程序存儲(chǔ)器(CODE)APB1APB2AHB0 x4001 00000 x4002 00000 x4000 0000外設(shè)寄存器求法#define PERIPH_BASE (u32)0 x40000000)寄存器地址=總線基址+外圍總線基址 +外設(shè)地址偏移量+寄存器偏移量#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0 x10000)#define AHBPERIPH_BASE (PERIPH_BASE + 0 x20000)#

4、define GPIOA_BASE (APB2PERIPH_BASE + 0 x0800)#define GPIOB_BASE (APB2PERIPH_BASE + 0 x0C00)#define GPIOC_BASE (APB2PERIPH_BASE + 0 x1000)12:49嵌入式系統(tǒng)原理與應(yīng)用10標(biāo)準(zhǔn)外設(shè)庫文件體系結(jié)構(gòu)12:49嵌入式系統(tǒng)原理與應(yīng)用11標(biāo)準(zhǔn)外設(shè)庫文件描述:CMSIS文件文件名文件名功能描述功能描述具體功能說明具體功能說明core_cm3.hcore_cm3.cCortex-M3內(nèi)核及其設(shè)內(nèi)核及其設(shè)備文件備文件訪問訪問Cortex-M3內(nèi)核及其設(shè)內(nèi)核及其設(shè)備備,提供,提

5、供NVIC,SysTick等訪等訪問問Cortex-M3的的CPU寄存器和內(nèi)寄存器和內(nèi)核外設(shè)的函數(shù)核外設(shè)的函數(shù)stm32f10 x.h微控制器專微控制器專用頭文件用頭文件包包含了含了STM32F10 x全系列所有外設(shè)寄存器的全系列所有外設(shè)寄存器的定義(寄存器的基地址和布局)、位定義、定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲(chǔ)空間的地址映射等中斷向量表、存儲(chǔ)空間的地址映射等system_stm32f10 x.hsystem_stm32f10 x.c微控制器專微控制器專用系統(tǒng)文件用系統(tǒng)文件函數(shù)函數(shù)SystemInit用用來初始化微控制來初始化微控制器器,Sysem_ExtMemCtl配

6、配置外部存儲(chǔ)器控制器。置外部存儲(chǔ)器控制器。它位于文它位于文件件startup_stm32f10 x_xx.s /.c,在,在跳轉(zhuǎn)到跳轉(zhuǎn)到main前調(diào)前調(diào)用用SystemFrequncy,該值,該值代表系統(tǒng)時(shí)鐘頻率代表系統(tǒng)時(shí)鐘頻率startup_stm32f10 x_Xd.s編譯器啟動(dòng)編譯器啟動(dòng)代碼代碼微控制器專用的中斷處理程序列表微控制器專用的中斷處理程序列表(與頭文件與頭文件一致一致)弱弱定義定義(Weak)的中斷處理程序默認(rèn)函數(shù)的中斷處理程序默認(rèn)函數(shù)(可以被用戶代碼覆蓋可以被用戶代碼覆蓋) ,該該文件是與編譯器相關(guān)的文件是與編譯器相關(guān)的12:49嵌入式系統(tǒng)原理與應(yīng)用12外設(shè)驅(qū)動(dòng)文件文件名文

7、件名功能描述功能描述具體功能說明具體功能說明stm32f10 x_conf.h固件庫配置文件固件庫配置文件通過更改包含的外設(shè)頭文件來選擇固件庫所使通過更改包含的外設(shè)頭文件來選擇固件庫所使用的外設(shè),在新建程序和進(jìn)行功能變更之前應(yīng)用的外設(shè),在新建程序和進(jìn)行功能變更之前應(yīng)當(dāng)首先修改對應(yīng)的配置。當(dāng)首先修改對應(yīng)的配置。stm32f10 x_it.hstm32f10 x_it.c外設(shè)中斷函數(shù)文外設(shè)中斷函數(shù)文件件用戶可以相應(yīng)的加入自己的中斷程序的代碼,用戶可以相應(yīng)的加入自己的中斷程序的代碼,對于指向同一個(gè)中斷向量的多個(gè)不同中斷請求,對于指向同一個(gè)中斷向量的多個(gè)不同中斷請求,用戶可以通過判斷外設(shè)的中斷標(biāo)志位來

8、確定準(zhǔn)用戶可以通過判斷外設(shè)的中斷標(biāo)志位來確定準(zhǔn)確的中斷源,執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。確的中斷源,執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。stm32f10 x_ppp.hstm32f10 x_ppp.c外設(shè)驅(qū)動(dòng)函數(shù)文外設(shè)驅(qū)動(dòng)函數(shù)文件件包括了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用包括了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用函數(shù),這部分是進(jìn)行編程功能實(shí)現(xiàn)的重要組成函數(shù),這部分是進(jìn)行編程功能實(shí)現(xiàn)的重要組成部分。部分。Application.c用戶文件用戶文件用戶程序文件,通過標(biāo)準(zhǔn)外設(shè)庫提供的接口進(jìn)用戶程序文件,通過標(biāo)準(zhǔn)外設(shè)庫提供的接口進(jìn)行相應(yīng)的外設(shè)配置和功能設(shè)計(jì)。行相應(yīng)的外設(shè)配置和功能設(shè)計(jì)。misc.hmisc.c單獨(dú)對于單獨(dú)

9、對于NVIC(中斷向量中斷向量嵌套嵌套)的外設(shè)驅(qū)動(dòng)的外設(shè)驅(qū)動(dòng)12:49嵌入式系統(tǒng)原理與應(yīng)用13STM32標(biāo)準(zhǔn)外設(shè)庫:命名規(guī)則 PPP表示任一外設(shè)縮寫,如表示任一外設(shè)縮寫,如ADC、GPIO 系統(tǒng)、源程序文件和頭文件命名都以系統(tǒng)、源程序文件和頭文件命名都以stm32f10 x開頭開頭 常量常量僅被用于一個(gè)文件的,定義于該文件中;被用于多個(gè)文僅被用于一個(gè)文件的,定義于該文件中;被用于多個(gè)文件的,在對應(yīng)的頭文件中定義;所有常量命名都用大寫字母件的,在對應(yīng)的頭文件中定義;所有常量命名都用大寫字母 寄存器作為常量處理,用大寫字母命名,通常與用戶手冊中寄存器作為常量處理,用大寫字母命名,通常與用戶手冊中的

10、命名一致的命名一致 外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線開頭,每個(gè)單詞的外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線開頭,每個(gè)單詞的第一個(gè)字母都由英文字母大寫書寫,如:第一個(gè)字母都由英文字母大寫書寫,如:USART_SendData,在函數(shù)命中,只允許存在一個(gè)下劃線,用以分隔外設(shè)縮寫和在函數(shù)命中,只允許存在一個(gè)下劃線,用以分隔外設(shè)縮寫和函數(shù)名的其他部分函數(shù)名的其他部分12:49嵌入式系統(tǒng)原理與應(yīng)用14命名規(guī)則 PPP_Init函數(shù),其功能是根據(jù)函數(shù),其功能是根據(jù)PPP_InitTypeDef中指定的參中指定的參數(shù),初始化外設(shè)數(shù),初始化外設(shè)PPP,如,如TIM_Init PPP_DeInit函數(shù)用于復(fù)位

11、外設(shè)函數(shù)用于復(fù)位外設(shè)PPP的所有寄存器至默認(rèn)值,的所有寄存器至默認(rèn)值,例如例如TIM_DeInit PPP_StructInit函數(shù)用于復(fù)位函數(shù)用于復(fù)位PPP_InitTypeDef結(jié)構(gòu)體中的結(jié)構(gòu)體中的成員至默認(rèn)值,如成員至默認(rèn)值,如USART_StructInit PPP_Cmd函數(shù)用于使能或失能外設(shè)函數(shù)用于使能或失能外設(shè)PPP,如,如USART_Cmd PPP_ITConfig函數(shù)用于使能或失能來自外設(shè)函數(shù)用于使能或失能來自外設(shè)PPP的某中斷源,的某中斷源,如如RCC_ITConfig12:49嵌入式系統(tǒng)原理與應(yīng)用15命名規(guī)則 PPP_DMAConfig函數(shù)用于使能或失能外設(shè)函數(shù)用于使能或

12、失能外設(shè)PPP的的DMA接口,接口,如如TIM_DMAConfig 用以配置外設(shè)功能的函數(shù),總是以字符串用以配置外設(shè)功能的函數(shù),總是以字符串“Config”結(jié)尾,結(jié)尾,如如GPIO_PinRemapConfig PPP_GetFlagStatus函數(shù)用于檢查外設(shè)函數(shù)用于檢查外設(shè)PPP某標(biāo)志位被設(shè)置某標(biāo)志位被設(shè)置與否,如與否,如I2C_GetFlagStatus PPP_ClearFlag函數(shù)用于清除外設(shè)函數(shù)用于清除外設(shè)PPP的標(biāo)志位,如的標(biāo)志位,如I2C_ClearFlag PPP_GetITStatus函數(shù)用于判斷來自外設(shè)函數(shù)用于判斷來自外設(shè)PPP的中斷發(fā)生與的中斷發(fā)生與否,如否,如I2C_

13、GetITStatus12:49嵌入式系統(tǒng)原理與應(yīng)用16數(shù)據(jù)類型和結(jié)構(gòu):變量(stdint.h/core_cm3.h)typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;l #define _I volatile const (read only)l #define _IO volatile ( read / write)typedef signed char int8_t;typedef signed short int int16_t;typedef

14、signed int int32_t;volatile的作用12:49嵌入式系統(tǒng)原理與應(yīng)用17定義為定義為volatile的變量是說這變量可能會(huì)被意想不到地改變,優(yōu)的變量是說這變量可能會(huì)被意想不到地改變,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。,而不是使用保存在寄存器里的備份。static int i=0; int main(void) . while (1) if (i) dosomething(); void ISR_2(void) i=1; 編譯器判斷在編譯器判斷在main函數(shù)里面

15、沒有修函數(shù)里面沒有修改過改過i,因此可能只執(zhí)行一次對從,因此可能只執(zhí)行一次對從i到某寄存器的讀操作,然后每次到某寄存器的讀操作,然后每次if判斷都只使用這個(gè)寄存器里面的判斷都只使用這個(gè)寄存器里面的“i副本副本”,可能會(huì)導(dǎo)致,可能會(huì)導(dǎo)致dosomething永遠(yuǎn)也不會(huì)被調(diào)用。永遠(yuǎn)也不會(huì)被調(diào)用。12:49嵌入式系統(tǒng)原理與應(yīng)用18數(shù)據(jù)類型和結(jié)構(gòu):變量(stm32f10 x.h) typedef int32_t s32; typedef int16_t s16; typedef int8_t s8; typedef const int32_t sc32 ;/只讀變量 typedef const int

16、16_t sc16; typedef const int8_t sc8 ; typedef _IO int32_t vs32 ;/ typedef _IO int16_t vs16 ; typedef _IO int8_t vs8 ; typedef _I int32_t vsc32 ; typedef _I int16_t vsc16 ; typedef _I int8_t vsc8;說明變量在程序執(zhí)行中可被隱含地改變 ,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份 12:49嵌入式系統(tǒng)原理與應(yīng)用19數(shù)據(jù)類型和結(jié)構(gòu):變量(stm32f10 x.h

17、) typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8; typedef const uint32_t usc32 ;/只讀變量 typedef const uint16_t usc16; typedef const uint8_t usc8 ; typedef _IO uint32_t vu32 ;/ typedef _IO uint16_t vu16 ; typedef _IO uint8_t vu8 ; typedef _I uint32_t vuc32 ; typedef _I uint16_t vuc16 ;

18、typedef _I uint8_t vuc8;12:49嵌入式系統(tǒng)原理與應(yīng)用20數(shù)據(jù)類型和結(jié)構(gòu):布爾類型布爾類型定義為:typedef enum FALSE = 0; TRUE = !FALSE; bool;標(biāo)準(zhǔn)C規(guī)定:“枚舉類型的尺寸是以能夠容納最大枚舉子的值的整數(shù)的尺寸”,就是說可以是char、short和int。12:49嵌入式系統(tǒng)原理與應(yīng)用21數(shù)據(jù)類型和結(jié)構(gòu):標(biāo)志位狀態(tài)類型標(biāo)志位類型的兩個(gè)可能值為“設(shè)置(SET)”、“重置(RESET)”:typedef enum RESET = 0; SET = !RESET; FlagStatus;12:49嵌入式系統(tǒng)原理與應(yīng)用22數(shù)據(jù)類型和結(jié)構(gòu)

19、:功能狀態(tài)類型 功能狀態(tài)類型的兩個(gè)可能值為“使能(ENABLE)”、“失能(DISABLE)”:typedef enum DISABLE = 0; ENABLE = !DISABLE; FunctionalState;12:49嵌入式系統(tǒng)原理與應(yīng)用23數(shù)據(jù)類型和結(jié)構(gòu):錯(cuò)誤狀態(tài)類型 錯(cuò)誤狀態(tài)類型的兩個(gè)可能值為“成功(SUCCESS)”、“出錯(cuò)(ERROR)”:typedef enum ERROR = 0; SUCCESS = !ERROR; ErrorStatus;12:49嵌入式系統(tǒng)原理與應(yīng)用24數(shù)據(jù)類型和結(jié)構(gòu):外設(shè)結(jié)構(gòu)外設(shè)結(jié)構(gòu)可以通過指向各個(gè)外設(shè)的指針訪問各外設(shè)的控制寄外設(shè)結(jié)構(gòu)可以通過指向各

20、個(gè)外設(shè)的指針訪問各外設(shè)的控制寄存器,這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu)與各個(gè)外設(shè)的控制寄存器存器,這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu)與各個(gè)外設(shè)的控制寄存器布局一一對應(yīng),文件布局一一對應(yīng),文件stm32f10 x.h包含了所有外設(shè)控制寄存包含了所有外設(shè)控制寄存器的結(jié)構(gòu),如器的結(jié)構(gòu),如USART寄存器結(jié)構(gòu)的聲明:寄存器結(jié)構(gòu)的聲明:typedef structvu16 SR; u16 RESERVED0;vu16 DR; u16 RESERVED1;vu16 BBR; u16 RESERVED2;vu16 CR1; u16 RESERVED3;vu16 CR2; u16 RESERVED4;vu16 CR3; u16

21、RESERVED5;vu16 GTPR; u16 RESERVED6; USART_TypeDef;12:49嵌入式系統(tǒng)原理與應(yīng)用25時(shí)鐘系統(tǒng)12:49嵌入式系統(tǒng)原理與應(yīng)用261、STM32有5個(gè)時(shí)鐘源:HSI、HSE、LSI、LSE、PLL。 HSI是高速內(nèi)部時(shí)鐘,RC振蕩器,頻率為8MHz,精度不高。 HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz16MHz。 LSI是低速內(nèi)部時(shí)鐘,RC振蕩器,頻率為40kHz,提供低功耗時(shí)鐘。 LSE是低速外部時(shí)鐘,接頻率為32.768kHz的石英晶體。 PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇為HSI/2、HSE或者

22、HSE/2。 倍頻可選擇為216倍,但是其輸出頻率最大不得超過72MHz。12:49嵌入式系統(tǒng)原理與應(yīng)用27RCC庫函數(shù):RCC_AHBPeriphClockCmd函數(shù)原型void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph, FunctionalState NewState)功能描述使能或失能AHB外設(shè)時(shí)鐘輸入?yún)?shù)RCC_AHBPeriph: AHB上的設(shè)備NewState: ENABLE或DISABLE輸出參數(shù)無返回值無先決條件無應(yīng)用示例RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE)STM32單片機(jī)的每一

23、個(gè)輸入/輸出引腳可以配置成以下8種模式:STM32單片機(jī)的GPIO端口模式: p輸入浮空:輸入浮空:IN_FLOATINGp輸入上拉:輸入上拉:IPU(In Push-Up)p輸入下拉輸入下拉: : IPD(In Push-Down)p模擬輸入模擬輸入: : AIN (Analog In) p開漏輸出:開漏輸出:Out_OD (Open Drain Output)p推挽式輸出推挽式輸出: :Out_PP (Push-Pull Output)p推挽式復(fù)用功能推挽式復(fù)用功能: :AF_PP (Push-Pull Output Alternate-Function)p開漏復(fù)用功能開漏復(fù)用功能: :A

24、F_OD (Open Drain Output Alternate-Function)輸輸 入入輸輸 出出復(fù)用輸出復(fù)用輸出I/O端口位的推挽輸出配置推挽模式:輸出寄存器上的推挽模式:輸出寄存器上的0激活激活N-MOS,而輸出寄存器上的,而輸出寄存器上的1將將激活激活P-MOS。激活激活施密特觸發(fā)輸入施密特觸發(fā)輸入弱上拉和下拉電阻被弱上拉和下拉電阻被禁止禁止在每個(gè)在每個(gè)APB2時(shí)鐘周期,出現(xiàn)在時(shí)鐘周期,出現(xiàn)在I/O腳腳上的數(shù)據(jù)被采樣到上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器輸入數(shù)據(jù)寄存器12:49嵌入式系統(tǒng)原理與應(yīng)用30嵌套向量中斷控制器NVICNVIC:Nested Vectored Interrupt

25、 ControllerNested Vectored Interrupt Controller,管理,管理ARM Cortex-M3 ARM Cortex-M3 處理器的所有中斷和中斷優(yōu)先級,是處理器的所有中斷和中斷優(yōu)先級,是Cortex-M3Cortex-M3不可分離的一部分不可分離的一部分。ARM Cortex-M3 ARM Cortex-M3 處理器的處理器的NVICNVIC :支持:支持256256個(gè)中斷(個(gè)中斷(1616個(gè)個(gè)內(nèi)核中斷內(nèi)核中斷+ +240240個(gè)外部中斷個(gè)外部中斷)和可編程)和可編程256256級中斷優(yōu)先級的級中斷優(yōu)先級的設(shè)置。設(shè)置。所有基于所有基于ARM Cortex

26、-M3ARM Cortex-M3內(nèi)核的處理器(包括內(nèi)核的處理器(包括STM32STM32)的)的256256個(gè)中斷中前面的個(gè)中斷中前面的1616個(gè)內(nèi)核中斷都是一樣的,而后面的個(gè)內(nèi)核中斷都是一樣的,而后面的240240個(gè)個(gè)外部中斷外部中斷的具體數(shù)目和中斷優(yōu)先級的位數(shù)由芯片廠的具體數(shù)目和中斷優(yōu)先級的位數(shù)由芯片廠商決定。商決定。中斷優(yōu)先級ARM Cortex-M3ARM Cortex-M3內(nèi)核定義了兩類優(yōu)先級:內(nèi)核定義了兩類優(yōu)先級: 搶占式優(yōu)先級搶占式優(yōu)先級 響應(yīng)優(yōu)先級響應(yīng)優(yōu)先級(又稱為副優(yōu)先級或子優(yōu)先級)(又稱為副優(yōu)先級或子優(yōu)先級) 注意:通常,每個(gè)中斷源都需要指定這兩類優(yōu)先級。 STM32STM

27、32單片機(jī)的中斷優(yōu)先級都是針對單片機(jī)的中斷優(yōu)先級都是針對“中斷通道中斷通道”的。當(dāng)該的。當(dāng)該中斷通道的優(yōu)先級確定后,也就確定了該外圍設(shè)備的中斷優(yōu)先中斷通道的優(yōu)先級確定后,也就確定了該外圍設(shè)備的中斷優(yōu)先級,并且該設(shè)備所能產(chǎn)生的所有類型的中斷,都享有相同的通級,并且該設(shè)備所能產(chǎn)生的所有類型的中斷,都享有相同的通道中斷優(yōu)先級。道中斷優(yōu)先級。 至于該設(shè)備本身產(chǎn)生的多個(gè)中斷的執(zhí)行順序,則取決于用至于該設(shè)備本身產(chǎn)生的多個(gè)中斷的執(zhí)行順序,則取決于用戶的中斷服務(wù)程序。戶的中斷服務(wù)程序。結(jié)構(gòu)體NVIC_InitTypeDeftypedef struct typedef struct u8 u8 NVIC_IRQ

28、Channel;NVIC_IRQChannel;/用于選擇中斷通道用于選擇中斷通道u8 u8 NVIC_IRQChannelPreemptionPriority;NVIC_IRQChannelPreemptionPriority;/用于設(shè)置中斷通道的搶占式優(yōu)先級用于設(shè)置中斷通道的搶占式優(yōu)先級u8 u8 NVIC_IRQChannelSubPriority;NVIC_IRQChannelSubPriority;/用于設(shè)置中斷通道的子優(yōu)先級用于設(shè)置中斷通道的子優(yōu)先級FunctionalState NVIC_IRQChannelCmd; FunctionalState NVIC_IRQChannel

29、Cmd; /用于選中的中斷通道的中斷使能或中斷失能用于選中的中斷通道的中斷使能或中斷失能 NVIC_NVIC_InitInitTypeDefTypeDef ; ;EXTI(外部中斷與外部事件)控制器 EXTI EXTI由由1919個(gè)產(chǎn)生事件個(gè)產(chǎn)生事件/ /中斷要求的中斷要求的邊沿檢測器邊沿檢測器組成。組成。 每個(gè)輸入線可以獨(dú)立地配置輸入類型每個(gè)輸入線可以獨(dú)立地配置輸入類型( (脈沖或掛起脈沖或掛起) )和對應(yīng)的觸發(fā)事件和對應(yīng)的觸發(fā)事件( (上升上升沿、下降沿、雙邊沿都觸發(fā)沿、下降沿、雙邊沿都觸發(fā)) )。 每個(gè)輸入線都可以獨(dú)立地被屏蔽。掛起寄存器保持著狀態(tài)線的中斷請求。每個(gè)輸入線都可以獨(dú)立地被屏

30、蔽。掛起寄存器保持著狀態(tài)線的中斷請求。從從外部激勵(lì)信號外部激勵(lì)信號來看,中斷和事件是沒有分別的,只是在芯片內(nèi)來看,中斷和事件是沒有分別的,只是在芯片內(nèi)部分開,一路信號會(huì)向部分開,一路信號會(huì)向CPU產(chǎn)生中斷請求,另一路信號會(huì)向其它產(chǎn)生中斷請求,另一路信號會(huì)向其它功能模塊功能模塊發(fā)送脈沖觸發(fā)信號發(fā)送脈沖觸發(fā)信號。 事件本質(zhì)上就是一個(gè)觸發(fā)信號(脈沖),是用來觸發(fā)特定的外設(shè)事件本質(zhì)上就是一個(gè)觸發(fā)信號(脈沖),是用來觸發(fā)特定的外設(shè)模塊或核心本身模塊或核心本身(喚醒喚醒);而中斷則是一個(gè)固定的電平信號。;而中斷則是一個(gè)固定的電平信號。事件可以觸發(fā)中斷,也可以不觸發(fā);事件可以觸發(fā)中斷,也可以不觸發(fā);中斷有可

31、能被更優(yōu)先的中斷屏蔽,事件不會(huì)被屏蔽。中斷有可能被更優(yōu)先的中斷屏蔽,事件不會(huì)被屏蔽。中斷和事件的比較中斷和事件的比較12:49嵌入式系統(tǒng)原理與應(yīng)用35EXTI_InitTypeDef結(jié)構(gòu)體typedef structtypedef struct u32 EXTI_Line;u32 EXTI_Line; /待使能或失能的外部線路,待使能或失能的外部線路,EXTI_Linex, x=019EXTI_Linex, x=019EXTIMode_TypeDef EXTI_ModeEXTIMode_TypeDef EXTI_Mode; ; /工作模式,工作模式,EXTI_Mode_Event,EXTI_M

32、ode_InterruptEXTI_Mode_Event,EXTI_Mode_InterruptEXTITrigger_TypeDef EXTI_Trigger;EXTITrigger_TypeDef EXTI_Trigger; /觸發(fā)邊沿,觸發(fā)邊沿,EXTI_Trigger_FallingEXTI_Trigger_Falling /EXTI_Trigger_Rising,EXTI_Trigger_Rising_Falling /EXTI_Trigger_Rising,EXTI_Trigger_Rising_FallingFunctionState EXTI_LineCmd; Function

33、State EXTI_LineCmd; /ENABLE/DISABLEENABLE/DISABLEEXTI_EXTI_InitInitTypeDef; TypeDef; /用于初始化外部中斷用于初始化外部中斷/ /事件的參數(shù)事件的參數(shù)STM32的的112個(gè)通用個(gè)通用I/O端口線連端口線連接到接到16個(gè)外部中斷個(gè)外部中斷/事件(事件(EXTIx)線上,其中每根)線上,其中每根EXTIx線上可線上可接接 PAxPGx共共7個(gè)通用個(gè)通用I/O端口端口線其中線其中之一之一。x=015。(。(16*7=112)EXTI_Line:另外另外3種其他的外部中斷種其他的外部中斷/事件控制事件控制器的連接如下:

34、器的連接如下: EXTI線線16連接到連接到PVD輸出;輸出; EXTI線線17連接到連接到RTC鬧鐘事件;鬧鐘事件; EXTI線線18連接到連接到USB喚醒事件。喚醒事件。 可以通過可以通過GPIO_EXTILineConfig來選擇來選擇同一時(shí)刻同一時(shí)刻 EXTx只只能響應(yīng)一個(gè)端口的能響應(yīng)一個(gè)端口的事件觸發(fā)事件觸發(fā)主要由通過可編程預(yù)分頻器驅(qū)動(dòng)的16位自動(dòng)裝載計(jì)數(shù)器 +自動(dòng)裝載寄存器構(gòu)成。通用定時(shí)器時(shí)基單元時(shí)基單元包含: 計(jì)數(shù)器寄存器(TIMx_CNT) 預(yù)分頻器寄存器 (TIMx_PSC) (帶有緩沖器,即影子寄存器) 自動(dòng)裝載寄存器 (TIMx_ARR) (帶有緩沖器,即影子寄存器)TI

35、Mx_ARRTIMx_CNTTIMx_PSCCK_PSCCK_CNTAutoReload RegisterPSC:Prescaler 預(yù)分頻器/* TIM Time Base Init structure definition */typedef struct u16 TIM_Period;/設(shè)置通用定時(shí)器設(shè)置通用定時(shí)器 TIMx的定時(shí)周期的定時(shí)周期 u16 TIM_Prescaler;/設(shè)置通用定時(shí)器設(shè)置通用定時(shí)器 TIMx的預(yù)分頻值的預(yù)分頻值 u16 TIM_ClockDivision;/用于對通用定時(shí)器用于對通用定時(shí)器 TIMx的內(nèi)部的內(nèi)部 /時(shí)鐘時(shí)鐘TIMxCLK(to TIM2,3,4,5,6&7) 進(jìn)行分頻采樣進(jìn)行分頻采樣 u16 TIM_CounterMode;/設(shè)置通用定時(shí)器設(shè)置通用定時(shí)器TIMx的計(jì)數(shù)模式的計(jì)數(shù)模式 u8 TIM_RepetitionCounter;/重復(fù)寄存器值,僅在使用重復(fù)寄存器值,僅在使用 /TIM1和和TIM8的高級功能時(shí)有用的高級功能時(shí)有用 TIM_TimeBaseInitTypeDef;TIM_TimeBaseInitTyp

溫馨提示

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

最新文檔

評論

0/150

提交評論