啟動模式,BOOT0和BOOT1詳解
在畫STM32的電路圖的時候,關於STM32的啟動方式糾結了一下,現有的參考設計都是在STM32的啟動選擇引腳BOOT0和BOOT1上使用了跳帽,用以人工選擇STM32的啟動方式,但是在實際應用中這種設計就顯得冗餘,所以這裡順帶研究了一下STM32的啟動方式。
STM32一共有三種啟動模式,在ST官網上下載的RM0008中,我找到了啟動相關的配置說明:
對應的中文翻譯如下:
所謂啟動,一般來說就是指我們下好程式後,重啟晶片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。使用者可以通過設定BOOT1和BOOT0引腳的狀態,來選擇在復位後的啟動模式。
- Main Flash memory
是STM32內建的Flash,一般我們使用JTAG或者SWD模式下載程式時,就是下載到這個裡面,重啟後也直接從這啟動程式。
- System memory
從系統儲存器啟動,這種模式啟動的程式功能是由廠家設定的。一般來說,這種啟動方式用的比較少。
系統儲存器是晶片內部一塊特定的區域,STM32在出廠時,由ST在這個區域內部預置了一段BootLoader,也就是我們常說的ISP程式,這是一塊ROM,出廠後無法修改。
一般來說,我們選用這種啟動模式時,是為了從串列埠下載程式,因為在廠家提供的BootLoader中,提供了串列埠下載程式的韌體,可以通過這個BootLoader將程式下載到系統的Flash中。但是這個下載方式需要以下步驟:
Step1:將BOOT0設定為1,BOOT1設定為0,然後按下復位鍵,這樣才能從系統儲存器啟動BootLoader
Step2:最後在BootLoader的幫助下,通過串列埠下載程式到Flash中
Step3:程式下載完成後,又有需要將BOOT0設定為GND,手動復位,這樣,STM32才可以從Flash中啟動
可以看到,利用串列埠下載程式還是比較的麻煩,需要跳帽跳來跳去的,非常的不注重使用者體驗。
- Embedded Memory
內建SRAM,既然是SRAM,自然也就沒有程式儲存的能力了,這個模式一般用於程式除錯。
假如我只修改了程式碼中一個小小的地方,然後就需要重新擦除整個Flash,比較的費時,可以考慮從這個模式啟動程式碼(也就是STM32的記憶體中),用於快速的程式除錯,等程式除錯完成後,在將程式下載到SRAM中。
綜上所述,在我的設計中,我將BOOT0和BOOT1通過一個100k的下拉電阻,直接接地。