EXTI每個中斷/事件都有獨立的觸發(fā)和屏蔽,每個中斷線專用的狀態(tài)位,支寬度持多達23個軟件的中斷/事件請求,在檢測脈沖寬度低于APB2時鐘寬度的外部信號參見數(shù)據(jù)手冊中的電氣特性部分。
STM32F4xx可以處理外部或內部事件來喚醒內核(WFE),喚醒事件可以在外設的控制寄存器使能一個中斷,但不在NVIC中使能,同時在M4的FPU系統(tǒng)控制寄存器中使能SEVONPEND位,當CPU從內核WFE中恢復后,取藥清楚相應外設的中斷刮起位和外設NVIC中斷通道掛起位;或者配置一個外部或內部EXTI線為事件模式,當CPU從WFE恢復后,因為對應時間的掛起為沒有被置位,不必清除相應外設的中斷掛起位或NVIC中斷通道掛起位。
要產生中斷必須先配置好并使能中斷線,根據(jù)需要的邊沿檢測設置兩個觸發(fā)寄存器,同時在中斷屏蔽寄存器相應位寫”1”允許中斷請求。當外部中斷線發(fā)生了期待的邊沿時,將產生一個中斷請求,對應掛起為被置”1”,在掛起寄存器對應位寫1將清除該中斷。如果需要產生事件,必須先配置好病史能事件線。根據(jù)需要的邊沿檢測通過設置兩個觸發(fā)寄存器,同時在事件屏蔽寄存器的相應位寫1允許事件請求,當事件線上發(fā)生了需要的邊沿時,將產生一個事件請求脈沖,對應掛起為不被置1。通過在軟件中斷/事件寄存器寫1,也可以通過軟件產生中斷/事件請求。
硬件中斷選擇配置
·配置 23 個中斷線的屏蔽位(EXTI_IMR)
·配置所選中斷線的觸發(fā)選擇位(EXTI_RTSR 和 EXTI_FTSR)
·配置對應到外部中斷控制器(EXTI)的 NVIC 中斷通道的使能和屏蔽位,使得 23 個中斷線中的請求可以被正確地響應。
硬件事件選擇配置
·配置 23 個事件線的屏蔽位(EXTI_EMR)
·配置事件線的觸發(fā)選擇位(EXTI_RTSR 和 EXTI_FTSR)
軟件中斷/事件選擇配置
·配置 23 個中斷/事件線屏蔽位(EXTI_IMR, EXTI_EMR)
·設置軟件中斷寄存器的請求位(EXTI_SWIER)
外部中斷/事件線路映像
·EXTI 線 0-15 線連接到各端口Pin的 0-15
·EXTI 線 16 連接到 PVD 輸出
·EXTI 線 17 連接到 RTC 鬧鐘事件
·EXTI 線 18 連接到 USB OTG FS Wakeup 事件
·EXTI 線 19 連接到 Ethernet Wakeup 事件
·EXTI 線 20 連接到 USB OTG HS (configured in FS) Wakeup 事件
·EXTI 線 21 連接到 RTC Tamper and TimeStamp 事件
·EXTI 線 22 連接到 RTC Wakeup 事件
STM32F4的EXTI庫
·通過函數(shù) GPIO_Init()配置相應 I/O 是輸入模式
·通過函數(shù) SYSCFG_EXTILineConfig()將 I/O 復用到中斷線
·通過函數(shù) EXTI_Init()選擇中斷模式(interrupt, event)和觸發(fā)方式(Rising, falling or both)
·通過函數(shù) NVIC_Init(),將中斷線映射到相應的 NVIC 中斷通道。
void EXTI_DeInit(void)初始化EXTI寄存器到默認的復位值
void EXTI_Init(EXTI_InitTypeDef*EXXTI_InitStruct)初始化配置EXTI
/* Configure EXTI Line0 */
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
在中斷線的選擇上要注意
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
通過上面的函數(shù)可以發(fā)現(xiàn),外部中斷 5-9 是在一個中斷服務服務程序,還有 10-15 也是這樣。我們就需要利用if條件語句在中斷五福程序中加以區(qū)分。
void EXTI_StructInit(EXTI_InitTypeDef*EXTI_InitStruct)用于EXTI結構成員初始化
void EXTI_GenerateSWInterrupt(unit32_t EXTI_Line)實現(xiàn)軟件方式的中斷觸發(fā)
FlagStatus EXTI_GetFlagStatus(unit32_t EXTI_Line)查詢外部中斷標志,判斷中斷是否發(fā)生
ITStatus EXTI_GetITStatus(unit32_t EXTI_Line)同上查詢外部中斷標志,判斷中斷是否發(fā)生
void EXTI_ClearFlag(unit32_t EXTI_Line)清除中斷標志,不清除會一直進入中斷
void EXTI_ClearITPendingBit(unit32_t EXTI_Line同上)清除中斷標志,不清除會一直進入中斷





