STM32 BOOT设置
三種BOOT模式
Main Flash memory
是STM32內(nèi)置的Flash,一般我們使用JTAG或者SWD模式下載程序時(shí),就是下載到這個(gè)里面,重啟后也直接從這啟動(dòng)程序。
System memory
從系統(tǒng)存儲(chǔ)器啟動(dòng),這種模式啟動(dòng)的程序功能是由廠家設(shè)置的。一般來(lái)說(shuō),這種啟動(dòng)方式用的比較少。系統(tǒng)存儲(chǔ)器是芯片內(nèi)部一塊特定的區(qū)域,STM32在出廠時(shí),由ST在這個(gè)區(qū)域內(nèi)部預(yù)置了一段BootLoader, 也就是我們常說(shuō)的ISP程序, 這是一塊ROM,
出廠后無(wú)法修改。一般來(lái)說(shuō),我們選用這種啟動(dòng)模式時(shí),是為了從串口下載程序,因?yàn)樵趶S家提供的BootLoader中,提供了串口下載程序的固件,可以通過(guò)這個(gè)BootLoader將程序下載到系統(tǒng)的Flash中。但是這個(gè)下載方式需要以下步驟:
Step1:將BOOT0設(shè)置為1,BOOT1設(shè)置為0,然后按下復(fù)位鍵,這樣才能從系統(tǒng)存儲(chǔ)器啟動(dòng)BootLoader
Step2:最后在BootLoader的幫助下,通過(guò)串口下載程序到Flash中
Step3:程序下載完成后,又有需要將BOOT0設(shè)置為GND,手動(dòng)復(fù)位,這樣,STM32才可以從Flash中啟動(dòng)可以看到, 利用串口下載程序還是比較的麻煩, 需要跳帽跳來(lái)跳去的,非常的不注重用戶體驗(yàn)。
跳線帽插在BOOT0為高電平上,跳線之前要斷電,板子不能上電,CH340G也不能插到電腦上,然后插到電腦上就可以下載程序了
對(duì)的,就是要讓板從ISP啟動(dòng),所以跳線前不能上電,然后把CH340G插到電腦給板子供電,這樣處理后板子在下程序前是不運(yùn)行狀態(tài),是系統(tǒng)默認(rèn)狀態(tài),這樣PA9,PA10就是工作在串口狀態(tài)了,我是這樣認(rèn)為的。這上面就一個(gè)跳線帽,就這樣插上就可以,下完程序要拿下來(lái),不然以后上電會(huì)一直處于ISP狀態(tài)
Embedded Memory
內(nèi)置SRAM,既然是SRAM,自然也就沒(méi)有程序存儲(chǔ)的能力了,這個(gè)模式一般用于程序調(diào)試。假如我只修改了代碼中一個(gè)小小的地方,然后就需要重新擦除整個(gè)Flash,比較的費(fèi)時(shí),可以考慮從這個(gè)模式啟動(dòng)代碼(也就是STM32的內(nèi)存中),用于快速的程序調(diào)試,等程序調(diào)試完成后,在將程序下載到SRAM中。
二、開(kāi)發(fā)BOOT模式選擇。
1、通常使用程序代碼存儲(chǔ)在主閃存存儲(chǔ)器,配置方式:BOOT0=0,BOOT1=X;
2、Flash鎖死解決辦法:
開(kāi)發(fā)調(diào)試過(guò)程中,由于某種原因?qū)е聝?nèi)部Flash鎖死,無(wú)法連接SWD以及Jtag調(diào)試,無(wú)法讀到設(shè)備,可以通過(guò)修改BOOT模式重新刷寫代碼。
修改為BOOT0=1,BOOT1=0即可從系統(tǒng)存儲(chǔ)器啟動(dòng),ST出廠時(shí)自帶Bootloader程序,SWD以及JTAG調(diào)試接口都是專用的。重新燒寫程序后,可將BOOT模式重新更換到BOOT0=0,BOOT1=X即可正常使用
STM32三種啟動(dòng)模式對(duì)應(yīng)的存儲(chǔ)介質(zhì)均是芯片內(nèi)置的,它們是:
1. 用戶閃存=芯片內(nèi)置的Flash。
2. SRAM=芯片內(nèi)置的RAM區(qū),就是內(nèi)存啦。
3. 系統(tǒng)存儲(chǔ)器=芯片內(nèi)部一塊特定的區(qū)域,芯片出廠時(shí)在這個(gè)區(qū)域預(yù)置了一段Bootloader,就是通常說(shuō)的ISP程序。這個(gè)區(qū)域的內(nèi)容在芯片出廠后沒(méi)有人能夠修改或擦除,即它是一個(gè)ROROMM區(qū)。
在每個(gè)STM32的芯片上都有兩個(gè)管腳BOOT0和BOOT1,這兩個(gè)管腳在芯片復(fù)位時(shí)的電平狀態(tài)決定了芯片復(fù)位后從哪個(gè)區(qū)域開(kāi)始執(zhí)行程序,見(jiàn)下:
BOOT1=xBOOT0=0從用戶閃存啟動(dòng),這是正常的工作模式。
BOOT1=0BOOT0=1從系統(tǒng)存儲(chǔ)器啟動(dòng),這種模式啟動(dòng)的程 序功能由廠家設(shè)置。
BOOT1=1BOOT0=1從內(nèi)置SRAM啟動(dòng),這種模式可以用于調(diào)試。
要注意的是,一般不使用內(nèi)置SRAM啟動(dòng)(BOOT1=1 BOOT0=1),因?yàn)镾RAM掉電后數(shù)據(jù)就丟失。多數(shù)情況下SRAM只是在調(diào)試時(shí)使用,也可以做其他一些用途。如做故障的局部診斷,寫一段小程序加載到SRAM中診斷板上的其他電路,或用此方法讀寫板上的Flash或EEPROM等。還可以通過(guò)這種方法解除內(nèi)部Flash的讀寫保護(hù),當(dāng)然解除讀寫保護(hù)的同時(shí)Flash的內(nèi)容也被自動(dòng)清除,以防止惡意的軟件拷貝。
一般BOOT0和BOOT1跳線都跳到0(地)。只是在ISP下載的情況下,BOOT0=1,BOOT1=0,下載完成后,把BOOT0的跳線接回0,也 即BOOT0=0,BOOT1=0。
摘自CSDN
總結(jié)
以上是生活随笔為你收集整理的STM32 BOOT设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: web工作流管理系统开发之十三 流程与电
- 下一篇: php环境被80端口占用无法使用什么办