資源描述:
《STM32之外部中斷EXTI》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、STM32之外部中斷EXTISTM32中斷控制線支持19個(gè)外部中斷/事件請求,每個(gè)中斷都有對應(yīng)狀態(tài)位和獨(dú)立的觸發(fā)與屏蔽設(shè)置。STM32F103的19個(gè)外部中斷為:線0-15:對應(yīng)GPIO口的輸入中斷。線16:連接到PVD輸出(掉電檢測,掉電時(shí)可立即保存重要數(shù)據(jù)作用)。線17:連接RTC鬧鐘事件。線18:連接到USB喚醒事件。每個(gè)IO口都可作為外部中斷輸入口的STM32的IO口遠(yuǎn)多于16個(gè),而IO口使用的中斷線只有16個(gè)。為此,GPIO管腳GPIOx.0~GPIOx.15(X=A,F,G)分別對應(yīng)中斷線0-15.這樣每個(gè)中斷線對應(yīng)了7個(gè)IO口。如線
2、0對應(yīng)著GPIOA.0,GPIOB.0,GPIOC.0,GPIOD.0,GPIOE.0,GPIOF.0,GPIOG.0但是每個(gè)中斷線每次只能連接到1個(gè)IO口上。這樣就需要通過相關(guān)的配置來決定對應(yīng)的中斷線被配置到哪個(gè)GPIO上了。GPIO和中斷線的映射關(guān)系如下圖:GPIO與中斷映射配置通過函數(shù)來實(shí)現(xiàn)voidGPIO_EXTILineConfig(uint8_t?GPIO_PortSource,uint8_t?GPIO_PinSource?)例如:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSou
3、rce2);即外部中斷線2就和GPIOE映射起來了,顯然是GPIOE.2與EXTI2中斷線連接起來了。接著需設(shè)置中斷觸發(fā)方式:voidEXTI_Init(EXTI_InitTypeDef*?EXTI_InitStruct)例如:EXTI_InitTypeDefEXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line4;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_T
4、rigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);以上例子設(shè)置了中斷線line4的中斷為下降沿觸發(fā)。設(shè)置好了中斷線和GPIO的映射關(guān)系,然后又設(shè)置好了中斷的觸發(fā)模式等參數(shù)。既然是外部中斷,設(shè)計(jì)到中斷我們當(dāng)然需要設(shè)置NVCI的中斷優(yōu)先級。配置完中斷優(yōu)先級后,接著是編寫中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)名字在MDK中事先有定義。但是不得不提的是,STM32的IO口外部中斷只有6個(gè),分別是:EXPORTEXT0_IRQHandleEXPORT
5、-----------------------中斷線0對應(yīng)的中斷函數(shù)EXT1_IRQHandleEXPORT-----------------------中斷線1對應(yīng)的中斷函數(shù)EXT2_IRQHandleEXPORT-----------------------中斷線2對應(yīng)的中斷函數(shù)EXT3_IRQHandleEXPORT-----------------------中斷線3對應(yīng)的中斷函數(shù)EXT4_IRQHandleEXPORT-----------------------中斷線4對應(yīng)的中斷函數(shù)EXT9_5_IRQHandleEXPORT----
6、--------------------中斷線5-9對應(yīng)的中斷函數(shù)EXT15_10_IRQHandle--------------------------------中斷線10-15共用的中斷函數(shù)編寫中斷服務(wù)函數(shù)經(jīng)常需要使用兩個(gè)函數(shù)。第一個(gè)是判斷某個(gè)中斷線上的中斷是否發(fā)生(即標(biāo)志位是否置位):ITStatusEXTI_GetITStatus(uint32_tEXTI_line);//放在中斷服務(wù)函數(shù)開頭,監(jiān)測中斷標(biāo)志位第二個(gè)是清除某個(gè)中斷線上的中斷標(biāo)志位(即清除標(biāo)志位):voidEXTI_ClearITPendingBit(uint32_tEXT
7、I_Line);//放在函數(shù)的結(jié)尾常用外部中斷服務(wù)函數(shù)的格式://格式一voidEXTI3_IRQHandler(void){If(EXTI_GetITStatus(EXTI_Line3)!-=RESET)//判斷是否置位{Dosomething();//執(zhí)行中斷事件EXTI_ClearITPendingBit(EXTI_Line3);//清零LINE上標(biāo)志位}}//========================================================//格式二voidEXTI3_IRQHandler(void){If(
8、EXTI_GetFlagStatus(EXTI_Line3)!-=RESET)//判斷是否置位{Dosomething();//執(zhí)行中斷