STM32关于BOOT0和BOOT1设置,去掉Debug后完成硬件独立运行。
STM32三種啟動模式對應的存儲介質均是芯片內置的,它們是:
1)用戶閃存 = 芯片內置的 Flash。
2)SRAM = 芯片內置的 RAM區,就是內存啦。
3)系統存儲器= 芯片內部一塊特定的區域,芯片出廠時在這個區域預置了一段 Bootloader,就是通常說的 ISP程序。這個區域的內容在芯片出廠后沒有人能夠修改或擦除,即它是一個 ROM區。
BOOT1=x BOOT0=0 從用戶閃存啟動,這是正常的工作模式。
BOOT1=0 BOOT0=1 從系統存儲器啟動,這種模式啟動的程 序功能由廠家設置。
BOOT1=1 BOOT0=1 從內置 SRAM啟動,這種模式可以用于調試。
要注意的是,一般不使用內置 SRAM 啟動(BOOT1=1?BOOT0=1),因為SRAM掉電后數據就丟失。多數情況下 SRAM只是在調試時使用,也可以做其他一些用途。如做故障的局部診斷,寫一段小程序加載到 SRAM中診斷板上的其他電路,或用此方法讀寫板上的 Flash 或 EEPROM 等。還可以通過這種方法解除內部Flash的讀寫保護,當然解除讀寫保護的同時 Flash的內容也被自動清除,以防止惡意的軟件拷貝。一般 BOOT0和 BOOT1跳線都跳到 0(地)。只是在 ISP下載的情況下,BOOT0=1,BOOT1=0 ,下載完成后,把BOOT0的跳線接回0,也即BOOT0=0,BOOT1=0 。
插曲:筆者曾經做過一個項目,拿到一塊別人的板子和程序來修改,后來做了塊板子,燒錄程序后發現:燒錄后通過燒錄工具的“燒錄后運行”選項可以正常跑起來,但一旦使程序從FLASH開始運行,則跑不了了。后來發現別人板子上的MCU是燒錄過boot的,而自己做的板子是沒有燒錄boot的,前者程序從0x8003000開始運行,后者程序實際從0x8000000開始運行,把0x8003000處開始運行的程序燒到0x8000000的板子上的結果就是:復位向量地址不正確,導致芯片無法啟動,因為0x8003000的程序把中斷向量表搬到了0x8003000處。
總結
以上是生活随笔為你收集整理的STM32关于BOOT0和BOOT1设置,去掉Debug后完成硬件独立运行。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32(Cortex-M3)启动过程
- 下一篇: STM32常用数据类型 u8、u16、u