Arduino IDE是一種很方便的開發環境,通過把底層代碼函數化,做到讓使用者開發軟件不需要太多瞭解底層控制,縮短了代碼,大大提升了開發效率。而且Arduino基於C/C++,其語言、開發環境都很容易理解,是初學者的一個不錯選擇。但是,Arduino出品的開發板芯片比較古老,計算能力比較低下,較爲複雜的運算實現困難。。因此把Arduino環境用在ST意法半導體公司的STM32系列上會有不錯的效果。現在網絡上已經有Arduino for STM32的文章了,不過都是針對自家做的板子所寫,不支持其他板子,這篇文章講的方法適用性較廣,我個人使用的是國產神舟I號開發板,板載STM32F103RB,目前已知此方法適用於STM32F103C8x、STM32F103CBx、STM32F103Rxx 芯片。
下面進入正文。
詳細頁面:http://alanzjl.sinaapp.com/2015/02/arduino_in_stm32/
一、軟件準備。
1、Arduino最新版,現在好像是1.5.8 BETA,我用的是1.6.0,忘了從哪裏下到的了現在貌似找不到了,不過1.5.x也可以。
下載地址:http://www.arduino.cc/en/Main/Software
我的板子:
2、STM32 master文件,下載解壓之後,把文件夾名改成Arduino_STM32,拷貝到My Documents/Arduino/hardware下,如果hardware文件夾不存在的話就新建一個。
3、安裝STM32驅動,不安裝的話com口識別不出來,win7/8應該都可以在線自動安裝,如果還是不行的話就百度搜一下驅動程序吧。
4、打開Arduino IDE,選擇合適的板子,我選的是下圖這個。
選擇好COM口,用的是哪個COM口在控制面板-設備管理器裏可以看到(如果看不到就說明驅動程序沒裝好)。另:連接STM32和電腦的時候一定注意STM32上用的是哪個接口!!比如我的這塊神舟I,有兩個miniUSB口,其中有一個是USB轉串口的,那麼需要連的就是這個,別連錯了!!連錯了COM口也不會出現。(如果開發板不是自帶USB轉串口芯片的,就要自備這塊芯片,從串口連接)
二、軟件準備完了,下面準備硬件。
1、STM32啓動方式:SystemBoot。這個非常重要!我就是在這裏卡了好久。
我的這塊板子:
不同的開發板BOOT0、BOOT1設置的不一樣,我的是用跳帽短接BOOT0,BOOT1不動之後復位進入SystemBoot模式。(stm32有多鍾啓動模式,UserBoot、SystemBoot、SRAM_Boot模式,其中如果使用串口下載要擦寫FLASH的話一定要用SystemBoot模式,UserBoot模式是寫好程序之後執行這個程序的時候用的,在我的板子上是BOOT0不短接,BOOT1隨意,也就是不用跳線帽的時候的默認模式)
如果模式錯了,可能會出現下面這個情況(我當初就是在這裏糾結了好久):
2、安好跳線帽之後按reset復位,寫好的程序就可以往裏面燒寫了。
三、來點具體案例吧。
1、LED閃爍。你的開發板上應該有板載LED吧,什麼?你的是核心板?那就跳過這一個到下一個或者外接一個LED吧。
led閃爍首先要搞清楚led接在哪個管腳上,我的有三個,分別接在接在PA2、PA3還有PB2上,看PA1比較順眼,那就PB1吧。
注意,Arduino自家板子的I/O口是有編號的,比如在Arduino Ide裏面打開一個實例程序,Blink,可以發現編號爲13的管腳接着一個led。。。但是在stm32上面編號是怎麼對應的就不一定了。。於是,我們就不能用編號了,用管腳標號吧,買板子的時候商家會給,硬件原理圖裏面,比如下面這個,可以看出PA2、PA3都是led,那麼我們只要把原來實例代碼的編號改成這個PA2、PA3就行了。
int led1=PA2;
void setup() {
pinMode(led1,OUTPUT);
}
void loop() {
digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);
}
下載到板子上,拔掉BOOT0處的跳線帽,reset,就可以看到led1在blink了。注意:每次下載程序都要進入SystemBoot模式下載!
2、串口的應用,就是用串口從板子往電腦發一個Hello World。實例裏面可以看出來,Serial.print(“”)函數是打印引號裏面的內容,而Serial.println(“”)是打印引號裏面內容之後多打一個換行符。這裏程序設置波特率爲9600,串口調試器端要設置的一樣,注意右下角。
void setup() {
Serial.begin(9600);// opens serial port, sets data rate to 9600 bps
Serial.println("Hello World!");
Serial.print("Hello World!");
Serial.print("Hello World!\n");
Serial.print("Hello World!");
}
void loop() {
}
要是還有什麼不明白,可以到這裏https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Installation
在github上面的一篇文章,描述很詳細,不過網速實在慢,平常國內下載能到2m/s,校內20-30m/s,但github也就20k/s。。。。而且用百度雲離線下載反而更慢。。。
OK,就寫這些吧。