外部中斷控制:
STM32的每個(gè)IO 都可以作為外部中斷的中斷輸入口,這點(diǎn)也是STM32的強(qiáng)大之處。STM32F103的中斷控制器支持19個(gè)外部中斷/事件請(qǐng)求。每個(gè)中斷設(shè)有狀態(tài)位,每個(gè)中斷/事件都有獨(dú)立的觸發(fā)和屏蔽設(shè)置。STM32F103 的19個(gè)外部中斷為:
線(xiàn)0~15:對(duì)應(yīng)外部IO 口的輸入中斷。
線(xiàn)16:連接到PVD輸出。
線(xiàn)17:連接到RTC鬧鐘事件。
線(xiàn)18:連接到USB喚醒事件。
STM32供IO 口使用的中斷線(xiàn)只有16個(gè),但是STM32的IO 口卻遠(yuǎn)遠(yuǎn)不止16個(gè),STM32就這樣設(shè)計(jì),GPIO的管教GPIOx.0~GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對(duì)應(yīng)中斷線(xiàn)15~0。這樣每個(gè)中斷線(xiàn)對(duì)應(yīng)了最多7個(gè)IO 口,以線(xiàn)0為例:它對(duì)應(yīng)了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中斷線(xiàn)每次只能連接到1個(gè)IO 口上,這樣就需要通過(guò)配置來(lái)決定對(duì)應(yīng)的中斷線(xiàn)配置到哪個(gè)GPIO上了。
AFIO(alternate-function I/O),指GPIO端口的復(fù)用功能,GPIO除了用作普通的輸入輸出(主功能),還可以作為片上外設(shè)的復(fù)用輸入輸出,如串口、ADC、這些就是復(fù)用功能。大多數(shù)GPIO都有一個(gè)默認(rèn)復(fù)用功能,有的GPIO還有重映射功能,重映射功能是指把原來(lái)屬于A(yíng)引腳的默認(rèn)復(fù)用功能,轉(zhuǎn)移到了B引腳進(jìn)行使用,前提是B引腳具有這個(gè)重映射功能。當(dāng)把GPIO用作EXTI外部中斷或使用重映射功能的時(shí)候,必須開(kāi)啟AFIO時(shí)鐘,而使用默認(rèn)復(fù)用功能的時(shí)候,就不必開(kāi)啟AFIO時(shí)鐘了。
主要步驟:1、使能EXTIx線(xiàn)的時(shí)鐘和第二功能AFIO時(shí)鐘
2、配置EXTIx先得中斷優(yōu)先級(jí)
3、配置EXTI中斷線(xiàn)IO
4、選定要配置為EXTI的IO口線(xiàn)和IO口的工作模式
5、EXTI中短線(xiàn)工作模式配置
另外:NVIC_PriorityGroupConfig()庫(kù)函數(shù),把NVIC中的中斷優(yōu)先級(jí)分組設(shè)置;然后再向NVIC初始化結(jié)構(gòu)體寫(xiě)入?yún)?shù)。NVIC_IRQChannel=EXTI9_5_IRQn,表示要配置的為EXTI第5-9線(xiàn)的中斷向量。這些寫(xiě)入的參數(shù)在stm32f10x.h文件的IRQn類(lèi)型定義中查到。
中短線(xiàn)0-4每個(gè)中斷線(xiàn)對(duì)應(yīng)一個(gè)中斷函數(shù),中斷線(xiàn)5-9共用中斷函數(shù)EXTI9_5_IRQHandler,中斷線(xiàn)10-15共用中斷函數(shù)EXTI15-10-IRQHandler。在編寫(xiě)中斷服務(wù)函數(shù)的時(shí)候會(huì)經(jīng)常使用到兩個(gè)函數(shù),第一個(gè)函數(shù)是判斷某個(gè)中斷線(xiàn)上的中斷是否發(fā)生(標(biāo)志位是否置位):
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
這個(gè)函數(shù)一般使用在中斷服務(wù)函數(shù)的開(kāi)頭判斷中斷是否發(fā)生。另一個(gè)函數(shù)是清除某個(gè)中斷線(xiàn)上的中斷標(biāo)志位:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
這個(gè)函數(shù)一般應(yīng)用在中斷服務(wù)函數(shù)結(jié)束之前,清除中斷標(biāo)志位





