Arduino IDE編譯代碼下載程序很方便夕春,但是有如下理由我們?nèi)孕枰帽容^方便快捷的方法燒寫編譯后的二進(jìn)制文件蒂誉。
- 源代碼不需要修改圆丹,可以用IDE燒寫郊丛,但是用IDE打開源代碼挺耗時
- 需要給很多個成熟的產(chǎn)品燒錄程序
- 不想把源代碼發(fā)給他人,但是希望他人可以自己燒錄程序(編譯后的二進(jìn)制文件)
- 需要頻繁燒錄不同的程序昆稿,比如Arduboy等掌機(jī)更換內(nèi)置游戲
有挺多工具軟件可以完成脫離Arduino IDE燒錄Hex二進(jìn)制文件的工作纺座,他們大多是通過GUI前端在后臺調(diào)用avrdude程序。大多數(shù)情況下溉潭,他們可以很好的工作净响,但是要么是不跨平臺,只能用于Windows(這類工具Windows版本的比較多喳瓣,也有些是python編寫的馋贤,但是又打包為exe文件運(yùn)行,也是只支持Windows)夫椭,要么就是工具本身有些限制掸掸。
我實(shí)驗(yàn)了用命令行的方式來燒寫Hex文件,這樣的話蹭秋,只要系統(tǒng)內(nèi)安裝有Arduino IDE扰付,甚至是只要安裝了avrdude程序,就可以方便的燒寫Hex文件仁讨,而且可以跨平臺羽莺,無論Windows,macOS洞豁,或者是Linux(樹莓派盐固?)都可以工作。
首先丈挟,我的系統(tǒng)里安裝了Arduino IDE v1.8.9刁卜。 目前,這個版本是最新版曙咽。
確定Arduino IDE編譯好的Hex文件的位置
- 在File菜單的Preferences里面蛔趴,打開preferences.txt文件,在更改之前例朱,關(guān)閉Arduino IDE孝情。
- 新建一個文件夾C:\Users\zz\Documents\Arduino\hex (zz是我的Windows登錄用戶名)
- 在preferences.txt文件里加入如下一行, 并保存
build.path=C:\Users\zz\Documents\Arduino\hex
對于macOS的話
build.path=/Users/zz/Documents/Arduino/hex
- 打開Arduino IDE,并打開Blink示例程序洒嗤,Ctrl-R編譯后箫荡,會在新建的文件夾中看到編譯好的Blink.ino.hex文件
C:\Users\zz\Documents\Arduino\hex>dir
驅(qū)動器 C 中的卷沒有標(biāo)簽。
卷的序列號是 1234-5678
C:\Users\zz\Documents\Arduino\hex 的目錄
2019/06/08 14:28 <DIR> .
2019/06/08 14:28 <DIR> ..
2019/06/08 14:28 13 Blink.ino.eep
2019/06/08 14:28 13,920 Blink.ino.elf
2019/06/08 14:28 2,640 Blink.ino.hex
2019/06/08 14:28 4,000 Blink.ino.with_bootloader.hex
2019/06/08 14:28 968 build.options.json
2019/06/08 14:28 <DIR> core
2019/06/08 14:28 397 includes.cache
2019/06/08 14:28 <DIR> libraries
2019/06/08 14:28 <DIR> preproc
2019/06/08 14:28 <DIR> sketch
6 個文件 21,938 字節(jié)
6 個目錄 31,183,998,976 可用字節(jié)
嘗試用Arduino IDE下載程序渔隶,并觀察編譯和燒寫過程
- 在Arduino IDE中的preferences設(shè)置對話框中show verbose output during: 選中compilation和upload羔挡,保存設(shè)置
- 打開Blink示例程序,連接Arduino Uno并Ctrl-U(Upload)
- 然后在主界面的信息提示區(qū)域,會打印輸出編譯和燒寫過程婉弹。輸出內(nèi)容很多睬魂,最關(guān)鍵的是avrdude的命令行
C:\arduino-1.8.9\hardware\tools\avr/bin/avrdude -CC:\arduino-1.8.9\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\zz\Documents\Arduino\hex/Blink.ino.hex:i
- 我也嘗試了Arduino Micro (更換不同的板子后终吼,需要注意Arduino IDE的board和Port的設(shè)定變更)镀赌,命令行是這樣的:
C:\arduino-1.8.9\hardware\tools\avr/bin/avrdude -CC:\arduino-1.8.9\hardware\tools\avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -PCOM4 -b57600 -D -Uflash:w:C:\Users\zz\Documents\Arduino\hex/Blink.ino.hex:i
- 可以清楚的看到Arduino IDE調(diào)用avrdude燒寫hex文件,以及相關(guān)命令行參數(shù)
- 在macOS系統(tǒng)下际跪,我看到的是
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/cu.usbmodem141301 -b115200 -D -Uflash:w:/Users/zz/Documents/Arduino/hex/Blink.ino.hex:i
avrdude的參數(shù)
- -C <config-file> 制定配置文件的位置.
對于Windows系統(tǒng)的例子
-CC:\arduino-1.8.9\hardware\tools\avr/etc/avrdude.conf
對于macOS系統(tǒng)的例子
-C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf
- -v 打印詳細(xì)的提示信息.
- -p <partno> 必須項(xiàng). 指定AVR零件號.
對于Arduino Uno
-patmega328p
對于Arduino Micro
-patmega32u4
- -c <programmer> 指定編程器的類型.
對于Arduino Uno
-carduino
對于Arduino Micro
-cavr109
- -P <port> 指定連接的串口.
對于Windows系統(tǒng)的例子
-PCOM3
對于macOS系統(tǒng)的例子
-P/dev/cu.usbmodem141301
- -b <baudrate> 指定RS-232串口波特率.
對于Arduino Uno
-b115200
對于Arduino Micro
-b57600
- -D 禁止自動擦除閃存空間
- -U <memtype>:r|w|v:<filename>[:format]
指定存儲類型商佛,操作方式,hex文件名以及文件類型.
對于Windows系統(tǒng)的例子
-Uflash:w:C:\Users\zz\Documents\Arduino\hex/Blink.ino.hex:i
對于macOS系統(tǒng)的例子
-Uflash:w:/Users/zz/Documents/Arduino/hex/Blink.ino.hex:i
命令行燒寫hex文件
這樣我們就可以用命令行很便捷的燒寫hex文件到Arduino里了
Windows
Uno
C:\arduino-1.8.9\hardware\tools\avr\bin\avrdude -CC:\arduino-1.8.9\hardware\tools\avr\etc\avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\zz\Documents\Arduino\hex\Blink.ino.hex:i
Micro
C:\arduino-1.8.9\hardware\tools\avr\bin\avrdude -CC:\arduino-1.8.9\hardware\tools\avr\etc\avrdude.conf -v -patmega32u4 -cavr109 -PCOM4 -b57600 -D -Uflash:w:C:\Users\zz\Documents\Arduino\hex\Blink.ino.hex:i
macOS
Uno
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/cu.usbmodem141301 -b115200 -D -Uflash:w:/Users/zz/Documents/Arduino/hex/Blink.ino.hex:i
Micro
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/cu.usbmodem141401 -b57600 -D -Uflash:w:/Users/zz/Documents/Arduino/hex/Blink.ino.hex:i
注意
- 對于32u4芯片的Arduino板子姆打,必須在燒寫前先按一下板子上的Reset按鈕良姆,等1-2秒再執(zhí)行燒寫命令
- 如果有新的芯片類型或者不同板子的Arduino及其兼容版,只要能先嘗試用Arduino IDE編譯后燒寫幔戏,得到燒寫相關(guān)的命令行信息玛追,就可以手動的用命令行燒寫
總結(jié)
- 命令行燒寫hex文件比用IDE打開源文件燒寫要快捷很多
- 用于燒寫的命令行可以在其他程序(比如Python)中調(diào)用,非常方便用于二次開發(fā)