stm32 boot0 boot1的啟動方式


 

 

STM32三種啟動模式對應的存儲介質均是芯片內置的,它們是:
1)用戶閃存 = 芯片內置的Flash。
2)SRAM = 芯片內置的RAM區,就是內存啦。
3)系統存儲器 = 芯片內部一塊特定的區域,芯片出廠時在這個區域預置了一段Bootloader,就是通常說的ISP程序。這個區
域的內容在芯片出廠后沒有人能夠修改或擦除,即它是一個ROM區。
 
在每個STM32的芯片上都有兩個管腳BOOT0和BOOT1,這兩個管腳在芯片復位時的電平狀態決定了芯片復位后從哪個區域開始執
行程序,見下表:
BOOT1=x   BOOT0=0   從用戶閃存啟動,這是正常的工作模式。
BOOT1=0   BOOT0=1   從系統存儲器啟動,這種模式啟動的程序功能由廠家設置。
BOOT1=1   BOOT0=1   從內置SRAM啟動,這種模式可以用於調試。

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的內存中),用於快速的程序調試,等程序調試完成后,再將程序下載到Flash中。

 
        要注意的是,一般不使用內置SRAM啟動(BOOT1=1 BOOT0=1),因為SRAM掉電后數據就丟失。多數情況下SRAM只是在調試時使用,也可以做其他一些用途。如做故障的局部診斷,寫一段小程序加載到SRAM中診斷板上的其他電路,或用此方法讀寫板上的Flash或EEPROM等。還可以通過這種方法解除內部Flash的讀寫保護,當然解除讀寫保護的同時Flash的內容也被自動清除,以防止惡意的軟件拷貝。
一般BOOT0和BOOT1跳線都跳到0(地)

STM32 啟動過程:

   STM32的內部閃存(flash)地址起始於0x08000000,一般情況下,程序文件就從地址開始寫入,此外STM32是基於Cortex-M3內核的微控制器,其內部通過一張

中斷向量表來響應,此外,STM32是基於Cortex-M3內核的位控制器,其內部通過一張“中斷向量表”來響應中斷,程序啟動后,首先從"中斷向量表"取出復位中斷向量執行

復位中斷程序完成啟動,而這張"中斷向量表"的起始地址是0x8000004,當中斷來臨,STM32的內部硬件機制會自動將PC指針定位到中斷向量表處,並根據中斷源取出對應的中斷向量執行中斷服務程序。

    在圖53.1.1,STM32 在復位后,先從0x08000004地址取出復位中斷向量的地址,並跳轉到復位中斷服務程序,如題彪了(1)所示,在復位中斷執行完后,會跳轉到我們的

Main函數,如圖(2)所示,而我們的main一般都是一個死循環,在main函數執行過程中,如果收到中斷請求,此時STM32強制將PC指針指回中斷向量表處,如圖3所示,

然后,根據中斷源進入相應的中斷服務程序,如圖標號4所示,在執行完中斷服務以后,程序再次返回main函數執行,如圖標號5所示

     


免責聲明!

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



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