第5章 stm32單片機(jī)外部中斷1_第1頁(yè)
第5章 stm32單片機(jī)外部中斷1_第2頁(yè)
第5章 stm32單片機(jī)外部中斷1_第3頁(yè)
第5章 stm32單片機(jī)外部中斷1_第4頁(yè)
第5章 stm32單片機(jī)外部中斷1_第5頁(yè)
已閱讀5頁(yè),還剩61頁(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)介

退出嵌入式單片機(jī)原理及應(yīng)用電氣工程學(xué)院儀器科學(xué)與工程系1ARM嵌入式系統(tǒng)概述2STM32單片機(jī)結(jié)構(gòu)和最小系統(tǒng)

3基于標(biāo)準(zhǔn)外設(shè)庫(kù)的C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)

4STM32通用輸入輸出GPIO5STM32外部中斷6STM32通用定時(shí)器7STM32通用同步/異步收發(fā)器USART8直接存儲(chǔ)器存取DMA9STM32的模數(shù)轉(zhuǎn)換器ADC10STM32的集成電路總線I2C11STM32的串行外設(shè)接口SPI第5章STM32單片機(jī)外部中斷5.1中斷相關(guān)概念5.2STM32F103中斷系統(tǒng)組成5.3中斷控制5.4中斷執(zhí)行過(guò)程和中斷嵌套5.5STM32外部中斷應(yīng)用設(shè)計(jì)退出5.1中斷的相關(guān)概念

中斷:?jiǎn)纹瑱C(jī)執(zhí)行主程序時(shí),由于某個(gè)事件的原因,暫停主程序的執(zhí)行,調(diào)用相應(yīng)的程序處理該事件,處理完畢后再自動(dòng)繼續(xù)執(zhí)行主程序的過(guò)程。

中斷的優(yōu)先級(jí):由中斷的嵌套可以看出,不同事件的重要程度不同。重要的事件可以打斷相對(duì)不重要的事件的處理,用戶可以根據(jù)自己的需求對(duì)不同的事件設(shè)定重要級(jí)別,稱為中斷的優(yōu)先級(jí)。

中斷的嵌套:如果在執(zhí)行一個(gè)中斷時(shí)又被另一個(gè)更重要的事件打斷,暫停該中斷處理過(guò)程轉(zhuǎn)去處理這個(gè)更重要的事件,處理完畢后再繼續(xù)處理本中斷的過(guò)程,叫作中斷的嵌套。

中斷源:可以引起中斷的事件稱為中斷源。5.1中斷的相關(guān)概念中斷服務(wù)程序與中斷向量:為了處理中斷而編寫的程序稱為中斷服務(wù)程序,對(duì)應(yīng)中斷服務(wù)程序的入口地址被稱為中斷向量。中斷請(qǐng)求、中斷響應(yīng)、中斷處理及中斷返回:中斷源對(duì)主程序或中斷服務(wù)程序提出中斷要求,叫作中斷請(qǐng)求;主程序或中斷服務(wù)程序接受中斷請(qǐng)求,進(jìn)入中斷服務(wù)程序的過(guò)程叫作中斷響應(yīng);執(zhí)行中斷服務(wù)程序的過(guò)程叫作中斷處理;中斷服務(wù)程序執(zhí)行完畢后回到主程序或者次一級(jí)別中斷服務(wù)程序的過(guò)程叫作中斷返回。中斷處理的整個(gè)過(guò)程包含了中斷請(qǐng)求、中斷響應(yīng)、中斷處理及中斷返回四個(gè)步驟。中斷系統(tǒng):實(shí)現(xiàn)中斷處理功能的軟件、硬件系統(tǒng)稱為中斷系統(tǒng)。5.2STM32F103中斷系統(tǒng)組成5.2.1中斷源STM32F103中斷系統(tǒng)提供10個(gè)系統(tǒng)異常和60個(gè)可屏蔽中斷(STM32F107系列為68個(gè))源,具有16個(gè)中斷優(yōu)先級(jí)??善帘沃袛嘣窗ǎ和獠恐袛?、定時(shí)器中斷、串口中斷直接內(nèi)存訪問(wèn)中斷模數(shù)轉(zhuǎn)換中斷集成電路總線中斷串行外設(shè)接口中斷等。5.2.2中斷向量:表5-1給出STM32F103中斷向量表5.3中斷控制5.3.1中斷屏蔽控制中斷屏蔽控制包括NVIC控制和外設(shè)中斷控制EXTI。NVIC為中斷總開關(guān),由中斷設(shè)置允許寄存器(NVIC_ISER)、中斷清除允許寄存器(NVIC_ICER)、中斷設(shè)置掛起寄存器(NVIC_ISPR)、中斷清除掛起寄存器(NVIC_ICPR)和中斷狀態(tài)寄存器(NVIC_IABR)控制。除GPIO由EXTI控制中斷外,其它的外設(shè)均有自己的中斷屏蔽控制寄存器,如定時(shí)器中斷由DMA/中斷使能寄存器(TIM_DIER)控制、串口中斷由狀態(tài)寄存器(USART_SR)和控制寄存器3(USART_CR3)控制。

5.3.2中斷控制器NVIC為中斷總開關(guān):支持68個(gè)可屏蔽中斷。提供16個(gè)可編程的優(yōu)先級(jí),支持中斷嵌套,提供向量中斷處理機(jī)制等功能。中斷發(fā)生時(shí),自動(dòng)獲得服務(wù)例程入口地址并直接調(diào)用,無(wú)需軟件判定中斷源。主要包括:中斷設(shè)置允許寄存器(NVIC_ISER)中斷清除允許寄存器(NVIC_ICER)中斷設(shè)置掛起寄存器(NVIC_ISPR)中斷清除掛起寄存器(NVIC_ICPR)中斷狀態(tài)寄存器(NVIC_IABR)控制。5.3.2中斷控制器與NVIC相關(guān)的寄存器在“stm32f10x_map.h”文件中定義了一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體的內(nèi)容如下STM32F103系列單片機(jī)的中斷系統(tǒng)在這些寄存器的控制下有序執(zhí)行。了解這些中斷寄存器的含義,才能更好的理解STM32單片機(jī)中斷系統(tǒng)的工作原理typedefstruct{vu32ISER[2];u32RESERVED0[30];vu32ICER[2];u32RESERVED1[30];vu32ISPR[2];u32RESERVED2[30];vu32ICPR[2];u32RESERVED3[30];vu32IABR[2];u32RESERVED4[30];vu32IPR[15];}NVIC_TypeDef5.3.2中斷控制器ISER[2]:ISER全稱是:InterruptSet-EnableRegisters,中斷使能寄存器組。STM32F103系列的單片機(jī)可屏蔽外部中斷有60個(gè),用2個(gè)32位的ISER寄存器來(lái)表示,這2個(gè)32位的寄存器總共可以表示64個(gè)外部中斷。而STM32F103系列單片機(jī)只用了ISER寄存器其中的前60位。ISER[0]的bit0~bit31分別對(duì)應(yīng)是外部中斷0~31。ISER[1]的bit0~27對(duì)應(yīng)外部中斷32~59;這樣總共60個(gè)外部中斷就分別對(duì)應(yīng)上了。使能某個(gè)中斷,必須設(shè)置相應(yīng)的ISER位為15.3.2中斷控制器具體有哪些外部中斷,在“stm32f10x_nvic.h”這個(gè)頭文件中已經(jīng)定義5.3.2中斷控制器5.3.2中斷控制器ICER[2]:全稱InterruptClear-EnableRegisters,是一個(gè)中斷清除使能寄存器組。該寄存器組與ISER寄存器功能相反,用來(lái)清除某個(gè)中斷的使能位。由于NVIC的這些寄存器都是寫1有效的,寫0是無(wú)效的。設(shè)置一組ICER寄存器來(lái)清除相應(yīng)中斷使能位。ISPR[2]:全稱InterruptSet-PendingRegisters,是一個(gè)中斷掛起控制寄存器組。每個(gè)位對(duì)應(yīng)的外部中斷和ISER內(nèi)容是一樣的。通過(guò)向相應(yīng)的位寫1,可以將正在執(zhí)行的中斷掛起,去執(zhí)行同級(jí)或更高級(jí)別的中斷。向這個(gè)寄存器組寫0是無(wú)效的。5.3.2中斷控制器ICPR[2]:全稱InterruptClear-PendingRegisters,是單片機(jī)的中斷解掛寄存器組。其功能和ISPR寄存器相反,對(duì)應(yīng)位的內(nèi)容也和ISER寄存器是一樣的。通過(guò)寫1,可以將相應(yīng)的中斷解掛。寫0無(wú)效。IABR[2]:全稱InterruptActiveBitRegisters,單片機(jī)中斷激活標(biāo)志位寄存器組。它是一個(gè)只讀寄存器,CPU通過(guò)讀取這個(gè)寄存器的相應(yīng)位就可以知道當(dāng)前有哪些中斷正在執(zhí)行。在相應(yīng)的中斷執(zhí)行完成以后由硬件自動(dòng)清零。對(duì)應(yīng)位所代表的中斷內(nèi)容和ISER一樣,如果相應(yīng)位為1,則表示該位所對(duì)應(yīng)的中斷正在被執(zhí)行。5.3.2中斷控制器IPR[15]:全稱InterruptPriorityRegisters,是一個(gè)中斷優(yōu)先級(jí)控制的寄存器組。這個(gè)寄存器組比較重要,STM32F103系列單片機(jī)的外部中斷分組與這個(gè)寄存器組密切相關(guān)。因?yàn)镾TM32F103系列單片機(jī)的外部中斷有60個(gè),所以采用中斷分組的辦法來(lái)確定中斷的優(yōu)先級(jí)。IPR寄存器組由15個(gè)32位的寄存器組成,每個(gè)可屏蔽中斷占用8位IPR[0]的[0~7],[8~15],[16~23],[24~31]分別對(duì)應(yīng)中斷編號(hào)為0~3,依此類推,總共對(duì)應(yīng)60個(gè)外部中斷。而每個(gè)可屏蔽中斷占用的8bit并沒有全部使用,只采用高4位。這4位,又分為搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。搶占優(yōu)先級(jí)在前,響應(yīng)優(yōu)先級(jí)在后。5.3.2中斷控制器STM32F103系列單片機(jī)外部中斷分為5個(gè)組,組0~4。分組的設(shè)置是由SCB->AIRCR寄存器的bit10~8這3位來(lái)定義的。具體的分配關(guān)系如下表所示:5.3.2中斷控制器為使STM32單片機(jī)的中斷系統(tǒng)能及時(shí)響應(yīng)并處理發(fā)生的所有中斷,系統(tǒng)根據(jù)引起中斷事件的重要性和緊迫程度,STM32單片機(jī)的硬件將外設(shè)的中斷源分為2個(gè)級(jí)別,這2個(gè)級(jí)別就是STM32F103系列單片機(jī)的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí);如果兩個(gè)中斷源的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行;高搶占優(yōu)先級(jí)中斷是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。而搶占優(yōu)先級(jí)相同的中斷,高響應(yīng)優(yōu)先級(jí)中斷不可以打斷正在執(zhí)行的低響應(yīng)優(yōu)先級(jí)中斷。搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí)可設(shè)置為0到15級(jí)。判斷兩個(gè)中斷的優(yōu)先級(jí)時(shí):(1)先看搶占優(yōu)先級(jí)的高低;(2)再看響應(yīng)優(yōu)先級(jí)的高低;(3)看中斷通道向量地址。一個(gè)系統(tǒng)使用一個(gè)組別就完全可以滿足需要,在使用一個(gè)組別后不要在系統(tǒng)中再改動(dòng)組別。搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)5.3.2中斷控制器5.3.2中斷控制器假定設(shè)置中斷優(yōu)先級(jí)為組2,然后設(shè)置:

中斷3(RTC中斷)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為1。

中斷6(外部中斷0)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0。

中斷7(外部中斷1)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為0。

求這3個(gè)中斷的優(yōu)先級(jí)順序?上面例子中的中斷3和中斷7都可以打斷中斷6的中斷。而中斷7和中斷3卻不可以相互打斷(這是因?yàn)樗麄兊膿屨純?yōu)先級(jí)是相同的)。搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)外部中斷/事件控制器EXTI,主要特性:(1)每個(gè)中斷/事件都有獨(dú)立的觸發(fā)和屏蔽;(2)每個(gè)中斷線都有專用的狀態(tài)位;(3)支持多達(dá)19個(gè)中斷/事件請(qǐng)求;(4)檢測(cè)脈沖寬度低于APB2時(shí)鐘寬度的外部信號(hào)。5.3.3相關(guān)功能寄存器1.中斷屏蔽寄存器(EXTI_IMR)2.事件屏蔽寄存器(EXTI_EMR)3.上升沿觸發(fā)選擇寄存器(EXTI_RTSR)4.下降沿觸發(fā)選擇寄存器(EXTI_FTSR)5.軟件中斷事件寄存器(EXTI_SWIER)6.中斷掛起寄存器(EXTI_PR)5.3.3相關(guān)功能寄存器EXTI_IMR(Interruptmaskregister)中斷屏蔽寄存器5.3.3相關(guān)功能寄存器EXTI_EMR(Eventmaskregister)中斷事件屏蔽寄存器5.3.3相關(guān)功能寄存器EXTI_RTSR(Risingtriggerselectionregister)上升沿觸發(fā)寄存器5.3.3相關(guān)功能寄存器EXTI_FTSR(Fallingtriggerselectionregister)下降沿觸發(fā)器5.3.3相關(guān)功能寄存器EXTI_SWIER(Softwareinterrupteventregister)軟件中斷事件寄存器5.3.3相關(guān)功能寄存器EXTI_PR(PendingRegister)中斷掛起寄存器5.3.3相關(guān)功能寄存器5.4中斷執(zhí)行過(guò)程和中斷嵌套1中斷請(qǐng)求和優(yōu)先級(jí)如果系統(tǒng)中存在多個(gè)中斷源,處理器要先判斷當(dāng)前中斷的優(yōu)先級(jí)。多個(gè)中斷請(qǐng)求同時(shí)到達(dá)時(shí),先響應(yīng)優(yōu)先級(jí)高的中斷。如果它們的搶占優(yōu)先級(jí)相同,則先處理響應(yīng)優(yōu)先級(jí)高的中斷。例如有三個(gè)中斷向量:中斷向量搶占優(yōu)先級(jí)響應(yīng)優(yōu)先級(jí)A00B10C11如果內(nèi)核正在執(zhí)行C的中斷服務(wù)程序,則能被搶占優(yōu)先級(jí)更高的中斷A打斷;由于B和C的搶占優(yōu)先級(jí)相同,所以C不會(huì)被B打斷;但如果B和C兩個(gè)中斷同時(shí)到達(dá),則響應(yīng)優(yōu)先級(jí)更高的B會(huì)被先執(zhí)行。5.5STM32外部中斷應(yīng)用設(shè)計(jì)5.5.1STM32外部中斷常用的庫(kù)函數(shù)函數(shù)名描述NVIC_PriorityGroupConfig設(shè)置優(yōu)先級(jí)分組:搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)NVIC_Init根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器NVIC_SetVectorTable設(shè)置向量表的位置和偏移NVIC_SystemLPConfig選擇系統(tǒng)進(jìn)入低功耗模式的條件5.5.2STM32中斷的設(shè)計(jì)1.NVIC設(shè)置(1)根據(jù)需要對(duì)中斷優(yōu)先級(jí)進(jìn)行分組,確定搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的個(gè)數(shù)。(2)選擇中斷通道,不同的引腳對(duì)應(yīng)不同的中斷通道,在stm32f10x.h中定義了中斷通道結(jié)構(gòu)體IRQn_Type,包含了所有型號(hào)芯片的所有中斷通道。(3)根據(jù)系統(tǒng)要求設(shè)置中斷優(yōu)先級(jí),包括搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。(4)使能相應(yīng)的中斷,完成NVIC配置。5.5.2STM32中斷的設(shè)計(jì)使用庫(kù)函數(shù)NVIC_PriorityGroupConfig()實(shí)現(xiàn)STM32F103系列的單片機(jī)中斷系統(tǒng)分組5.5.2STM32中斷的設(shè)計(jì)入口參數(shù)NVIC_PriorityGroup5.5.2STM32中斷的設(shè)計(jì)舉例:如代碼的第17行所示,利用“NVIC_PriorityGroupConfig()”庫(kù)函數(shù)將外部中斷分為組2。即,搶占優(yōu)先級(jí)可以設(shè)置為0-3,響應(yīng)優(yōu)先級(jí)也是可以設(shè)置為0-3的,這是因?yàn)樗鼈儞屨純?yōu)先級(jí)占2位,響應(yīng)優(yōu)先級(jí)也占2位。:5.5.2STM32中斷的設(shè)計(jì)結(jié)構(gòu)體“NVIC_InitTypeDef”定義typedefstruct{uint8_tNVIC_IRQChannel;uint8_tNVIC_IRQChannelPreemptionPriority;uint8_tNVIC_IRQChannelSubPriority;FunctionalStateNVIC_IRQChannelCmd;}NVIC_InitTypeDef;5.5.2STM32中斷的設(shè)計(jì)NVIC_IRQChannel這個(gè)參數(shù)就是讓我們選擇需要配置的中斷向量的值,如下表所示5.5.2STM32中斷的設(shè)計(jì)5.5.2STM32中斷的設(shè)計(jì)NVIC_IRQChannelPreemptionPriority該參數(shù)設(shè)置了成員NVIC_IRQChannel中的搶占優(yōu)先級(jí)的優(yōu)先級(jí)別。NVIC_IRQChannelSubPriority該參數(shù)設(shè)置了成員NVIC_IRQChannel中的響應(yīng)優(yōu)先級(jí)的優(yōu)先級(jí)別5.5.2STM32中斷的設(shè)計(jì)第0組:先占優(yōu)先級(jí)(搶占優(yōu)先級(jí))占0位,從優(yōu)先級(jí)(響應(yīng)優(yōu)先級(jí))占4位,所以說(shuō)NVIC_IRQChannelPreemptionPriority這個(gè)參數(shù)的值只能設(shè)置為0,NVIC_IRQChannelSubPriority這個(gè)參數(shù)值可以設(shè)置為0-15;第1組:先占優(yōu)先級(jí)(搶占優(yōu)先級(jí))占1位,從優(yōu)先級(jí)(響應(yīng)優(yōu)先級(jí))占3位,所以說(shuō)NVIC_IRQChannelPreemptionPriority這個(gè)參數(shù)的值可以設(shè)置為0-1,NVIC_IRQChannelSubPriority這個(gè)參數(shù)的值可以設(shè)置為0-7;第2組:先占優(yōu)先級(jí)(搶占優(yōu)先級(jí))占2位,從優(yōu)先級(jí)(響應(yīng)優(yōu)先級(jí))占2位,所以說(shuō)NVIC_IRQChannelPreemptionPriority這個(gè)參數(shù)的值可以設(shè)置為0-3,NVIC_IRQChannelSubPriority這個(gè)參數(shù)的值可以設(shè)置為0-3;第3組:先占優(yōu)先級(jí)(搶占優(yōu)先級(jí))占3位,從優(yōu)先級(jí)(響應(yīng)優(yōu)先級(jí))占1位,所以說(shuō)NVIC_IRQChannelPreemptionPriority值可以設(shè)置為0-7,NVIC_IRQChannelSubPriority值可以設(shè)置為0-1;第4組:先占優(yōu)先級(jí)(搶占優(yōu)先級(jí))占4位,從優(yōu)先級(jí)(響應(yīng)優(yōu)先級(jí))占0位,所以說(shuō)NVIC_IRQChannelPreemptionPriority這個(gè)參數(shù)的值可以設(shè)置為0-15,NVIC_IRQChannelSubPriority這個(gè)參數(shù)的值只能設(shè)置為0;5.5.2STM32中斷的設(shè)計(jì)NVIC_IRQChannelCmd該參數(shù)用來(lái)使能或者關(guān)閉指定的IRQ通道。下面例子給出如何用庫(kù)函數(shù)配置STM32F103系列單片機(jī)的外部中斷:程序代碼的第14行定義了一個(gè)“NVIC_InitTypeDef”結(jié)構(gòu)體類型的變量。第17行:設(shè)置NVIC中斷分組2,2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí);第18行:設(shè)置外部I0口的第5-9引腳為中斷通道;第19行:搶占優(yōu)先級(jí)為2;第20行:響應(yīng)優(yōu)先級(jí)為2;第21行:使能外部中斷通道;第22行:根據(jù)NVIC_InitStructure結(jié)構(gòu)體中指定的參數(shù)初始化外設(shè)NVIC寄存器;5.5.2STM32中斷的設(shè)計(jì)2.中斷端口配置(1)首先要對(duì)引腳進(jìn)行配置,使能引腳,具體方法參考第4章,如果使用了復(fù)用功能需要打開復(fù)用時(shí)鐘。(2)然后對(duì)外部中斷方式進(jìn)行配置,包括中斷線路設(shè)置、中斷或事件選擇、觸發(fā)方式設(shè)置、使能中斷線完成設(shè)置。其中中斷線路EXTI_Line0~EXTI_Line15分別對(duì)應(yīng)EXTI0~EXTI15,即每個(gè)端口的16個(gè)引腳。EXTI_Line16~EXTI_Line18分別對(duì)應(yīng)PVD輸出事件、RTC鬧鐘事件和USB喚醒事件。5.5.3STM32外部中斷應(yīng)用實(shí)例通過(guò)按鍵中斷實(shí)現(xiàn)LED的亮滅控制,利用STM32F10x的GPIO功能驅(qū)動(dòng)LED。采用PA8連接LED,PB6接按鍵開關(guān)。

STM32外部中斷STM32單片機(jī)80個(gè)通用I/O端口連接到19個(gè)外部中斷/事件源上。左圖為STM32單片機(jī)通用I/O與外部中斷的映射關(guān)系:PAx、PBx、PCx、PDx和PEx端口對(duì)應(yīng)的是同一個(gè)外部中斷/事件源EXTIx(x:0-15)。5.5.3STM32外部中斷應(yīng)用實(shí)例這個(gè)庫(kù)函數(shù)的功能就是選擇哪個(gè)IO引腳作為外部中斷線路,它有2個(gè)輸入?yún)?shù),第一個(gè)輸入?yún)?shù)GPIO_PortSource,作用是選擇哪一組GPIO端口作為外部中斷源,它的值可取下表中的任意一個(gè)值:

5.5.3STM32外部中斷應(yīng)用實(shí)例輸入?yún)?shù)GPIO_PinSource:這個(gè)參數(shù)可以選擇GPIO端口的某個(gè)引腳作為中斷源的輸入。5.5.3STM32外部中斷應(yīng)用實(shí)例intmain(void){

NVIC_Configuration();//NVIC

LED_Config();//GPIO-LED

KEY_Config();//GPIO-KEY

GPIO_ResetBits(GPIOB,GPIO_Pin_8);//低電平,點(diǎn)亮LED

while(1)

{

}}5.5.3STM32外部中斷應(yīng)用實(shí)例voidNVIC_Configuration(void){

NVIC_InitTypeDefNVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);}5.5.3STM32外部中斷應(yīng)用實(shí)例voidLED_Config(void){

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);}5.5.3STM32外部中斷應(yīng)用實(shí)例voidKEY_Config(void){GPIO_InitTypeDefGPIO_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;RCC_APB2PeriphClockCmd(

RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,

ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOB,&GPIO_InitStructure);5.5.3STM32外部中斷應(yīng)用實(shí)例GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);EXTI_InitStructure.EXTI_Line=EXTI_Line6;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);}5.5.3STM32外部中斷應(yīng)用實(shí)例voidKEY_Config(void)中定義了一個(gè)“EXTI_InitStructure”,這個(gè)結(jié)構(gòu)體類型在庫(kù)文件中如下定義:Typedefstruct{uint32_tEXTI_Line;EXTIMode_TypeDefEXTI_Mode;EXTITrigger_TypeDefEXTI_Trigger;FunctionalStateEXTI_LineCmd;}EXTI_InitTypeDef5.5.3STM32外部中斷應(yīng)用實(shí)例1:uint32_tEXTI_Line這個(gè)參數(shù)就是讓我們選擇哪條外部的中斷線,該參數(shù)可取的值5.5.3STM32外部中斷應(yīng)用實(shí)例EXTI_Mode該參數(shù)讓我們?cè)O(shè)置中斷線路的模式,是事件請(qǐng)求還是中斷請(qǐng)求,該參數(shù)可取的值:STM32單片機(jī)的中斷與事件有何區(qū)別?5.5.3STM32外部中斷應(yīng)用實(shí)例5.5.3STM32外部中斷應(yīng)用實(shí)例中斷是需要CPU參與的,需要軟件的中斷服務(wù)函數(shù)才能完成,中斷后產(chǎn)生相應(yīng)的結(jié)果;事件是靠脈沖發(fā)生器產(chǎn)生一個(gè)脈沖,進(jìn)而由硬件自動(dòng)完成這個(gè)事件,并且產(chǎn)生相應(yīng)的結(jié)果??梢赃@樣簡(jiǎn)單的認(rèn)為,事件機(jī)制提供了一個(gè)完全有硬件自動(dòng)完成觸發(fā)到產(chǎn)生結(jié)果的這么一個(gè)通道,不需要軟件的參與,降低了CPU的負(fù)荷,節(jié)省了中斷資源,提高了響應(yīng)速度(硬件總快于軟件),事件是利用硬件來(lái)提升CPU芯片處理事件能力的一個(gè)有效方法。5.5.3STM32外部中斷應(yīng)用實(shí)例EXTI_Trigger設(shè)置了線路的觸發(fā)邊沿(3種觸發(fā)方式:上升沿觸發(fā),下降沿觸發(fā)和上升沿和下降沿觸發(fā))EXTI_LineCmd用來(lái)開啟或者關(guān)閉選中線路。它可以被設(shè)為ENABLE或者DISABLE。5.5.3STM32外部中斷應(yīng)用實(shí)例voidKEY_Config(void){GPIO_InitTypeDefGPIO_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;RCC_APB2PeriphClockCmd(

RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,

ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GP

溫馨提示

  • 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)論