希望給工作中偶爾要用的一些輔助板卡(例如運行信息現場記錄)找一個快速開發的手段,Arduino作為流行的開源嵌入硬件框架,組件豐富,資料眾多,所以想以Arduino作為平台。但是Arduino板子基本上基於AVR,但是目前日常工作以ARM為主,而且手頭也有不少STM32F103的開發板,所以想看一下在一些開發板上跑Arduino的可能性,經過搜索,找到以下兩個方案(這是搭建過程記錄,比較沒有條理):
Arduino_STM32
Arduino_STM32下載以后,直接放到目錄<arduino_dir>\hardware下(例如“C:\arduino\hardware\Arduino_STM32”)。重啟以后,在板卡列表里面,就可以看到新增加的板卡類型了。
BootLoader,用JLink燒寫,STM32duino-bootloader\binaries\generic_boot20_pc13.bin直接燒寫就可以,在手頭的STM32F103板子上,PC13上加一個LED,跳線J5跳到2-3上(即把USB口配成generic_f103板),驅動需要運行 Arduino_STM32\drivers\win下的install_drivers.bat來安裝,具體原因見:Maple drivers。簡單地說,就是用“wdi-simple”來生成Windows需要的簽名驅動程序。
更新程序需要連接串口,然后手動復位板卡到Bootloader,然后下載。
板卡如何下載程序可以參考Uploading_a_sketch,目前的結果Boot下的USB下載可以工作,但是串口不行。解決方法是選“STM32duino bootloader”下載,然后在下載的時候,看到信息提示按復位,進入Bootloader,用USB下載。
下載時候出現錯誤提示:“error resetting after download: usb_reset: could not reset device, win error: The system cannot find the file specified.”,可以直接忽略,見STM32 Bootloader on Win7 64bit
stm32duino
主要參考Getting Started,這應該是偏向於官方的支持,比較正規有條理。
IDE的菜單“File->Perference”,在對話框的“Additional Boards Managers URLs”里,填寫“https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json”,然后在菜單“Tools->Board: xxxxxx->Board Manager …”,在對話框中,選擇“STM32 Cores”安裝。
增加類似的板卡變種:Add a new variant (board)
由於手頭最類似的板子是Nucleo F072RB,故需要在“Nucleo F091RC”基礎上做一些修改,增加“Nucleo F072RB”板:“%LOCALAPPDATA%\Arduino15\packages\STM32\hardware\stm32\1.5.0\variants”下,復制“NUCLEO_F091RC”為“NUCLEO_F072RB”,更改“ldscript.ld”里面的芯片存儲器定義,去掉“PeripheralPins.c”里面的“I2C1”和“USART5~USART8”相關的定義,運行LED和串口測試程序:
const int pin = 13; void setup() { // put your setup code here, to run once: pinMode(pin, OUTPUT); Serial.begin(115200); } int n = 0; void loop() { // put your main code here, to run repeatedly: digitalWrite(pin, HIGH); delay(1000); digitalWrite(pin, LOW); delay(1000); Serial.print("n="); Serial.println(n++); }
運行正常,LD2閃爍,虛擬串口可以收到打印的信息,OK。
