敢問路在何方,STM32邁出的第一步,卻註定了它非凡的一生

敢問路在何方,路在腳下。。。STM32啟動運行的過程就像人的一生。人生的第一步可以有很多選擇,而STM32運行的第一步卻已經被限制在了三種,沒錯,這三種就是它的啟動方式。


敢問路在何方,STM32邁出的第一步,卻註定了它非凡的一生

STM32如何選擇啟動方式

在瞭解STM32微處理的啟動方式這個問題之前,我們首先要弄清楚STM32微處理的存儲結構。我們以STM32L系列微處理中的一款為例,可以看到存儲器結構圖中從0x0000 0000到0Xffff ffff地址的分佈情況。而處理器的啟動只會從圖中三個箭頭標註的其中之一的地方進行啟動,這個三個地方分別是Flash system memory,Systerm memory和SRAM。


敢問路在何方,STM32邁出的第一步,卻註定了它非凡的一生

圖1 STM32的存儲器結構

下面我們來詳細介紹一下這三個存儲區域:

(一) Flash system memory:故名思議,既然是Flash ,那就是屬於ROM的一種,即數據斷電情況下是可以保存的,類似於我們常用的NANDFlash,NORFlash等等。我們最終產品的應用程序固件也都是燒寫口下載到這個區域並進行運行的。

(二) System memory:系統存儲區,ST公司在生產芯片的過程中會將嵌入式的啟動代碼固件下載到這個區域,用戶可以通過USART1,USART2,SPI1或者SPI2來重新燒寫第一部分中Flash system memory中的程序。這個過程也可以被稱作是自舉,System memory的固件程序也被稱作是自舉程序,ST公司為不同的STM32的子產品分別燒寫了不同版本的自舉程序。

下圖是USART1接口,USART2接口與自舉程序進行通訊,並將我們用戶應用程序下載到Flash system memory的示例:


敢問路在何方,STM32邁出的第一步,卻註定了它非凡的一生

圖2 通過自舉程序將應用程序下載到Flash

系統復位以後,對時鐘,GPIO,指令看門狗,systick分別進行初始化,自舉程序會循環檢測USART1和USART2接口,當其中一個接口接收到0x7F數據後,禁止所有中斷源並配置相對應的接口,等待上位機發出自舉程序命令。

(三) SRAM:SRAM一般很小,只有幾K字節的大小,且掉電會丟失,所以不能存放很大的程序,只能臨時運行比較小的程序進行在線調試仿真使用。當然了,它也有它的優點,那就是運行速度特別快,因為CPU可以通過系統總線或者I-Code/D-Code總線直接訪問SRAM。

上面介紹了三種啟動方式一般用於什麼情況以及該如何選擇,那下面介紹具體配置成其中一種方式。其實也非常簡單,就是把BOOT0引腳和BOOT1引腳進行組合即可。


敢問路在何方,STM32邁出的第一步,卻註定了它非凡的一生

圖3 STM32啟動方式的選擇

只要將BOOT0引腳接低電平,BOOT1引腳無論為什麼電平,都會從Flash system memory啟動;當BOOT0引腳接高電平,BOOT1引腳接低電平時,會從System memory啟動;當BOOT0引腳接高電平,BOOT1引腳接高電平時,會從SRAM啟動。

我們做產品,最終的代碼都是存儲在Flash system memory中的,當系統上電覆位後,會在systick時鐘的第四個上升沿讀取BOOT0和BOOT1的高低電平,來選擇期望的啟動模式。對於低功耗系列芯片從待機模式退出後也會重新採樣這兩個引腳的高低電平。

總結:STM32的三條路大多數人會選擇讓它走flash這條,在極少數情況下會讓它走...。每條路都有它的價值,所以選擇走哪條路要根據自己的目標來選擇!


喜歡就請點個“關注”或者 “轉發”,這樣可以讓更多的人學習哦!!!

有問題話請在下方“評論”一起交流學習進步!感謝大家!

更多優質文章請點擊我的頭像,選擇“文章”標籤!


分享到:


相關文章: