一、什麼是中斷向量表
中斷向量表(Interrupt Vector Table)是一張記錄系統所有中斷服務例程(ISR)地址的表。當一個中斷被觸發時,處理器根據中斷號找到對應的中斷處理函數地址,進而跳轉執行該函數。
二、STM32 中斷向量表概述
與其他微控制器(MCU)相似,STM32的中斷向量表也是處於內存中的一段代碼區域。STM32的中斷向量表的起始地址是 0x0800 0000,且固定佔用一段連續的內存空間。中斷向量表不僅包含STM32系統定義的中斷服務例程地址,也存儲了其他擴展模塊(如外部中斷、定時器中斷等)的中斷服務例程地址。
在STM32中,其中斷向量表有兩種形式:基本向量表和擴展向量表。基本向量表包含STM32系統的內核中斷服務例程地址和系統存儲器管理服務例程地址等。若用戶需要新增的外部中斷服務函數則可以使用擴展向量表進行添加,擴展向量表中包含了所有其他的中斷向量。
三、STM32 的中斷向量表結構
STM32中斷向量表的文件在啟動文件中,命名方式通常是以“stm32f10x_iisr.c
”的形式出現,其中“iisr”意為“internal interrupt service routine”,即“內部中斷服務例程”。
下面是 STM32 中斷向量表的部分代碼:
/* STM32F10x Vector Table, for Keil uVision */ __attribute__ ((section(".isr_vectors"))) void (* const g_pfnVectors[])(void) = { (void (*)(void))((uint32_t)g_pulStack + sizeof(g_pulStack)), /* The ISR handlers */ Reset_Handler, NMI_Handler, HardFault_Handler, MemManage_Handler, BusFault_Handler, UsageFault_Handler, 0, 0, 0, 0, SVC_Handler, DebugMon_Handler, 0, PendSV_Handler, SysTick_Handler, /* External Interrupts */ WWDG_IRQHandler, // Window Watchdog PVD_IRQHandler, // PVD through EXTI Line detect TAMPER_IRQHandler, // Tamper Interrupt RTC_IRQHandler, // RTC global interrupt FLASH_IRQHandler, // FLASH global interrupt RCC_IRQHandler, // RCC global interrupt ....
以上代碼中,g_pfnVectors[]
數組中包含了STM32的所有中斷服務例程地址,比如WWDG_IRQHandler
,它是WWDG定時器的服務例程函數地址。
四、如何修改 STM32 中斷向量表
STM32中斷向量表的修改需要分為兩步:首先需要在程序中註冊用戶自定義的中斷服務例程,接着需要修改啟動文件中的中斷向量表。
以下是一個示例代碼:
/* * 建立一個供外部中斷處理使用的中斷向量表,裡面包含我們自己編寫的中斷處理函數地址。 * 注意:函數聲明要定義為__irq。 */ void EXTI3_IRQ(void) __irq { GPIOD->ODR ^= GPIO_Pin_5; // Toggle LED4 EXTI_ClearITPendingBit(EXTI_Line3); //清除Line3上的中斷標誌位 } int main(void) { //註冊 SYSTICK 的中斷服務函數 if (SysTick_Config(SystemCoreClock / 1000)) { /* Capture error */ while (1); } //使能外部中斷,初始化KEY0 EXTI_Key_Config(); //修改中斷向量表 SCB->VTOR = FLASH_BASE | 0x10000; //使用偏移地址的向量表,地址為0x08010000 }
五、STM32 中斷向量表的注意點
1. 中斷向量表的地址由啟動文件決定,一般不建議更改,否則需要重新編寫啟動文件;
2. 啟動文件一般只需要修改中斷向量表,其他內容不要輕易更改,否則會產生不可預知的錯誤;
3. 不同型號的STM32芯片可能中斷向量表存在差異,需要根據具體型號進行查找相應的啟動文件;
4. STM32中斷向量表的修改是一項高級技術,對底層硬件特性有深入了解。如沒有必要建議不要隨意修改。
六、總結
本文簡要介紹了 STM32 中斷向量表的相關知識,包括中斷向量表的概念、STM32中斷向量表的概述、結構、以及拓展中斷向量表的修改方法。對於微控制器的開發人員來說,掌握中斷向量表知識非常重要,能夠幫助開發者更有效地進行嵌入式系統開發。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/278974.html