在 STM32 微控制器的中斷系統(tǒng)中,外部中斷 / 事件控制器(EXTI)與嵌套向量中斷控制器(NVIC)是支撐中斷響應(yīng)與調(diào)度的核心組件,二者分工明確又緊密協(xié)同 ——EXTI 負責感知外部信號觸發(fā)并向 NVIC 傳遞中斷請求,NVIC 則承擔中斷優(yōu)先級管理與 CPU 中斷響應(yīng)的調(diào)度,共同構(gòu)建起 STM32 高效、靈活的中斷處理體系。無論是外部設(shè)備的狀態(tài)變化響應(yīng)(如按鍵觸發(fā)、傳感器數(shù)據(jù)就緒),還是內(nèi)部外設(shè)的事件通知(如定時器溢出、DMA 傳輸完成),都依賴這兩個組件的協(xié)同工作,其底層邏輯的合理性直接決定了 STM32 系統(tǒng)的實時性與可靠性,是嵌入式開發(fā)者必須深入掌握的核心技術(shù)。
EXTI 作為 STM32 中斷系統(tǒng)的 “信號感知前端”,其核心功能是檢測外部引腳或內(nèi)部外設(shè)的特定事件(如電平變化、脈沖信號),并將符合條件的事件轉(zhuǎn)換為中斷請求信號傳遞給 NVIC。從硬件架構(gòu)來看,EXTI 主要由事件請求線路、邊沿檢測電路、中斷屏蔽寄存器、掛起寄存器等模塊組成,支持多達 23 個中斷 / 事件請求通道,涵蓋 16 個外部 GPIO 引腳對應(yīng)的通道(EXTI0~EXTI15)以及 7 個內(nèi)部外設(shè)事件通道(如 LVD、RTC 鬧鐘、USB 喚醒等)。對于外部 GPIO 引腳觸發(fā)的中斷,EXTI 通過 GPIO 與 EXTI 的映射關(guān)系實現(xiàn)信號接入 ——STM32 的每個 GPIO 引腳可通過 SYSCFG_EXTICR 寄存器配置映射到對應(yīng)的 EXTI 通道,例如 PA0、PB0、PC0 等引腳均可映射到 EXTI0 通道,但同一時刻僅能有一個 GPIO 引腳與該通道綁定,避免信號沖突。邊沿檢測電路是 EXTI 的核心檢測單元,支持上升沿觸發(fā)、下降沿觸發(fā)或雙邊沿觸發(fā)三種模式,開發(fā)者可通過 EXTI_RTSR(上升沿觸發(fā)選擇寄存器)和 EXTI_FTSR(下降沿觸發(fā)選擇寄存器)靈活配置,例如在按鍵檢測場景中,為避免機械抖動導致的誤觸發(fā),可配置為雙邊沿觸發(fā)并配合軟件延時消抖邏輯。當 EXTI 檢測到符合配置的觸發(fā)信號后,會在掛起寄存器(EXTI_PR)中對應(yīng)位置 1 標記中斷請求,若該通道未被中斷屏蔽寄存器(EXTI_IMR)屏蔽,則中斷請求會被發(fā)送至 NVIC 等待響應(yīng)。此外,EXTI 還支持事件模式,與中斷模式的區(qū)別在于事件模式僅觸發(fā)內(nèi)部硬件操作(如啟動 ADC 采樣、激活 DMA 傳輸),不會向 NVIC 發(fā)送中斷請求,無需 CPU 干預(yù),適用于需要硬件級快速響應(yīng)的場景。
NVIC 作為 STM32 中斷系統(tǒng)的 “調(diào)度核心”,遵循 ARM Cortex-M 內(nèi)核的中斷控制架構(gòu),負責接收來自 EXTI 及其他外設(shè)的中斷請求,根據(jù)預(yù)設(shè)的優(yōu)先級規(guī)則決定中斷的響應(yīng)順序,并管理 CPU 的中斷進入與退出。其核心特性體現(xiàn)在優(yōu)先級管理與中斷嵌套機制上 ——NVIC 支持多達 256 個中斷通道(實際可用數(shù)量取決于具體 STM32 型號,如 STM32F1 系列支持 60 個可屏蔽中斷),每個中斷通道都可配置優(yōu)先級,優(yōu)先級由搶占優(yōu)先級和響應(yīng)優(yōu)先級組成,通過 NVIC_IPRx 寄存器設(shè)置。搶占優(yōu)先級決定了中斷的搶占能力,高搶占優(yōu)先級的中斷可在低搶占優(yōu)先級中斷的執(zhí)行過程中強制打斷,實現(xiàn)中斷嵌套;響應(yīng)優(yōu)先級則用于當多個中斷具有相同搶占優(yōu)先級時,決定中斷的響應(yīng)順序,響應(yīng)優(yōu)先級數(shù)值越小,優(yōu)先級越高。例如,若串口接收中斷的搶占優(yōu)先級為 1,定時器溢出中斷的搶占優(yōu)先級為 2,那么當定時器中斷正在執(zhí)行時,串口接收中斷可搶占 CPU 資源優(yōu)先執(zhí)行;若兩者搶占優(yōu)先級相同,響應(yīng)優(yōu)先級數(shù)值更小的中斷會優(yōu)先被響應(yīng)。NVIC 還提供中斷使能 / 失能控制、中斷掛起 / 解掛等功能,開發(fā)者可通過 NVIC_ISERx(中斷使能寄存器)和 NVIC_ICERx(中斷失能寄存器)控制特定中斷的開啟與關(guān)閉,通過 NVIC_ISPRx(中斷掛起寄存器)和 NVIC_ICPRx(中斷解掛寄存器)手動掛起或清除中斷請求,適用于復(fù)雜系統(tǒng)中中斷資源的動態(tài)管理。當 NVIC 決定響應(yīng)某個中斷請求時,會暫停當前正在執(zhí)行的程序,保存程序計數(shù)器、寄存器等上下文信息,然后跳轉(zhuǎn)到該中斷對應(yīng)的中斷服務(wù)函數(shù)(ISR)執(zhí)行,執(zhí)行完成后恢復(fù)上下文并返回原程序,整個過程由硬件自動完成,確保中斷響應(yīng)的高效性。