在stm32上使用Arduino IDE(神舟I號爲例)

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,就寫這些吧。

發佈了31 篇原創文章 · 獲贊 14 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章