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