- STM32官方網(wǎng)站
- STM32中文社區(qū)
如果遇到不清楚的概念,可以看之前的文章。
一、自舉模式
STM32有一個特殊的功能,就是可以通過不同的方式啟動程序,這就是所謂的自舉模式(Boot Mode)。
STM32的自舉模式由兩個引腳控制,分別是BOOT0
和BOOT1
,它們可以接到不同的電平(高電平或低電平),從而決定STM32從哪里啟動程序。
STM32有三種自舉模式,分別是:
-
主閃存模式(
Main Flash memory mode
):這是默認的自舉模式,當BOOT0為低電平
,BOOT1為任意電平時,STM32會從主閃存(Flash)中啟動程序。主閃存是STM32內(nèi)部的非易失性存儲器,可以通過編程工具或者內(nèi)置的串行引導加載器(serial bootloader)來燒寫程序。 -
系統(tǒng)存儲器模式(
System memory mode
):這是一種特殊的自舉模式,當BOOT0為高電平,BOOT1為低電平時
,STM32會從系統(tǒng)存儲器中啟動程序。系統(tǒng)存儲器是STM32內(nèi)部的只讀存儲器(ROM),其中存放了一個串行引導加載器(serial bootloader),它可以通過串口、USB或者CAN等接口來接收外部的程序,并將其寫入主閃存或者外部的存儲器設(shè)備。 -
嵌入式SRAM模式(
Embedded SRAM mode
):這是一種調(diào)試用的自舉模式,當BOOT0為高電平,BOOT1為高電平
時,STM32會從嵌入式SRAM中啟動程序。嵌入式SRAM是STM32內(nèi)部的易失性存儲器,它可以通過JTAG或者SWD等調(diào)試接口來加載程序。這種模式通常用于開發(fā)和測試階段,不適合生產(chǎn)環(huán)境。
自舉模式的選擇對于STM32的應用開發(fā)和調(diào)試非常重要,它可以影響STM32的啟動速度、安全性和靈活性。通過合理地利用自舉模式,可以實現(xiàn)不同的功能和需求,例如:
- 通過串行引導加載器來更新程序,無需使用專用的編程工具或者拆卸設(shè)備。
- 通過嵌入式SRAM模式來快速驗證程序的功能和性能,無需燒寫主閃存。
- 通過主閃存模式來保證程序的穩(wěn)定性和安全性,防止被篡改或者損壞。
BOOT0 和 BOOT1 這2個引腳在開發(fā)板上是會明確標注的。但是當你去看芯片的引腳分布圖時,有可能只能看到BOOT0引腳,找不到BOOT1引腳,這是因為BOOT1引腳有可能是與其他引腳復用的。
拿STM32F103C8T6
來說:64KB Flash+20KB SRAM(還有64KB ROM)。它的引腳是48個,LQFP封裝,它的引腳分布圖如下:
BOOT0明確為44
引腳。
BOOT1是與PB2
復用的,即20
引腳,在芯片手冊的引腳定義表格中可以看到:
二、程序下載
一般情況下,我們的程序是下載到Flash
中的。好比你在電腦上下載安裝軟件,安裝位置一般就是SSD(與Flash類似)。
下面介紹的3中方法對應系統(tǒng)存儲期模式和Flash模式(下載方法不限于下面3種)。
2.1 概述
(1)串行引導加載器(serial bootloader)
串行引導加載器是STM32內(nèi)置的一個程序,它存放在系統(tǒng)存儲器中(ROM
),可以通過串口、USB或者CAN等接口來接收外部的程序,并將其寫入主閃存或者外部的存儲器設(shè)備。
- 串行引導加載器的優(yōu)點是無需使用專用的編程工具或者拆卸設(shè)備,只需要一根數(shù)據(jù)線和一個電腦就可以完成下載。
- 缺點是速度較慢,而且需要配置好自舉模式和接口參數(shù)。
要使用串行引導加載器下載程序,需要按照以下步驟進行:
- 將STM32的BOOT0引腳接高電平,BOOT1引腳接低電平,選擇系統(tǒng)存儲器模式。
- 將STM32的串口、USB或者CAN接口連接到電腦上,并安裝相應的驅(qū)動程序。
- 打開一個串口終端軟件(如PuTTY)、USB轉(zhuǎn)串口軟件(如STSW-LINK009)或者CAN轉(zhuǎn)串口軟件(如CANalyst-II),并設(shè)置好波特率、數(shù)據(jù)位、停止位等參數(shù)。
- 復位STM32,并在終端軟件中發(fā)送一個0x7F字節(jié),以激活串行引導加載器。
- 如果收到一個0x79字節(jié)的應答,表示串行引導加載器已經(jīng)準備好接收命令。如果沒有收到應答,可能是參數(shù)設(shè)置錯誤或者連接問題,需要檢查并重試。
- 發(fā)送一個讀取命令(0x11),并指定要讀取的存儲器地址和長度。如果收到一個0x79字節(jié)的應答,表示命令有效。如果收到一個0x1F字節(jié)的應答,表示命令無效或者地址錯誤,需要檢查并重試。
- 讀取返回的數(shù)據(jù),并校驗其正確性。
- 發(fā)送一個擦除命令(0x43),并指定要擦除的扇區(qū)號。如果收到一個0x79字節(jié)的應答,表示命令有效。如果收到一個0x1F字節(jié)的應答,表示命令無效或者扇區(qū)號錯誤,需要檢查并重試。
- 發(fā)送一個寫入命令(0x31),并指定要寫入的存儲器地址和數(shù)據(jù)。如果收到一個0x79字節(jié)的應答,表示命令有效。如果收到一個0x1F字節(jié)的應答,表示命令無效或者地址錯誤,需要檢查并重試。
- 校驗寫入的數(shù)據(jù),并重復上述步驟直到所有數(shù)據(jù)都寫入完成。
- 發(fā)送一個跳轉(zhuǎn)命令(0x21),并指定要跳轉(zhuǎn)的程序入口地址。如果收到一個0x79字節(jié)的應答,表示命令有效。如果收到一個0x1F字節(jié)的應答,表示命令無效或者地址錯誤,需要檢查并重試。
- 復位STM32,并將BOOT0引腳接低電平,選擇主閃存模式。
- STM32將從主閃存中啟動程序。
中間的很多步驟看起來可能比較復雜,但是通常串口下載軟件可以代替我們完成這些工作,比如FlyMCU
。
(2)JTAG(Joint Test Action Group)
JTAG
是一種標準的測試和調(diào)試接口,它可以通過一根多芯的數(shù)據(jù)線來連接STM32和一個編程工具(如ST-LINK、J-LINK等),并通過一個調(diào)試軟件(如Keil、IAR等)來控制STM32的運行狀態(tài)和存儲器內(nèi)容。
- JTAG的優(yōu)點是速度較快,而且可以實時監(jiān)視和修改STM32的寄存器和存儲器。
- 缺點是需要使用專用的編程工具和調(diào)試軟件,而且可能會占用一些GPIO引腳。
要使用JTAG下載程序,需要按照以下步驟進行:
- 將STM32的JTAG接口連接到編程工具上,并將編程工具連接到電腦上。
- 打開一個調(diào)試軟件,并設(shè)置好目標芯片型號、時鐘頻率、下載地址等參數(shù)。
- 選擇下載模式,并選擇要下載的程序文件。
- 點擊下載按鈕,開始下載程序到STM32的存儲器中。
- 點擊運行按鈕,開始運行程序。
(3)SWD(Serial Wire Debug)
SWD
是一種簡化的JTAG接口,它只需要兩根數(shù)據(jù)線來連接STM32和一個編程工具(如ST-LINK、J-LINK等),并通過一個調(diào)試軟件(如Keil、IAR等)來控制STM32的運行狀態(tài)和存儲器內(nèi)容。
- SWD的優(yōu)點是占用引腳少,而且可以實現(xiàn)和JTAG相同的功能。
- 缺點是速度稍慢于JTAG,而且可能會影響一些GPIO引腳的功能。
要使用SWD下載程序,需要按照以下步驟進行:
- 將STM32的SWD接口連接到編程工具上,并將編程工具連接到電腦上。
- 打開一個調(diào)試軟件,并設(shè)置好目標芯片型號、時鐘頻率、下載地址等參數(shù)。
- 選擇下載模式,并選擇要下載的程序文件。
- 點擊下載按鈕,開始下載程序到STM32的存儲器中。
- 點擊運行按鈕,開始運行程序。
2.2 實操
自己去官網(wǎng)下載相應的驅(qū)動并安裝:就是ST-Link和ch340等驅(qū)動,具體取決于你使用的工具。實在不會就找你的淘寶賣家要。不展開介紹了。
拿ST-Link來說,安裝驅(qū)動后,將設(shè)備連接到電腦可以看到:
說明驅(qū)動安裝的沒問題。
2.21 SWD 方式下載(ST-Link)
這是最常用、最好用的方式之一??梢再I正版的ST-Link,也就100來塊,或者10幾塊買個自制的那種。(正版J-Link太貴了??)
很多設(shè)置設(shè)調(diào)試的時候用的,大概介紹一下。
引腳對應接線即可:(BOOT引腳按照Flash模式接線即可)
軟件是Keil的 MDK-ARM 5.38
。
首先編譯生成hex文件,前面的文章對Keil的功能已經(jīng)完整介紹過了。
在 options for target
下的Debug
選項下選擇ST-Link,然后進入設(shè)置:
如果是第一次使用,有可能會提示你安裝或更新某些固件,按照指示操作即可。
進入設(shè)置會有如下4個選項:
- Debug:設(shè)置調(diào)試參數(shù),例如復位模式、復位腳、最大時鐘頻率、SWO頻率等。這些參數(shù)會影響調(diào)試器和目標板之間的通信和同步。
- Trace:設(shè)置是否啟用跟蹤功能,以及選擇跟蹤模式、跟蹤端口、跟蹤時鐘頻率等。跟蹤功能可以實現(xiàn)對目標板的實時監(jiān)視和分析,例如顯示程序執(zhí)行流程、函數(shù)調(diào)用棧、變量值等。
- Flash Download:設(shè)置是否在調(diào)試前自動下載程序到目標板的存儲器中,以及選擇要下載的存儲器設(shè)備和算法。這些設(shè)置會影響下載速度和成功率。
- Pack:設(shè)置是否使用軟件包中提供的調(diào)試定義,以及選擇要使用的軟件包和配置文件。這些定義會提供調(diào)試連接和跟蹤功能的配置設(shè)置。
Debug:
- Debug Adapter 和 SW Device 是你的ST-Link參數(shù),只要你的ST-Link質(zhì)量沒問題、BOOT引腳設(shè)置正確、接線正確、板子正常、安裝了驅(qū)動,那么這里就會顯示相關(guān)信息,否則請逐一排查問題。
-
Target Com:
-
port
用于選擇端口類型,我使用的是SWD
(2跟線的,SWDIO和SWCLK)。 -
clock
是時鐘設(shè)置,可以設(shè)置調(diào)試的速度。 Req:請求頻率 Selected:實際頻率。
-
- Debug: 這是調(diào)試設(shè)置,根據(jù)需要設(shè)置即可。
Trace
:
- Core Clock:核心時鐘頻率。設(shè)置跟當前板子相同的時鐘頻率,可以在調(diào)試時按實際運行時間進行追蹤調(diào)試。
-
Trace Enable:使能追蹤功能。
Flash Download
:
-
Download Function:
- Erase Full Chip:擦除整片
- Erase Sectors:擦除部分
- Do not Erase:不擦除
- 勾選Erase Full Chip時,每次下載時,都會對整片F(xiàn)lash進行擦除操作。勾選Erase Sectors時,下載時只會擦除使用到的扇區(qū)。勾選Do not Erase時,則下載時不擦除原本代碼。
- Program:燒錄
- Verify:校驗
- Reset and Run:復位并運行
- 勾選Program時,下載時才會把代碼寫入Flash,否則不寫入。勾選Verify時,則在燒錄代碼后,對代碼進行校驗。某些場合下不能檢驗,比如代碼段跟數(shù)據(jù)段分開下載,代碼里不包含數(shù)據(jù)部分,而工程里配置的代碼段又包含數(shù)據(jù)段時,此時如果進行校驗,可能會因為數(shù)據(jù)內(nèi)容不一致導致校驗失敗。勾選Reset and Run時,則在下載完成后立即復位運行代碼,不勾選時則需要手動復位運行。
-
Programming Algorithm:設(shè)置要下載的存儲器設(shè)備和算法,以及選擇要下載的扇區(qū)和地址范圍。一般選擇與目標板匹配的存儲器設(shè)備和算法。比如STM32F103C8T6就選擇中等容量(雖然它是64K不是128K)
Pack
: 芯片對應的Pack
全部設(shè)置完成后,點擊Download即可下載:
下載完之后,按下板子上的reset
即可運行你的、正確的程序。
2.22 串口下載
這種方式只需要串口轉(zhuǎn)USB即可完成,成本很低,是通過系統(tǒng)存儲中的程序(串行引導加載器),將程序下載到Flash中的方式。
-
BOOT設(shè)置:
BOOT0=1,BOOT1=0
-
接線:USB轉(zhuǎn)串口的TX和RX分別與板子的RX(PA10)和TX(PA9)相連(不是同名相連哦),電源正常接線。
-
軟件:FlyMCU
首先搜索串口,選擇有USBxxxCH340字樣的端口。
讀取器件信息示例(需要按一下reset):這說明連接正常,顯示的信息不一定準確哦,具體看Datasheet。
下載程序:
選擇Keil生成的hex文件,點擊開始編程即可,設(shè)置按照上圖。
- 這里是 FlyMcu 對一鍵下載電路的控制過程,其實就是控制DTR和RTS電平的變化,控制BOOT0和RESET,從而實現(xiàn)自動下載。
- STM32每次下載程序時,需要先將整片擦除,擦除速度比較慢,整個過程可能需要幾十秒鐘時間。
- 下載成功后,會出現(xiàn)“共寫入 xxxx KB,進度100%,耗時 xxxx 毫秒”的提示,并且下方的進度條會全綠。
程序是下載到Flash的,所以下載完后,記得把BOOT0設(shè)為0。文章來源:http://www.zghlxwxcb.cn/news/detail-757408.html
把 永 遠 愛 你 寫 進 詩 的 結(jié) 尾 ~ 文章來源地址http://www.zghlxwxcb.cn/news/detail-757408.html
到了這里,關(guān)于【STM32】自舉模式 和 程序下載(ST-Link和串口示例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!