天天看點

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

STM32在ArduinoIDE環境下的開發

1.前言

網上有不少介紹Arduino下開發STM32的文章,但因為時間發展關系,核心庫的開發和第三方庫的發展有好幾種,另外采用的下載下傳方式也各不相同,是以容易讓人進坑。為此,試通過此文綜合介紹下STM32在ArduinoIED環境下的開發,減少入坑幾率。

2.基本介紹

STM32在ArduinoIDE的環境下開發使用,可以做到程式開發的簡單容易,為更多非電子專業的應用提供了便捷條件。使用時要注意幾個方面:第一是使用哪個核心做開發;第二個是注意準備使用哪個下載下傳工具如:外帶的序列槽工具,stlink下載下傳器、自帶的序列槽、自帶的DFU方式、自帶的HIDUSB口等。第三個是關注下BootLoader,一般建議如果有外帶下載下傳工具如stlink、USB轉序列槽等工具,那麼就不用關心這個BootLoader,用PA9、PA10做序列槽,或者stlink直接接SWD接口就可以了,省心友善;如果是想接線簡單,紮個勢,隻要連接配接一跟USB線即可下載下傳程式,那麼就關注下Bootloader。

3.支援stm32的Arduino核心

3.1 支援Cotex-M3的arduino官方核心

使用時必須安裝此核心,這樣才能夠對stm32檔案進行編譯。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

3.2第三方核心

(1)LibMaple核心

其早期有專門的團隊做這方面的開發,即Maple STM32等,團隊已經不在了。rogerclarkmelbourne目前仍然支援。其核心庫為Arduino_STM32,Bootloaderw為STM32duino-bootloader,看起來還在繼續更新,支援之前的Maple STM32 DUF模式。主要硬體支援F1和F4兩種,Bootloader主要支援DFU模式。下載下傳位址為:

rogerclarkmelbourne/Arduino_STM32:

https://github.com/rogerclarkmelbourne/Arduino_STM32

rogerclarkmelbourne/STM32duino-bootloader:

https://github.com/rogerclarkmelbourne/STM32duino-bootloader

(2)Steve改進的LibMaple 核心

Steve在原來LibMaple的基礎上增加了一個F3的内容。下載下傳位址為:

https://github.com/stevstrong/Arduino_STM32

(3)STMicroelectronics(ST)公司編寫的核心

ST官方已經自己整合并開發了自己的STM32的核心庫:Arduino_Core_STM32。編譯采用GCC-ARM的開源編譯器,支援win、linux和marc。該庫也支援更多的硬體和開發闆,并可以增加自定義的開發闆。并且支援ST公司的STM32CubeProgrammer下載下傳方式,可以實作STM32CubeProgrammer的SWD、DFU和Serial的程式下載下傳。同時支援上述兩種下載下傳方式:Maple DFU方式和USBHID方式。

這種方式目前支援的晶片和開發闆最多,也是最流行的方式。

4.需要BootLoader的開發(無需BootLoader的開發,可參考5.3内容)

這個BootLoader實際是客戶方的鈎子程式,仍然再使用者flash區内。和晶片内部固話的BootLoader程式有一定差別。通常,如上所說的,不想用外部下載下傳裝置,或者購買的開發闆的Bootloader被刷掉了,那麼就需要用到這個BootLoader。

目前開源的BootLoader有DFU方式的,USBHID、USBCDC和SD卡方式的幾種。最常用的是DFU和USBHID,其它幾種使用範圍有限。當然,下載下傳這個BootLoader也要用到外部工具,比如USB轉序列槽工具(刷機線)、或者Stlink。

4.1DFU方式的Bootloader下載下傳(下圖為序列槽方式下載下傳,其它方式也可)

4.24.1.1硬體連接配接

開發闆boot設定:boot0=1,接高電平 boot1=0接低電平

連接配接如圖:Rx—>A9 Tx---->A10 GND–>G VCC–>3.3

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

4.1.2下載下傳BootLoader到開發闆:

1)下載下傳BootLoader檔案:

使用https://github.com/rogerclarkmelbourne/STM32duino-bootloader下載下傳包内的二進制檔案或者直接進入https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries下載下傳所需檔案。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

2)用flash_loader_demo工具下載下傳bin到開發闆

使用早期的flash_loader_demo_v2.8.0軟體工具序列槽下載下傳,ST官方下載下傳位址: http://www.st.com/en/development-tools/flasher-stm32.html

這個隻簡單介紹:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

3)使用STM32CubeProgrammer工具下載下傳bin到開發闆

軟體下載下傳位址:

https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stm32cubeprog.html

下載下傳安裝完成後,按下圖序号操作:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

4.2 USBHID方式的Bootloader下載下傳

1)下載下傳BootLoader檔案:

Serasidis/STM32_HID_Bootloader:

https://github.com/Serasidis/STM32_HID_Bootloader

bin檔案位址:

https://github.com/Serasidis/STM32_HID_Bootloader/releases

下載下傳并打開檔案夾:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

2)下載下傳bin到開發闆

同上,選擇hid_generic_pc13.bin,用上述兩種軟體都可以将bin下載下傳到開發闆。

4.3注意

如果使用STM32CubeProgrammer軟體工具,那麼也可以使用stink下載下傳工具下載下傳BootLoader。

硬體連接配接如圖:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

軟體選擇如圖:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

5.核心安裝(建議使用第三種5.3)

5.1支援stm32的arduino核心安裝方法之一:

1)下載下傳檔案包

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

2)解壓并建立一個Arduino_STM32檔案夾

路徑為Arduino安裝路徑之下。這樣在工具----->開發闆下能夠獲得支援的stm32器件或者開發闆。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

如果使用的是Maple或者Maple Mini開發闆,那麼需要安裝串行和DUF驅動。驅動可以在該檔案夾下尋找,打開一個CMD windows視窗,在/drivers/win路勁下執行install_driver.bat檔案。

3)運作Arduino IDE,然後在“工具”菜單上,選擇“ Boards”管理器,然後從可用闆清單中安裝Arduino SAM闆(Cortex-M3)。

必須執行此步驟,它将安裝arm-none-eabi-g ++工具鍊,如上所說的arduino核心程式,将對stm32ARM晶片進行編譯。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

4)注意下載下傳方式的選擇

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

如果使用的是前一步下載下傳的BootLoader,是DFU方式的選第一個STM32duino BootLoader,如果下載下傳的是HID那麼選擇HID BootLoader。如果直接連接配接的是外部工具,如連接配接的是usb轉序列槽的選Serial,連接配接的是stlink選Stlink,Jlink選Jlink,直接連接配接就和前面的BootLoader沒有關系了。

5)打開一個blink程式,編譯并上傳

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上傳成功提示資訊(此處選擇HID BootLoader,需要提前下載下傳BootLoader為HID的 BootLoader,IDE中下載下傳方式選擇HID BootLoader2.0,硬體直接接USB端口,上傳方式選擇如下圖):

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

5.2 支援stm32的arduino核心安裝方法之二

通過開發闆管理器安裝arduino核心安裝方法:

1)運作Arduino。選擇檔案->首選項,在附加開發闆管理器中填入以下網址:

http://dan.drown.org/stm32duino/package_STM32duino_index.json

這樣在開發闆管理器内能夠擷取開發闆基本資訊,下載下傳會自動安裝核心和庫。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

2)選擇工具---->開發闆----->開發闆管理器

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

3)選擇下圖内容安裝

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

注意:下載下傳速度較慢,需要耐心,或者直接翻牆,速度會飙升。

4)選擇開發闆,配置下載下傳内容

這裡看到有兩個同樣的闆子名稱,原因是用不同的2種方法安裝,是以産生了2個相同名稱的闆子。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

同樣注意你的下載下傳方式的選擇,如果下載下傳了BootLoader使用,那麼就選對應的BootLoader,如果直接接外部裝置,就選外部下載下傳器。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

5)打開一個blink程式,編譯并上傳

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上傳成功提示資訊如下圖(此處選擇DFU,提前下載下傳BootLoader為STM32duino BootLoader,IDE中下載下傳方式選擇STM32duino BootLoader,硬體直接接USB端口,上傳方式選擇如下圖):

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)
STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

5.3 ST公司的arduino核心安裝

1)運作Arduino。選擇檔案->首選項,在附加開發闆管理器中填入以下網址:

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

2)選擇工具---->開發闆----->開發闆管理器

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

3)選擇下圖内容安裝

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

注意:下載下傳速度較慢,需要耐心,或者直接翻牆,速度會飙升。

4)選擇開發闆,配置下載下傳内容

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

Board選擇:

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

如果是下載下傳的BootLoader方式,那麼必須選擇序列槽支援,無論是DFU方式還是HID方式,端口都會失去(因為flash被重新整理了),但會變成新的序列槽号,可繼續進行後續程式下載下傳,當然後續需要選擇端口号,但上傳方式選擇不變。

如果不是用BootLoader的方式,可忽略。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

上傳方式的選擇如下圖,根據使用的工具決定,如果是下載下傳的BootLoader,那麼選擇對應的BootLoader,如果是使用st官方的stm32cubeprogrammer,那麼就需要連接配接stlink,并一定要安裝stm32cubeprogrammer。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

特别要注意的是:

因為安裝路徑的關系,可能安裝路徑都不一樣,是以需要指定一個環境變量。如圖,在我的電腦,右鍵選擇屬性項,彈出如下對話框。

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

如圖,輸入你安裝路徑的執行路徑。

如;D:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

5)打開一個blink程式,編譯并上傳

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上傳成功提示資訊(此處選擇SWD方式,外接stlink):

STM32在ArduinoIDE環境下的開發(不同的下載下傳方式,不同的BootLoader方式,無需BootLoader方式)

6.總結

網上很多的資料都是用Arduino_STM32的核心,但這個支援的範圍有限,使用ST核心Arduino_Core_STM32支援的晶片和開發闆越來越多,并且完全開放,可以添加自己的開發闆,是以建議用ST的來做開發。