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);