用撸Arduino的方法撸STM32F103xx
?
http://www.pret-page.com/%E7%94%A8%E6%92%B8arduino%E7%9A%84%E6%96%B9%E6%B3%95%E6%92%B8stm32f103xx/
?
2018年1月14日?|?Pret D.B.
Arduino自從面世以來(lái),便迅速在電子愛(ài)好者的圈子中流行起來(lái)。Arduino編程簡(jiǎn)單,并且周邊配件也很豐富。但是Arduino有一個(gè)比較嚴(yán)重的問(wèn)題,就是性?xún)r(jià)比不高。最常見(jiàn)的Uno和Pro Mini,一般使用328p,主頻只有35MHz,IO口也很有限,但是價(jià)格卻比較高。而性能比較好的片子(例如意法半導(dǎo)體的STM32F103xx),雖然性能比較好(72MHz主頻,豐富的外設(shè)(SPI、IIC、多個(gè)USART、CAN等),并且片上存儲(chǔ)也高達(dá)512k),但是編程卻比較復(fù)雜。往往為了點(diǎn)一個(gè)LED,還要進(jìn)行各種初始化、時(shí)鐘配置操作。在這種片子上編程,往往還要求用戶(hù)對(duì)硬件了解比較深刻。所以,如果能夠?qū)TM32的高性能(相對(duì))和arduino的用戶(hù)友好結(jié)合起來(lái),就再好不過(guò)了。而實(shí)際上,Maple早就做過(guò)這個(gè)工作了,針對(duì)STM32單獨(dú)做了一套庫(kù),來(lái)兼容arduino的庫(kù)。下面就簡(jiǎn)單說(shuō)一下,如何實(shí)現(xiàn)在STM32上,使用arduino的方法來(lái)編程。
了解我們要使用的工具
如果你使用Windows或者M(jìn)ac OS,就選擇適合你的工具,另外最好將Bootloader和這個(gè)放到同一個(gè)目錄中(如果你在Linux上使用軟件管理器安裝的,請(qǐng)忽略這一點(diǎn));
向STM32燒寫(xiě)B(tài)ootloader
引言
arduino起初主要是建立在AVR單片機(jī)上,arduino的簡(jiǎn)易編程,實(shí)際上也是建立在一套庫(kù)和Bootloader之上。要想在STM32上用這種方式編程,第一步便是向STM32燒寫(xiě)B(tài)ootloader。
下載Bootloader
我們從這里來(lái)找我們需要的Bootloader。本身這個(gè)Bootloader需要自行編譯,但是實(shí)際山作者已經(jīng)幫我們編譯好了,我們只需要從binaries目錄中找到我們需要的Bootloader即可。在我們手頭上的STM32板子上,一般至少有一個(gè)用戶(hù)LED,我們需要用一個(gè)LED來(lái)作為狀態(tài)指示燈(這也是被要求的),而不同的板子,這個(gè)LED也不同,所以我們需要下載的Bootloader也不盡相同。我的板子上的LED引腳是PC13,所以我下載了generic_boot20_pc13.bin(請(qǐng)注意這里一定要根據(jù)你自己的情況選擇Bootloader,否則可能出現(xiàn)問(wèn)題)。
備注:stm32f103的引導(dǎo)選擇:
– BOOT1=x BOOT0=0從用戶(hù)閃存啟動(dòng),這是正常的工作模式。(用戶(hù)使用)
– BOOT1=0 BOOT0=1從系統(tǒng)存儲(chǔ)器啟動(dòng),這種模式啟動(dòng)的程序功能由廠家設(shè)置。
– BOOT1=1 BOOT0=1從內(nèi)置SRAM啟動(dòng),這種模式可以用于調(diào)試。
準(zhǔn)備燒寫(xiě)器
按照上面的方法找到適合我們自己的燒寫(xiě)器,同時(shí)也要準(zhǔn)備好下載器。將剛剛下載的Bootloader和燒寫(xiě)器(stm32flash)放在我么容易找到的目錄中(最好在同一個(gè)目錄中),然后打開(kāi)終端(或這Windows的命令提示符),進(jìn)入到剛剛的目錄。
連接硬件
STM32支持3種引導(dǎo)方式,Flash、SRAM和ISP。通常情況下,我們使用Flash比較多,這種方式通過(guò)下載器(JLink、STLink等)將代碼放到Flash中,再
– 然后鏈接硬件,我手頭上的是C8T6,這個(gè)片子的Tx和Rx分別對(duì)應(yīng)引腳PA9和PA10。連接方式參見(jiàn)下面的表格
| PA9 | Rx |
| PA10 | Tx |
| Vcc | (自行準(zhǔn)備電源) |
| GND | GND |
開(kāi)始燒寫(xiě)B(tài)ootloader
還記得我們剛才準(zhǔn)備好的文件嗎?就是那個(gè)stm32flash(請(qǐng)注意可能我們的操作系統(tǒng)不同,所以下載的東西也可能不同)和我們剛剛從github上下載的Bootloader(需要再確認(rèn)一下,下載的Bootloader是否是正確的),然后打開(kāi)終端(在Windows上稱(chēng)為“命令提示符”,打開(kāi)的方式是“Win鍵+r” => “輸入cmd”,然后就會(huì)出現(xiàn)一個(gè)黑框),進(jìn)入上述兩個(gè)文件所在目錄(所以說(shuō)最好把上面兩個(gè)文件放到同一個(gè)目錄中(主要針對(duì)Windows用戶(hù)),然后把我們的USB轉(zhuǎn)串口模塊鏈接到電腦上,執(zhí)行
| 1 | stm32flash.exe -w generic_boot20_pc13.bin -v -g 0x0 COM14 |
在上面的命令中,-w?表示寫(xiě)入,后面跟著要寫(xiě)入的文件名,-v?參數(shù)是指校驗(yàn)寫(xiě)入,這個(gè)指令可加可不加,-g?參數(shù)指開(kāi)始寫(xiě)入的地址(這個(gè)地址是指片子上的地址),同樣默認(rèn)情況下就是從0x0開(kāi)始寫(xiě)入,所以這個(gè)參數(shù)也可有可無(wú)。最后的COM14是你的USB轉(zhuǎn)串口在你的電腦上的名字,通常是COM開(kāi)頭。在Linux上往往是“/dev/tty*”。
由于各種原因,上述命令很可能不能正確執(zhí)行,這時(shí)候就輸入
| 1 | stm32flash.exe -help |
來(lái)獲取幫助。
我相信Linux用戶(hù)會(huì)自行解決各種問(wèn)題的。
最終運(yùn)行效果大概如下
后續(xù)工作
截止到現(xiàn)在,我們已經(jīng)完成了Bootloader的燒寫(xiě)。下面我們把STM32上面所有的線拔下來(lái),并斷其電,然后設(shè)置引導(dǎo)方式為Flash(把Boot0和Boot1跳線分別設(shè)置為0和0)。然后再插上USB,上電。如果一切正常,那么這時(shí)候你就會(huì)看到板子上有一個(gè)小燈在閃爍(實(shí)際上在剛插上電的時(shí)候,小燈會(huì)快速閃爍6下,然后就比較慢地閃爍)。如果你使用Windows,那么在設(shè)備管理器中你可以看到一個(gè)名為maple的未識(shí)別設(shè)備,如果在linux上,通過(guò)lsusb命令,你可以看到一個(gè)ID為1eaf:000x(“x”截止到現(xiàn)在,我們已經(jīng)完成了Bootloader的燒寫(xiě)。下面我們把STM32上面所有的線拔下來(lái),并斷其電,然后設(shè)置引導(dǎo)方式為Flash(把Boot0和Boot1跳線分別設(shè)置為0和0)。然后再插上USB,上電。如果一切正常,那么這時(shí)候你就會(huì)看到板子上有一個(gè)小燈在閃爍(實(shí)際上在剛插上電的時(shí)候,小燈會(huì)快速閃爍6下,然后就比較慢地閃爍)。如果你使用Windows,那么在設(shè)備管理器中你可以看到一個(gè)名為maple的未識(shí)別設(shè)備,如果在linux上,通過(guò)lsusb命令,你可以看到一個(gè)ID為1eaf:000x(“x”處可能是3或4),而這個(gè)設(shè)備的設(shè)備名卻是空白的。
實(shí)際上這時(shí)候我們已經(jīng)完成了板子上的所有操作,下面就是配置電腦了。由于我們?cè)陔娔X上看到了未知的設(shè)備,所以我們需要為其安裝驅(qū)動(dòng)程序(主要針對(duì)Windows)。打開(kāi)在第一節(jié)中提到的硬件庫(kù),下載之。其中有一個(gè)名為“driver”的文件夾,其中就是相應(yīng)的驅(qū)動(dòng),打開(kāi)之。運(yùn)行其中的“install_driver.bat”。(關(guān)于Windows上的驅(qū)動(dòng)安裝,我只能幫到這里了,因?yàn)槲也](méi)有Windows,如果你在這一步遇到了什么問(wèn)題,可以給我發(fā)郵件。
下面是linux上面的操作,在Linux上,我們不需要安裝驅(qū)動(dòng),只需要添加相應(yīng)的rules就可以了。在剛剛提到的硬件庫(kù)中,找到tools文件夾,進(jìn)入“l(fā)inux”目錄,運(yùn)行其中的install.sh,即可自動(dòng)添加相應(yīng)的rules,這一步需要以sudo運(yùn)行(或者root)。
然后我們需要安裝dfu-util,在archlinux的官方倉(cāng)庫(kù)中,已經(jīng)有了編譯好的dfu-util,只需要直接安裝即可。如果你的發(fā)行版的軟件倉(cāng)庫(kù)中沒(méi)有dfu-util,可以使用硬件庫(kù)中的dfu-util,它在tools/linux中。
配置arduino
下一步就是配置我們的arduino環(huán)境,步驟很簡(jiǎn)單。把剛剛我們下載的硬件庫(kù),拷貝到arduino的sketch文件夾中。
在Windows上,這個(gè)文件夾位于“我的文檔\Arduino”中,而在Linux上,這個(gè)文件夾位于用戶(hù)的home目錄中。
嘗鮮
打開(kāi)arduino,如果上述配置正確的話(huà),我們?cè)趖ools->board中可以看到一些STM32的板子,如下圖:
我們打開(kāi)Blink,然后選擇板子、RAM、時(shí)鐘等,第一次我們不需要選擇端口,直接下載。
如果出現(xiàn)上面的圖,就說(shuō)明成功下載。
總結(jié)
以上是生活随笔為你收集整理的用撸Arduino的方法撸STM32F103xx的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JTAG、JLINK、ULINK、ST-
- 下一篇: 虚拟网络的组建和应用课后习题答案