STM32啟動BOOT0 BOOT1設置方法


不同的下載方式對應STM32啟動方式也不同,如下圖是STM32三種啟動方式:

BOOT0 BOOT1 啟動模式
0 X User Flash memory(從用戶閃存存儲器啟動)
1 0 System memory(從系統存儲器啟動)
1 1 Embedded SRAM(從內嵌SRAM啟動)

第一種啟動方式是最常用的用戶FLASH啟動,正常工作就在這種模式下,STM32的FLASH可以擦出10萬次,所以不用擔心芯片哪天會被擦爆!

第二種啟動方式是系統存儲器啟動方式,即我們常說的串口下載方式(ISP),不建議使用這種,速度比較慢。STM32 中自帶的BootLoader就是在這種啟動方式中,如果出現程序硬件錯誤的話可以切換BOOT0/1到該模式下重新燒寫Flash即可恢復正常。

第三種啟動方式是STM32內嵌的SRAM啟動。該模式用於調試。

(1) Boot0設置為0后,代碼將從主Flash當中啟動,就我們目前所編程的地方啟動,只要程序正常,上電之后都是可以正常工作。這一般作為ISP 程序下載仿真燒寫。一般正常批量生產的時候,我們也是推薦客戶默認按照這樣的方式去操作,上電之后,機器會自動運行。 

(2) Boot0設置為1,Boot1設置為0,代碼將從ROM區啟動,這上電啟動都會運行Bootloader,在此過程中可以實現IAP程序更新,這一般是通過USART 進行更新,此時如果USART或者是SPI端口沒有接收到數據信號,那么MCU將會一直程序等待下去,不會自動跳到FLash主代碼區。所以一般這作為個體產品 

想實現代碼更新的工作。這需要你那邊是否要考慮以后產品升級,如若升級,可以在Boot0引腳接入一個拔碼開關實現對Boot0電平的控制,從而可以實現 IAP更新功能。 

(3)Boot0以及Boot1都是為1的時候,那么此時程序將從RAM當中啟動,程序會直接下載到RAM當中,這一般作為調試來用,因為有的時候代碼不是很大,由於 RAM下載代碼速度很快,對於一些調試而言是非常有好處的,斷電不會保存數據,這一點需要注意。

在使用開發板時不小心下載了個有問題的程序,然后就悲劇了。無法往芯片中燒寫程序了。每次想下載程序都會彈出如下的兩個錯誤對話框:

J-Link和STM32 芯片都不大可能就這么壞掉了。多半是燒寫進去的軟件有些問題,占用了相應的IO 管腿,導致無法利用J-Link與之通訊。那就想辦法不讓這個錯誤的程序運行了。例如下述代碼如果燒寫進去的話就會造成J-Link下次不能正常連接:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
上述代碼表示取消JTAG引腳功能,開始SWD引腳功能。
STM32 中是自帶了BootLoader的,切換進BootLoader 中就可以了。具體的方法就是通過BOOT1、BOOT0兩個跳線來選擇啟動模式。修改跳線將啟動模式切換為上述的第二種方式:BOOT0=1,BOOT1=0。
斷電,改跳線,重新上電,進入第二種方式:BOOT0=1,BOOT1=0,即STM32的BootLoader 模式。此時J-Link可以正常工作了,用J-Link 下載新的程序,下載成功。再斷電,把跳線改回來第一種啟動方式(BOOT0=0,BOOT1=0),重新上電,一切正常,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM