stm32 中斷向量表 NVIC_SetVectorTable() 應(yīng)用
如果是普通的 flash 中只有一個程序,一般不需要設(shè)置這個。
顧名思義,這個表存放的是中斷服務(wù)函數(shù)的入口地址,當(dāng)發(fā)生中斷時,
CPU來這個表中查詢,以此獲取中斷函數(shù)的入口地址。
在stm32 的啟動文件中,設(shè)置完成堆棧,就來設(shè)置 中斷向量表,
AREA RESET, DATA, READONLY ;
定義只讀數(shù)據(jù)段,實際上是在CODE區(qū)(假設(shè)STM32從FLASH啟動,則此中斷向量表起始地址即為0x8000000)
如果改變了程序的起始地址,這種就是IAP的情況了,像這個樣子
那么這個時候就需要重新設(shè)置中斷向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00010000);//重新配置中斷向量表
配合地址的改變,這樣程序運行的時候才能找到中斷服務(wù)函數(shù)的入口地址,正常執(zhí)行。
附件:
對中斷向量表更深入的解釋
顯然,200039c0就是棧頂?shù)刂罚?8006F21就是reset_handler地址!
stm32 小端模式,高字節(jié)在高位,低字節(jié)在低位,所以這個要反過來看。
評論