STM32向量表-串口1中斷

DCD指令:用於分配一片連續的字存儲單元(32bit),並將表達式的值初始化給該字存儲單元,類似於C中定義數組並初始化。比如: DCD 0 的意思是:分配一個字存儲單元,並將該單元初始化爲0。

EXPORT指令:僞指令,用於在程序中聲明一個全局標號,該標號可以在其他文件中使用

一、STM32的啓動文件分析

https://blog.csdn.net/weicao1990/article/details/46914013

1.STM32啓動文件中可以看到如下代碼

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     SVC_Handler                ; SVCall Handler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
                DCD     PendSV_Handler             ; PendSV Handler
                DCD     SysTick_Handler            ; SysTick Handler
                ......

這一段是分配STM32的中斷向量表。從DCD後面表達式的名稱可以看出第一個字存儲單元分配給了棧頂,其值爲__initial_sp。第二個字分配給了復位地址,其值爲Reset_Handler,後面接着分配給其他異常或中斷。

這裏的Reset_Handler,NMIException等,其實是一個地址值,也就是中斷處理函數的入口地址。在函數實現時,由編譯器分配一個地址值

 

爲什麼是這樣的分配順序?

問題的答案好找,我們參考《STM32參考手冊》:

可以看到,啓動文件中的向量表的分配的順序是按照固定的規則來的。

 

2.自定義串口1中斷服務函數

三部配置之後,若產生串口1中斷,則會進入此函數void feng_usart1_handler(void);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章