1.1-綜述
從事stm32開發(fā)的話,肯定繞不開stlink,使用stlink開發(fā)stm32時用到的知識點。對于常規(guī)開發(fā)而言,80%時候會使用keil或vscode對目標(biāo)芯片進(jìn)行下載與在線調(diào)試,簡單的bug我們一般反復(fù)下載就行了,復(fù)雜的bug需要進(jìn)行單步調(diào)試、查看寄存器、輸出swo信息等。本文簡單介紹stlink的兩個工具st-utility和cubeProgrammer,重點介紹st-link的命令行的使用,因為越來越多的人會(拋棄keil)轉(zhuǎn)向使用vscode調(diào)用stlink進(jìn)行開發(fā),最后對stlink和jlink進(jìn)行簡單對比。
1.2-stlink是啥?
stlink或st-link是一個解決方案,有st-link下載器和對應(yīng)安裝在windows上的驅(qū)動與工具。這個解決方案用于實現(xiàn)st自家芯片的下載與在線調(diào)試功能。在嵌入式開發(fā)領(lǐng)域,涉及的知識點太多,所以每一塊都是分層的,有嚴(yán)格的架構(gòu),層與層之前發(fā)展出標(biāo)準(zhǔn)的通訊接口。stlink硬件與驅(qū)動,它連接了目標(biāo)芯片與電腦上的開發(fā)軟件,如KEIL調(diào)用"stlink驅(qū)動+stlink下載器硬件"實現(xiàn)對目標(biāo)芯片的訪問,就能進(jìn)行程序下載與調(diào)試。另外,再在上面加一個gdb server接口,這下就可以被通用的編譯器調(diào)用,如vscode就實現(xiàn)了keil的下載與調(diào)試功能,具體在其他博客中詳解。
2.1-stlink的軟件與硬件
在st的官網(wǎng)STM32 ST-LINK utility上可以購買stlink的硬件及免費下載st-link的軟件,stlink的硬件在國內(nèi)有很多變體或仿器,應(yīng)當(dāng)注意這些都是侵權(quán)的,所以硬件很容易獲得,而且大部分是V2.1版本的;關(guān)于軟件工具,有utility和cubeproprammer兩個,官網(wǎng)已經(jīng)稱前者被后者取代,兩者在開發(fā)中一般是用于下載bin文件以及解鎖芯片的。但是不得不說,體驗上來講utility跑得更流暢,cubeprogrammerg還需要一兩年才能流暢使用,這兩者的功能基本是一樣的,后都有一些額外的功能,但是極少用到。
note1: utility工具有一個bin文件對比的功能,算是小驚喜吧,如下圖所示。
?
2.2-使用stlink命令行 準(zhǔn)備文件及配置
?解壓后能看到這幾個功能函數(shù)。
在環(huán)境變量里把它的路徑放入path里,這樣可以讓對應(yīng)目錄下的.exe變成全局指令;如果是linux系統(tǒng),把文件解壓到usr/local/bin下就行了。
?2.3-測試命令
接下來測試:隨便找個終端,如自帶的cmd或git-bash都可以,(但是MSYS2不可以),測試st-info命令,如下測試了3條,【1】直接打入進(jìn)去st-info后顯示使用幫助,【2】打入指令后查看連接的stlink信息,這些信息和使用utility或cubeprogrammer讀取的信息是一樣的,因為他們調(diào)用相同的接口驅(qū)動,【3】如果沒有連接任何stlink設(shè)備,則顯示無設(shè)備的提示。
?2.4-st-flash下載指令測試
同上,可以直接鍵入st-flash回車來查看使用幫助,查看版本:
直接下載測試,打入下面指令就可以直接下載并運行,如圖所示
我們break down分析一下,指令的完成了“把什么bin文件下載到什么地址去”的任務(wù)
-
--reset 是要求下載完成后發(fā)送復(fù)位指令,即下載完成自動運行程序
-
write 是主要參數(shù),表示是寫文件,也可以是read讀文件
-
/f/stm32/may12/build/may12.bin 是個可下載的bin文件,
-
0x08000000 是flash的地址,這個地址搞stm32肯定要記住的,是flash的起始地址
也可以指定速度,最快4000K, 其實是jlink的默認(rèn)速度,還是jlink快。
$ st-flash --reset --freq=4000k write /f/stm32/may12/build/may12.bin 0x08000000
note: 這個指令配置到vscode的腳本里,就可以實現(xiàn)一鍵下載,具體參見其他博客。
另外還可以自行測試一下st-trace指令,可以在命令行里看stlink的swo輸出(這里程序上寫了通過swo輸出計數(shù)值),使用的時候需要通過命令行告知芯片的cpu主頻,因為swo是直接與cpu進(jìn)行通信的。
?3.1-stlink與jlink的不同
首先應(yīng)當(dāng)注意,如果是針對st的芯片進(jìn)行開發(fā)的話,這個比較對jlink是不公平的。先說比較結(jié)論,做debug工具是一個專業(yè)領(lǐng)域,jlink是大佬(售價也很大佬),stlink是st針對自家芯片做的調(diào)試器,價格便宜。有jlink在手基本上可以debug任何廠家的mcu,而且在下載速度方面,jlink比stlink快很多。 但但但但是,如果你是做開發(fā)的,且只是針對st平臺的,那么stlink是足夠的,可以順便在下載的時候休息幾秒鐘。
下面截圖是jlink官網(wǎng)論壇對”jlink與stlink有什么差別“的回答。
[SOLVED] Difference between JLink and ST-link - J-Link/Flasher related - SEGGER - Forum
stlink自稱是地球上最快的下載器,下圖是針對stm32417ig(500kB)的片上flash下載測試結(jié)果,使用SWD接口,結(jié)果顯示jlink下載速度最強,stlink下載速度最慢。【參考鏈接? J-Link is the Fastest (segger.com)】
?3.2-結(jié)論
總結(jié)一下,除了除st-utility、cubeprogrammer外,還可以使用命令行進(jìn)行查看與下載,這些命令行實際并不方便使用,但是可以通過這些操作可以加深對下載與仿真的理解,同時幫助理解vscode如何集成這些功能,在這些命令行基礎(chǔ)上,可以配置vscode實現(xiàn)和keil一樣的一鍵下載,一鍵擦除,一鍵復(fù)位,在線單步,查看寄存器等方便開發(fā)的功能。
擴展1-請查看關(guān)于jlink使用的博客
擴展2-請查看關(guān)于openocd使用的博客文章來源:http://www.zghlxwxcb.cn/news/detail-743902.html
擴展2-請查看關(guān)于vscode自動化調(diào)用這些調(diào)試服務(wù)的博客文章來源地址http://www.zghlxwxcb.cn/news/detail-743902.html
到了這里,關(guān)于0503-stm32的調(diào)試工具:st-link詳細(xì)解析 (命令行/ st utility/ cubePorbrammer)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!