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