Arduino自從面世以來,便迅速在電子愛好者的圈子中流行起來。Arduino編程簡單,而且周邊配件也很豐富。可是Arduino有一個比較嚴重的問題,就是性價比不高。最多見的Uno和Pro Mini,通常使用328p,主頻只有35MHz,IO口也頗有限,可是價格卻比較高。而性能比較好的片子(例如意法半導體的STM32F103xx),雖然性能比較好(72MHz主頻,豐富的外設(SPI、IIC、多個USART、CAN等),而且片上存儲也高達512k),可是編程卻比較複雜。每每爲了點一個LED,還要進行各類初始化、時鐘配置操做。在這種片子上編程,每每還要求用戶對硬件瞭解比較深入。因此,若是可以將STM32的高性能(相對)和arduino的用戶友好結合起來,就再好不過了。而實際上,Maple早就作過這個工做了,針對STM32單獨作了一套庫,來兼容arduino的庫。下面就簡單說一下,如何實如今STM32上,使用arduino的方法來編程。linux
瞭解咱們要使用的工具
- Bootloader文件:來自於這裏;
- USB轉串口(本例中使用的是CP2102,其餘的設備可能也可使用,可是並未通過測試);
- STM32flash,能夠從這裏找到適合你的操做系統的燒寫器(個人操做系統是Linux,因此我使用linux/stm32flash/stm32flash,不過我後來在AUR中發現了stm32flash,因而就安裝了AUR中的stm32flash
若是你使用Windows或者Mac OS,就選擇適合你的工具,另外最好將Bootloader和這個放到同一個目錄中(若是你在Linux上使用軟件管理器安裝的,請忽略這一點); - 硬件庫,來自於Arduino_STM32的git(如下簡稱官方git)。
向STM32燒寫Bootloader
引言
arduino起初主要是創建在AVR單片機上,arduino的簡易編程,實際上也是創建在一套庫和Bootloader之上。要想在STM32上用這種方式編程,第一步即是向STM32燒寫Bootloader。git
下載Bootloader
咱們從這裏來找咱們須要的Bootloader。自己這個Bootloader須要自行編譯,可是實際山做者已經幫咱們編譯好了,咱們只須要從binaries目錄中找到咱們須要的Bootloader便可。在咱們手頭上的STM32板子上,通常至少有一個用戶LED,咱們須要用一個LED來做爲狀態指示燈(這也是被要求的),而不一樣的板子,這個LED也不一樣,因此咱們須要下載的Bootloader也不盡相同。個人板子上的LED引腳是PC13,因此我下載了generic_boot20_pc13.bin(請注意這裏必定要根據你本身的狀況選擇Bootloader,不然可能出現問題)。
備註:stm32f103的引導選擇:
– BOOT1=x BOOT0=0從用戶閃存啓動,這是正常的工做模式。(用戶使用)
– BOOT1=0 BOOT0=1從系統存儲器啓動,這種模式啓動的程序功能由廠家設置。
– BOOT1=1 BOOT0=1從內置SRAM啓動,這種模式能夠用於調試。github
準備燒寫器
按照上面的方法找到適合咱們本身的燒寫器,同時也要準備好下載器。將剛剛下載的Bootloader和燒寫器(stm32flash)放在我麼容易找到的目錄中(最好在同一個目錄中),而後打開終端(或這Windows的命令提示符),進入到剛剛的目錄。編程
鏈接硬件
STM32支持3種引導方式,Flash、SRAM和ISP。一般狀況下,咱們使用Flash比較多,這種方式經過下載器(JLink、STLink等)將代碼放到Flash中,再
– 而後連接硬件,我手頭上的是C8T6,這個片子的Tx和Rx分別對應引腳PA9和PA10。鏈接方式參見下面的表格工具
STM32 | 串口下載器 |
---|---|
PA9 | Rx |
PA10 | Tx |
Vcc | (自行準備電源) |
GND | GND |
開始燒寫Bootloader
還記得咱們剛纔準備好的文件嗎?就是那個stm32flash(請注意可能咱們的操做系統不一樣,因此下載的東西也可能不一樣)和咱們剛剛從github上下載的Bootloader(須要再確認一下,下載的Bootloader是不是正確的),而後打開終端(在Windows上稱爲「命令提示符」,打開的方式是「Win鍵+r」 => 「輸入cmd」,而後就會出現一個黑框),進入上述兩個文件所在目錄(因此說最好把上面兩個文件放到同一個目錄中(主要針對Windows用戶),而後把咱們的USB轉串口模塊連接到電腦上,執行post
1 |
stm32flash.exe -w generic_boot20_pc13.bin -v -g 0x0 COM14 |
在上面的命令中,-w 表示寫入,後面跟着要寫入的文件名,-v 參數是指校驗寫入,這個指令可加可不加,-g 參數指開始寫入的地址(這個地址是指片子上的地址),一樣默認狀況下就是從0x0開始寫入,因此這個參數也無關緊要。最後的COM14是你的USB轉串口在你的電腦上的名字,一般是COM開頭。在Linux上每每是「/dev/tty*」。性能
因爲各類緣由,上述命令極可能不能正確執行,這時候就輸入測試
1 |
stm32flash.exe -help |
來獲取幫助。ui
我相信Linux用戶會自行解決各類問題的。url
最終運行效果大概以下
後續工做
截止到如今,咱們已經完成了Bootloader的燒寫。下面咱們把STM32上面全部的線拔下來,並斷其電,而後設置引導方式爲Flash(把Boot0和Boot1跳線分別設置爲0和0)。而後再插上USB,上電。若是一切正常,那麼這時候你就會看到板子上有一個小燈在閃爍(實際上在剛插上電的時候,小燈會快速閃爍6下,而後就比較慢地閃爍)。若是你使用Windows,那麼在設備管理器中你能夠看到一個名爲maple的未識別設備,若是在linux上,經過lsusb命令,你能夠看到一個ID爲1eaf:000x(「x」截止到如今,咱們已經完成了Bootloader的燒寫。下面咱們把STM32上面全部的線拔下來,並斷其電,而後設置引導方式爲Flash(把Boot0和Boot1跳線分別設置爲0和0)。而後再插上USB,上電。若是一切正常,那麼這時候你就會看到板子上有一個小燈在閃爍(實際上在剛插上電的時候,小燈會快速閃爍6下,而後就比較慢地閃爍)。若是你使用Windows,那麼在設備管理器中你能夠看到一個名爲maple的未識別設備,若是在linux上,經過lsusb命令,你能夠看到一個ID爲1eaf:000x(「x」處多是3或4),而這個設備的設備名倒是空白的。
實際上這時候咱們已經完成了板子上的全部操做,下面就是配置電腦了。因爲咱們在電腦上看到了未知的設備,因此咱們須要爲其安裝驅動程序(主要針對Windows)。打開在第一節中提到的硬件庫,下載之。其中有一個名爲「driver」的文件夾,其中就是相應的驅動,打開之。運行其中的「install_driver.bat」。(關於Windows上的驅動安裝,我只能幫到這裏了,由於我並無Windows,若是你在這一步遇到了什麼問題,能夠給我發郵件。
下面是linux上面的操做,在Linux上,咱們不須要安裝驅動,只須要添加相應的rules就能夠了。在剛剛提到的硬件庫中,找到tools文件夾,進入「linux」目錄,運行其中的install.sh,便可自動添加相應的rules,這一步須要以sudo運行(或者root)。
而後咱們須要安裝dfu-util,在archlinux的官方倉庫中,已經有了編譯好的dfu-util,只須要直接安裝便可。若是你的發行版的軟件倉庫中沒有dfu-util,可使用硬件庫中的dfu-util,它在tools/linux中。
配置arduino
下一步就是配置咱們的arduino環境,步驟很簡單。把剛剛咱們下載的硬件庫,拷貝到arduino的sketch文件夾中。
在Windows上,這個文件夾位於「個人文檔\Arduino」中,而在Linux上,這個文件夾位於用戶的home目錄中。
嚐鮮
打開arduino,若是上述配置正確的話,咱們在tools->board中能夠看到一些STM32的板子,以下圖:
咱們打開Blink,而後選擇板子、RAM、時鐘等,第一次咱們不須要選擇端口,直接下載。
若是出現上面的圖,就說明成功下載。