STM32是如何進入中斷服務函數xxx_IRQHandler的


今天在看stm32的中斷,一時間不理解stm32主函數是如何進入中斷函數的,按C編程的理解,會有個特定的入口之類的,但是看demo過程中沒有發現入口。

 

以串口中斷服務函數void USART1_IRQHandler(void) 為例,首先用到串口中斷,需要先設定串口中斷初始化以及串口初始化,另外void USART1_IRQHandler(void) 中斷服務函數也應該寫好。


發現在stm32的啟動文件startup_stm32f10x_md.s中寫到 
DCD USART1_IRQHandler 
其中DCD是一條數據定義偽指令,用於分配一片連續的字存儲單元並用指定的數據初始化。 
 
庫里定義 #define USART1 ((USART_TypeDef *) USART1_BASE) 
同時 #define USART1_BASE (APB2PERIPH_BASE + 0x3800)  

當配置好USART1的控制寄存器中斷使能時,當發生中斷(異常)時,該異常被Cortex-M3內核接受,對應的異常Handler就會執行。而這個響應過程都是硬件來完成的,當然為了決定Handler的入口地址,Cortex-M3使用了“向量表查表機制”。startup_stm32f10x_md.s啟動文件已經為USART1_IRQHandler賦予了該地址。所以在異常發生后,CPU進入異常模式,同時程序計數器PC自動指向異常入口地址,也就是USART1_IRQHandler,進而執行中斷服務函數中的應用。執行完之后再回到主函數繼續執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM