stm32 中斷向量表 NVIC_SetVectorTable() 應用
如果是普通的 flash 中只有一個(gè)程序,一般不需要設置這個(gè)。
顧名思義,這個(gè)表存放的是中斷服務(wù)函數的入口地址,當發(fā)生中斷時(shí),
CPU來(lái)這個(gè)表中查詢(xún),以此獲取中斷函數的入口地址。
在stm32 的啟動(dòng)文件中,設置完成堆棧,就來(lái)設置 中斷向量表,

定義只讀數據段,實(shí)際上是在CODE區(假設STM32從FLASH啟動(dòng),則此中斷向量表起始地址即為0x8000000)
如果改變了程序的起始地址,這種就是IAP的情況了,像這個(gè)樣子

那么這個(gè)時(shí)候就需要重新設置中斷向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00010000);//重新配置中斷向量表
配合地址的改變,這樣程序運行的時(shí)候才能找到中斷服務(wù)函數的入口地址,正常執行。
附件:
對中斷向量表更深入的解釋

顯然,200039c0就是棧頂地址,而08006F21就是reset_handler地址!
stm32 小端模式,高字節在高位,低字節在低位,所以這個(gè)要反過(guò)來(lái)看。
評論