1.boot程式
(2)關鍵**
(x & 0x2ffe0000 ) == 0x20000000 意思是說x是不是在0x20000000與0x2001ffff之間,即棧頂是不是在以0x20000000開始的128k
前面說了使用者**的首位址放的是堆疊指標,而堆疊應該指向ram,而ram的首位址是0x20000000,所以這句話用來判斷是不是已經有乙個正確的堆疊指標位址寫在了使用者**的首位址,進一步可以推測是不是有乙個正確的使用者**寫在了使用者**區,如果已經寫入了,就可以跳過去執行,如果沒有寫入,就不跳過去。這是demo程式的判斷邏輯,可以這樣用,也可以不這樣用。
(2)關鍵**
#define vect_tab_offset 0x3000 (修改地方) //
nvic_setvectortable(nvic_vecttab_flash, 0x3000); //中斷向量表對映
STM32啟動模式及API
boot1 x boot0 0 從使用者快閃儲存器啟動,這是正常的工作模式。boot1 0 boot0 1 從系統儲存器啟動,這種模式啟動的程式功能由廠家設定。用於串列埠isp boot1 1 boot0 1 從內建sram啟動,這種模式可以用於除錯。在晶元上電復位時,boot0和boot1兩個管腳...
STM32啟動模式及API
我們也可以在開發stm32時,在記憶體中除錯程式。經多次確認,boot0和boot1狀態與記憶體中除錯無直接聯絡 2.然後,我們需要在 中設定正確的中斷向量表位置。中斷向量表通常被放置在使用者程式的開始,所以flash中執行時,向量表位於0x08000000處,而當 被放置在sram中執行時,他的位...
STM32啟動模式
stm32三種啟動模式對應的儲存介質均是晶元內建的,它們是 1 使用者快閃儲存器 晶元內建的flash。2 sram 晶元內建的ram區,就是記憶體啦。3 系統儲存器 晶元內部一塊特定的區域,晶元出廠時在這個區域預置了一段bootloader,就是通常說的isp程式。這個區域的內容在晶元出廠後沒有人...