1. 程式人生 > >STM32(Cortex-M3)啟動過程

STM32(Cortex-M3)啟動過程

啟動時從絕對地址0x0800 0000開始執行復位中斷程式,即固定了復位後的起始地址,但中斷向量表的位置是可變的。 

Cortex-M3核心規定中斷向量表中第一個32位資料內容為棧頂地址,第二個32位資料內容則是復位中斷向量的入口地址。

這樣CPU復位後會自動從中斷向量表中第二個32位資料中取出復位中斷向量的入口地址,PC就跳轉到中斷服務程式。這也就是為什麼除錯的時候程式會直接跳到0x08000144(中斷向量表中第二個32位資料為0x08000145),而不是停在0x08000000。

Cortex-M3的中斷向量表的結構是固定的,而位置的地址是可變的。 

Cortex-M3的初始中斷向量表有三個位置,通過BOOT引腳進行啟動設定:

  1. BOOT1=x BOOT0=0 從使用者快閃記憶體啟動,這是正常的工作模式。中斷向量表定位於FLASH區,復位後PC=0x0800 0000.  
  2. BOOT1=0 BOOT0=1 從系統儲存器啟動(相當於廠家在儲存器中固化了BOOTLOADER),這種模式啟動的程式功能由廠家設定。 
  3. BOOT1=1 BOOT0=1從內建SRAM啟動,這種模式可以用於除錯。這種模式下,中斷向量表位於SRAM區,起始地址為0x2000 0000.復位為PC=0x2000 0000.

當STM32復位完成後,可通過設定VECTOR_TABLE,將中斷向量表放置在任何地方:

   如若使用的是標準庫,可通過:NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);設定中斷向量表放置在RAM起始地址;

                            可通過:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);設定中斷向量表放置在FLASH起始地址;

                                    說明:引數1:基地址;引數2:偏移地址