一、三種BOOT模式介紹
所謂啟動,一般來說就是指我們下好程序后,重啟芯片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。用戶可以通過設置BOOT1和BOOT0引腳的狀態(tài),來選擇在復位后的啟動模式。
Main Flash memory
是STM32內(nèi)置的Flash,一般我們使用JTAG或者SWD模式下載程序時,就是下載到這個里面,重啟后也直接從這啟動程序。
System memory
從系統(tǒng)存儲器啟動,這種模式啟動的程序功能是由廠家設置的。一般來說,這種啟動方式用的比較少。系統(tǒng)存儲器是芯片內(nèi)部一塊特定的區(qū)域,STM32在出廠時,由ST在這個區(qū)域內(nèi)部預置了一段BootLoader, 也就是我們常說的ISP程序, 這是一塊ROM,
出廠后無法修改。一般來說,我們選用這種啟動模式時,是為了從串口下載程序,因為在廠家提供的BootLoader中,提供了串口下載程序的固件,可以通過這個BootLoader將程序下載到系統(tǒng)的Flash中。但是這個下載方式需要以下步驟:
Step1:將BOOT0設置為1,BOOT1設置為0,然后按下復位鍵,這樣才能從系統(tǒng)存儲器啟動BootLoader
Step2:最后在BootLoader的幫助下,通過串口下載程序到Flash中
Step3:程序下載完成后,又有需要將BOOT0設置為GND,手動復位,這樣,STM32才可以從Flash中啟動可以看到, 利用串口下載程序還是比較的麻煩, 需要跳帽跳來跳去的,非常的不注重用戶體驗。
Embedded Memory
內(nèi)置SRAM,既然是SRAM,自然也就沒有程序存儲的能力了,這個模式一般用于程序調(diào)試。假如我只修改了代碼中一個小小的地方,然后就需要重新擦除整個Flash,比較的費時,可以考慮從這個模式啟動代碼(也就是STM32的內(nèi)存中),用于快速的程序調(diào)試,等程序調(diào)試完成后,在將程序下載到SRAM中。
二、開發(fā)BOOT模式選擇。
1、通常使用程序代碼存儲在主閃存存儲器,配置方式:BOOT0=0,BOOT1=X;
2、Flash鎖死解決辦法:
開發(fā)調(diào)試過程中,由于某種原因導致內(nèi)部Flash鎖死,無法連接SWD以及Jtag調(diào)試,無法讀到設備,可以通過修改BOOT模式重新刷寫代碼。
修改為BOOT0=1,BOOT1=0即可從系統(tǒng)存儲器啟動,ST出廠時自帶Bootloader程序,SWD以及JTAG調(diào)試接口都是專用的。重新燒寫程序后,可將BOOT模式重新更換到BOOT0=0,BOOT1=X即可正常使用。
STM32 BOOT 引腳配置的說明
http://blog.csdn.net/chow288/article/details/6676890
STM32三種啟動模式對應的存儲介質均是芯片內(nèi)置的,它們是:
用戶閃存:BOOT1=xBOOT0=0芯片內(nèi)置的Flash。
SRAM:BOOT1=1BOOT0=1芯片內(nèi)置的RAM 區(qū),就是內(nèi)存啦。
系統(tǒng)存儲器:BOOT1=0BOOT0=1芯片內(nèi)部一塊特定的區(qū)域,芯片出廠時在這個區(qū)域預置了一段Bootloader,就是通常說的ISP程序。這個區(qū)域的內(nèi)容在芯片出廠后沒有人能夠修改或擦除,即它是一個ROM 區(qū)。
在每個STM32的芯片上都有兩個管腳BOOT0和BOOT1,這兩個管腳在芯片復位時的電平狀態(tài)決定了芯片復位后從哪個區(qū)域開始執(zhí)行程序,見下表:
BOOT1=xBOOT0=0從用戶閃存啟動,這是正常的工作模式。
BOOT1=0BOOT0=1從系統(tǒng)存儲器啟動,這種模式啟動的程序功能由廠家設置。
BOOT1=1BOOT0=1從內(nèi)置SRAM 啟動,這種模式可以用于調(diào)試。
要注意的是,一般不使用內(nèi)置SRAM 啟動(BOOT1=1 BOOT0=1),因為SRAM 掉電后數(shù)據(jù)就丟失。多數(shù)情況下SRAM 只是在調(diào)試時使用,也可以做其他一些用途。如做故障的局部診斷,寫一段小程序加載到SRAM 中診斷板上的其他電路,或用此方法讀寫板上的Flash 或EEPROM 等。還可以通過這種方法解除內(nèi)部Flash 的讀寫保護,當然解除讀寫保護的同時Flash 的內(nèi)容也被自動清除,以防止惡意的軟件拷貝。
一般BOOT0 和BOOT1 跳線都跳到0(GND)。只是在ISP下載的情況下,BOOT0=1,BOOT1=0 ,下載完成后,把BOOT0 的跳線接回0,也即BOOT0=0,BOOT1=0 。
對于一般的應用來說,直接把BOOT0 和BOOT1 引腳接地即可,不用設置跳線,使用IAR 調(diào)試程序時可以選擇RAM 調(diào)試還是Flash 調(diào)試,與BOOT0 和BOOT1 的配置無關。