以將中斷向量表偏移位址改到0x8005000為例
第一種方式: 設定system_stm32f1xx.c檔案 #definevect_tab_offset 0x5000
在void systeminit (void)函式中通過「scb->vtor =flash_base | vect_tab_offset」命令實現位址偏移
第二種方式:運用庫函式時,可以在main()函式開頭,加上
nvic_setvectortable(nvic_vecttab_flash,0x5000);__asm("cpsie i"); 命令實現位址偏移
nvic_vecttab_flash 和 flash_base 都為 0x08000000
要實現這個功能,還需要在mdk的option->target 配置irom1為0x8005000,如圖
STM32中斷向量表的偏移量設定方法
講解中斷偏移之前先看一下程式的啟動流程 的內部快閃儲存器 flash 位址起始於 0x08000000 一般情況下,程式檔案就從此 位址開始寫入。此外 stm32f4 是基於 cortex m4 核心的微控制器,其內部通過一張 中斷向 量表 來響應中斷,程式啟動後,將首先從 中斷向量表 取出復位中斷...
STM32 中斷向量表的位置 重定向
lanmanck原創 這篇文章已經說了stm32的啟動過程 我們也知道怎麼跳到main函式了,那麼,中斷發生後,又是怎麼跑到中斷入口位址的呢?從stm32f10x.s可以看到,已經定義好了一大堆的中斷響應函式,這就是中斷向量表,標號 vectors,表示中斷向量表入口位址,例如 area reset...
STM32中斷向量表的位置,重定向
lanmanck原創 我們也知道怎麼跳到main函式了,那麼,中斷發生後,又是怎麼跑到中斷入口位址的呢?area reset,data,readonly 定義唯讀資料段,實際上是在code區 假設stm32從flash啟動,則此中斷向量表起始位址即為0x8000000 export vectors ...