使用Arduino IDE來編寫上傳STM32以及STM8代碼

前言

文章核心

STM32的性能比Arduino的Atmel好得多,並且具有相當數量的優秀特性,這一篇中就點一下,關於如何使用Arduino IDE來編寫並燒錄STM32程序。

Arduino生態和STM32生態的區別?

Arduino IDE相比較Keil來說,使用更爲友好並且不用考慮授權問題當然它並不適合大型工程,多數時候適合去製作擁有一兩個單一功能的裝置,還有就是一些創意和想法的實現,因爲金字塔層級關係,使用Arduino以及Arduino IDE的人數會遠遠的大於STM32 和Keil/IAR,當然它從專業角度來說,並不適合商用。不過在投資人那邊炫一下還是可以的,只要你是報芯片型號的話。

 

操作步驟

首先啓動Arduino IDE,需要增加兩個地址,他們都是讓Arduino IDE的開發板中出現STM32型號的途徑只是一個是官方維護一個算第三方吧

http://dan.drown.org/stm32duino/package_STM32duino_index.json
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

如果你要使用STM8,就用這個,其他步驟是類似的,STM8的github項目網址:https://github.com/tenbaht/sduino

https://github.com/tenbaht/sduino/raw/master/package_sduino_stm8_index.json

然後,我們需要去下載板子的模版,打開後會自動刷新,然後選擇stm32,一共有四個項目,選擇包含有自己的STM32芯片型號的下載即可,

官方的多隻有一些官方開發板,比如說NUCLEO系列,我手頭這一個就是比較新的STM32G0

對現有的下載選項進行配置,這裏提供一個參考,型號依據你的板子的型號來

在,下載之前需要先安裝STM32Programmer,國內下載站地址如下

http://www.downza.cn/soft/274655.html

下載上傳成功與否,必須要按照調用的燒寫器程序提示來確定,下圖最下一行是Error,意思是模式不對,燒寫的模式有SWD,Serial和DFU,如果你有STLINK就選擇SWD,如果沒有識別出來,更換USB接口再次嘗試。另外就是檢查燒寫模式是否是SWD

上圖中我使用的測試代碼如下,通過STM32上面的UNO接口連接的是一個LCD Keypad Shield

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

char msgs[5][16] = {"Right Key OK ",
                    "Up Key OK    ",               
                    "Down Key OK  ",
                    "Left Key OK  ",
                    "Select Key OK" };

int adc_key_val[5] ={50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;

void setup()
{
  lcd.clear(); 
  lcd.begin(16, 2);
  lcd.setCursor(0,0); 
  lcd.print("ADC key testing"); 
}

void loop()
{
  adc_key_in = analogRead(0);    // read the value from the sensor 
  key = get_key(adc_key_in);  // convert into key press

  if (key != oldkey)   // if keypress is detected
   {
    delay(50);  // wait for debounce time
    adc_key_in = analogRead(0);    // read the value from the sensor 
    key = get_key(adc_key_in);    // convert into key press
    if (key != oldkey)    
    {   
      lcd.setCursor(0, 1);
      oldkey = key;
      if (key >=0){
           lcd.print(msgs[key]);              
      }
    }
  }
 delay(100);
}

// Convert ADC value to key number
int get_key(unsigned int input)
{
    int k;

    for (k = 0; k < NUM_KEYS; k++)
    {
      if (input < adc_key_val[k])
 {
            return k;
        }
   }

    if (k >= NUM_KEYS)k = -1;  // No valid key pressed
    return k;
}

 

有時候還會出現 ST-LINK error (DEV_CONNECT_ERR) 這個問題,遇到這個問題需要排除下是否被佔用比如後臺開着STM32Programmer,最簡單的方法是重新拔插USB接口

 

下載成功後的提示如下

最終,可以直接的進行顯示,使用起來和Arduino一樣

 關於STM8的補充說明

多數操作中,STM8都是和STM32類似的,但是在燒寫這一塊有一些區別。首先STM8是使用STLINK來連接的,目前沒有找到用BootLoader的方式進行燒寫

 

其次,使用STLINK會沒有端口這是正常的,點擊燒寫按鈕,依然可以按計劃運行

只要出現這一段話就是正常下載到STM8裏面了

附帶STM8S103F的Arduino引腳對應圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章