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