如何使用串口來給STM32下載程序

前言

第一次學習STM32的時候,不知道有調試器這個東西,所以一直是通過串口來給STM32下載程序,下載速度也還算可以,一般是幾秒鐘完成。後來用了調試器,可以直接在Keil環境下進行下載,而且還可以進行在線調試,所以後來就很少使用串口來下載程序了。前幾天在uFUN試用羣裏看到有幾個朋友在使用串口下載程序時,遇到了各種各樣的問題,所以在這裏簡單介紹一下如何通過串口來給STM32下載程序。

STM32的啓動模式介紹

從STM32參考手冊上,可以查閱到,STM32的啓動模式,共有下列三種,可以通過BOOT0和BOOT1電平的不同組合,來選擇不同的啓動模式。

關於這幾種模式的介紹,下面是我個人的理解:

主閃存啓動模式:即運行模式,單片機上電即運行程序。

系統存儲器啓動模式:即串口下載模式。上電之前要先設置BOOT0=1,BOOT1=0,然後才能通過串口下載程序。或者在已經上電的情況下,設置BOOT0=1,BOOT1=0,然後按一下復位鍵,這樣也能通過串口下載程序。

SRAM啓動模式:即調試模式。假如我只修改了代碼中一個小小的地方,如果直接擦除整個Flash,比較費時,而且Flash的擦寫次數也是有限制的。所以可以考慮從RAM中啓動代碼,用於快速的程序調試,等程序調試完成後,再將程序下載到Flash中。

有的朋友可能遇到過這種情況:程序第一次下載的時候可以運行,但是掉電重啓之後,程序就不能運行了。這種情況就有可能是把BOOT設置成了串口下載模式,所以掉電之後,並不會自動運行。如果想要即使掉電重啓也能直接運行程序,可以把BOOT設置爲主閃存啓動模式,即BOOT0=0。

安裝USB串口驅動

在進行串口下載程序之前,如果串口芯片的驅動程序沒有安裝,那麼電腦不能識別串口,如上圖所示,設備管理器裏有一個未識別的設備。在安裝串口驅動之前,要先確定開發板所使用的串口芯片,我們的uFUN開發板使用的是CH340串口芯片。這裏我提供了幾個常用串口芯片的驅動程序下載地址,大家如果使用其他的串口芯片,要安裝對應的驅動程序:

如果驅動安裝成功,在設備管理器裏可以看到該設備對應的串口號:

設置啓動模式爲系統存儲啓動模式

上電前,設置BOOT0=1,BOOT1=0。或者是在上電後,設置BOOT0=1,BOOT1=0之後,然後按一下復位按鍵。這兩種方式都可以讓設置爲系統存儲啓動模式,從而通過串口下載程序。

參考uFUN的原理圖:

可以看出,BOOT的選擇是通過撥碼開關實現的。S1對應BOOT1,S2對應BOOT0,開關處於ON狀態,BOOT直接接地,爲低電平0;開關處於OFF狀態,BOOT上拉爲高電平1,即:

這一點和【uFun 開發板快速入門指南 V10】介紹的有所出入,在這裏手動@管理員覈對一下。

對於uFUN開發板,要切換到串口下載模式,只需要設置S1=ON,即BOOT1=0,S2=OFF,即BOOT0=1,就可以進行下一步的程序下載。如下圖所示:

使用FlyMCU下載程序

STM32串口下載軟件主要兩個,一個是國人開發的FlyMCU,另一個是ST官方的Flash Loader Demonstrator,這兩個軟件的下載方法我都會介紹,不過我個人認爲FlyMCU更簡單易用一些。

FlyMCU是由單片機在線編程網開發的一款串口下載軟件,我使用的是V0.188版本,主界面如上圖所示,如果大家想獲取最新版的軟件可以到官方網站下載。我去官網上看了一下,又發佈了免費的Free ISP軟件,可以支持STM32和LPC2xxx程序的下載。如果有朋友從事LPC2xxx MCU的開發,而又沒有調試器,可以嘗試一下這個軟件。 好了,話不多說,下面來看一下如何使用FlyMCU通過串口來給uFUN開發板下載程序。

  • 1.軟件的下載

可以到官方網站下載最新版,或者是下載我使用的這個版本,FlyMCU V0.188

  • 2.選擇COM號

確保啓動模式已經設置爲串口下載模式,BOOT1=0,BOOT0=1,即S1=ON,S2=OFF,然後把開發板連接電腦上電,打開軟件,選擇PORT菜單下對應的COM口。

  • 3.加載hex文件

加載生成的hex文件,並勾選右邊的編程前重裝文件,這樣,就不用每次下載程序,重新加載hex文件了。

  • 4.下載程序

勾選校驗編程後執行這兩個選項,取消勾選編程到FLASH時寫選項字節,然後點擊開始編程按鈕,如果正常下載的話,右邊會輸出下載的信息,如果成功下載並運行,最後會輸出:

共寫入8KB,進度100%,耗時4750毫秒
成功從08000000開始運行

表示程序成功下載。

編程後執行:這個選項是指,程序下載完成後自動運行,而不用切換到BOOT到主閃存啓動模式,但是,掉電重啓,程序不會直接運行。如果要上電即運行此程序,還需要把BOOT設置回主閃存啓動模式BOOT0=0,即S2=ON。

編程到FLASH時寫選項字節:這個選項不要勾選,如果勾選了,可能會導致下載失敗,或者是運行失敗,甚至會導致芯片的鎖死。所以,這個選項一定不要勾選。

使用Flash Loader Demonstrator下載

Flash Loader Demonstrator是ST官方的串口下載軟件,可以用於STM32系列單片機的程序下載,官網地址:STM32 Flash loader demonstrator

  • 1.軟件的下載

通過上面的官網鏈接,可以下載到最新2.8.0版本的Flash Loader Demonstrator,但是如果要想下載,需要先登陸ST官網的賬號,如果不想註冊賬號的話,可以通過下面的鏈接下載,這個是我之前找的,版本是2.6.0的,但不影響程序的下載:Flash_Loader_Demonstrator_v2.6.0_Setup

  • 2.連接芯片

和FlyMCU不同的是,要想下載程序,必須要經過連接芯片,等一系列步驟才能完成下載,這一點,也是我覺得這個軟件不好用的原因。

打開軟件,選擇板子串口對應的COM號,波特率可以調成最高,這樣下載速度會快一點,但是有的串口芯片,不能支持很高的波特率。

如果和板子連接成功的話,會檢測到目標STM32芯片的Flash的大小,我們的uFUN開發板是使用STM32F10RC,256KB Flash。

這一步,可以查看當前Flash各頁的讀寫情況,綠色的鎖表示可讀/可寫,如果芯片被加了讀保護,或者寫保護,部分頁會顯示爲紅色的鎖。

![](

  • 3.程序的下載

先加載hex文件,下面的擦除選項可以選擇:擦除必要的頁、不擦除或者是全片擦除,這裏保持默認配置就行,直接點擊Next進行程序的下載。

如果下載成功,會顯示

這裏如果點擊Back是不能進行第二次程序下載的,必須重新打開,連接,才能下載。

另外,除了STM32系列單片機程序的下載,它還支持ST公司的STM8的程序下載。

總結

STM32只能通過串口1進行程序下載,即PA9、PA10,其他串口都不具備這個功能,所以,如果自己設計板子,要注意這一點。一些聯網的設備進行固件更新也是這個原理,即把WIFI模塊,連接到串口1,實現程序的在線升級。當然,具體的實現還是很複雜的,而且還涉及到Bootloader程序的開發,這就是另外一個方面了。雖然STM32的F4系列也可以使用串口下載程序,但擦除時間很長,有十幾秒種。推薦大家儘量還是使用調試器來進行程序的下載和調試,方便又好用,單片機開發必備!

參考資料


歷史精選文章:


歡迎大家關注我的個人博客

或微信掃碼關注我的公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章