STM32之——3種啓動方式學習

參考:函數

        https://blog.csdn.net/wwt18811707971/article/details/78678059.net

        

所謂啓動,通常來講就是指咱們下好程序後,重啓芯片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。用戶能夠經過設置BOOT1和BOOT0引腳的狀態,來選擇在復位後的啓動模式。調試

STM32上電或者復位後,代碼區始終從0x00000000開始,三種啓動模式其實就是將各自存儲空間的地址映射到0x00000000中。blog

(1)從Flash啓動,將主Flash地址0x08000000映射到0x00000000,這樣代碼啓動以後就至關於從0x08000000開始。接口

(2)從RAM啓動,將RAM地址0x20000000映射到0x00000000,這樣代碼啓動以後就至關於從0x20000000開始。內存

(3)從系統存儲器啓動。首先控制BOOT0 BOOT1管腳,復位後,STM32與上述兩種方式相似,從系統存儲器地址0x1FFF F000開始執行代碼。系統存儲器存儲的其實就是STM32自帶的bootloader代碼,在bootloader中提供了UART1的接口,經過此接口能夠將用戶所需的程序代碼下載到主Flash中,下載完畢後,此時程序代碼已經存儲在主Flash當中,這時切換啓動模式(從主Flash啓動),復位後所執行的就是剛剛下載到Flash中的代碼了。開發

STM32三種啓動模式對應的存儲介質均是芯片內置的,以下圖:用戶體驗

(1)用戶閃存 : 芯片內置的Flash。正常的工做模式。 
(2)SRAM: 芯片內置的RAM區,就是內存。能夠用於調試。 
(3)系統存儲器: 芯片內部一塊特定的區域,芯片出廠時在這個區域預置了一段Bootloader,就是一般說的ISP程序。這個區域的內容在芯片出廠後沒有人可以修改或擦除,即它是一個ROM區。啓動的程序功能由廠家設置。配置

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中。

開發BOOT模式選擇。

一、一般使用程序代碼存儲在主閃存存儲器,配置方式:BOOT0=0,BOOT1=X;兩個啓動引腳經過10K電阻接地。

                            

二、Flash鎖死解決辦法:

開發調試過程當中,因爲某種緣由致使內部Flash鎖死,沒法鏈接SWD以及Jtag調試,沒法讀到設備,能夠經過修改BOOT模式從新刷寫代碼。

修改成BOOT0=1,BOOT1=0便可從系統存儲器啓動,ST出廠時自帶Bootloader程序,SWD以及JTAG調試接口都是專用的。從新燒寫程序後,可將BOOT模式從新更換到BOOT0=0,BOOT1=X便可正常使用。

嵌入式系統的啓動還須要一段啓動代碼(bootloader),相似於啓動PC時的BIOS,通常用於完成微控制器的初始化工做和自檢。STM32的啓動代碼在startup_stm32f10x_xx.s(xx根據微控制器所帶的大、中、小容量存儲器分別爲hd、md、ld)中,其中的程序功能主要包括初始化堆棧、定義程序啓動地址、中斷向量表和中斷服務程序入口地址,以及系統復位啓動時,從啓動代碼跳轉到用戶main函數的入口地址。 ————————————————

相關文章
相關標籤/搜索