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檔案進行編譯。
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有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
4.1.2下載所需工具軟體:
1)下載BootLoader檔案:
使用https://github.com/rogerclarkmelbourne/STM32duino-bootloader下載包內的二進位制檔案或者直接進入https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries下載所需檔案。
2)下載bin到開發板
使用早期的flash_loader_demo_v2.8.0軟體工具串列埠下載,ST官方下載地址: http://www.st.com/en/development-tools/flasher-stm32.html
這個只簡單介紹:
3)使用STM32CubeProgrammer下載工具
軟體下載地址:
https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stm32cubeprog.html
下載安裝完成後,按下圖序號操作:
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
下載並開啟資料夾:
2)下載bin到開發板
同上,用兩種軟體通過串列埠連線都可以將bin下載到開發板。
4.3注意
如果使用STM32CubeProgrammer軟體工具,那麼也可以使用stink下載工具下載BootLoader。
硬體連線如圖:
軟體選擇如圖:
5.核心安裝(建議使用第三種5.3)
5.1支援stm32的arduino核心安裝方法之一:
1)下載檔案包
2)解壓並建立一個Arduino_STM32資料夾
路徑為Arduino安裝路徑之下。這樣在工具----->開發板下能夠獲得支援的stm32器件或者開發板。
如果使用的是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晶片進行編譯。
4)注意下載方式的選擇
如果使用的是前一步下載的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埠,上傳方式選擇如下圖):
5.2 支援stm32的arduino核心安裝方法之二
通過開發板管理器安裝arduino核心安裝方法:
1)執行Arduino。選擇檔案->首選項,在附加開發板管理器中填入以下網址:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
這樣在開發板管理器內能夠獲取開發板基本資訊,下載會自動安裝核心和庫。
2)選擇工具---->開發板----->開發板管理器
3)選擇下圖內容安裝
注意:下載速度較慢,需要耐心,或者直接翻牆,速度會飆升。
4)選擇開發板,配置下載內容
這裡看到有兩個同樣的板子名稱,原因是用不同的2種方法安裝,所以產生了2個相同名稱的板子。
同樣注意你的下載方式的選擇,如果下載了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埠,上傳方式選擇如下圖):
5.3 ST公司的arduino核心安裝
1)執行Arduino。選擇檔案->首選項,在附加開發板管理器中填入以下網址:
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
2)選擇工具---->開發板----->開發板管理器
3)選擇下圖內容安裝
注意:下載速度較慢,需要耐心,或者直接翻牆,速度會飆升。
4)選擇開發板,配置下載內容
Board選擇:
如果是下載的BootLoader方式,那麼必須選擇串列埠支援,無論是DFU方式還是HID方式,埠都會失去(因為flash被重新整理了),但會變成新的串列埠號,可繼續進行後續程式下載,當然後續需要選擇埠號,但上傳方式選擇不變。
如果不是用BootLoader的方式,可忽略。
上傳方式的選擇如下圖,根據使用的工具決定,如果是下載的BootLoader,那麼選擇對應的BootLoader,如果是使用st官方的stm32cubeprogrammer,那麼就需要連線stlink,並一定要安裝stm32cubeprogrammer。
特別要注意的是:
因為安裝路徑的關係,可能安裝路徑都不一樣,所以需要指定一個環境變數。如圖,在我的電腦,右鍵選擇屬性項,彈出如下對話方塊。
如圖,輸入你安裝路徑的執行路徑。
如;D:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin
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):
6.總結
網上很多的資料都是用Arduino_STM32的核心,但這個支援的範圍有限,使用ST核心Arduino_Core_STM32支援的晶片和開發板越來越多,並且完全開放,可以新增自己的開發板,因此建議用ST的來做開發。
相關文章
- Spring Boot專案,LocalDateTime引數在不同傳參方式下的報錯Spring BootLDA
- RT-Thread 的STM32 通用 Bootloaderthreadboot
- python不同系統下多程序啟動方式Python
- 【STM32】STM32 IAP BootLoaderboot
- Linux提權————Linux下三種不同方式的提權技巧Linux
- 用 Python 載入資料的 5 種不同方式Python
- 如何進入Android系統的Bootloader和Recovery環境Androidboot
- RR與RC隔離級別下MySQL不同的加鎖解鎖方式MySql
- js下載檔案的實現方式JS
- JavaScript~檔案下載的幾種方式JavaScript
- xgboost模型特徵重要性的不同計算方式模型特徵
- 由驅動原始碼編譯的.o檔案在不同版本的核心環境下無法通用原始碼編譯
- 選擇排序中交換資料的不同方式出現的不同結果排序
- SAP settype COMM_PR_BATCH的下載方式BAT
- 簡談檔案下載的三種方式
- vue-cli 搭建的專案處理不同環境下請求不同域名的問題Vue
- 不同種使用者下的付費機制環境
- 收集整理的16種檔案下載的方式
- spring不同配置方式的區別與優先順序Spring
- 使用 PySpark 建立新列的 4 種不同方式 - SonerSpark
- asp.net 中兩種不同方式檔案流下載的區別?ASP.NET
- PearProject 在 WSL 下的開發環境部署教程Project開發環境
- 如何使用不同的方式更改 Linux 使用者密碼Linux密碼
- 如何幫助人們以不同方式思考?
- android短影片開發,點選兩次實現不同點選效果的實現方式Android
- 新的iOS開發方式,無需伺服器,做自己的前端轉原生iOS app的框架iOS伺服器前端APP框架
- SAP 3D visual enterprise viewer 9.0 的下載方式3DView
- Javascript 實現一個post方式的檔案下載JavaScript
- Ubuntu 不同版本的下載 以及 換源Ubuntu
- nodemon+cross-env+config實現支援熱更新的能根據不同環境載入不同配置的nodejs環境ROSNodeJS
- 記錄 VMware Workstation 官方下載方式
- 前端方式實現excel下載前端Excel
- Docker下的Nacos環境開發Docker
- 大資料拯救地球環境的10種方式大資料
- Dockerfile 方式定製 lnmp 環境DockerLNMP
- Bootloader Linux啟動bootLinux
- [JS]繼承的這6種方式!(下)JS繼承
- php下請求url的幾種方式PHP