這篇簡介 WinAVR 並用一個簡單的例子示範 WinAVR 的使用方法。
WinAVR 簡介
WinAVR 是一套 Windows 平台的 AVR microcontrollers 韌體開發工具,它包含了許多開發 AVR 韌體所需的工具,包括 avr-gcc (GNU GCC C 與 C++ Compiler), avrlibc (C Library), avrdude (燒錄工具), avr-gdb (debugger) 以及可以自動產生 Makefile 的 MFile 等。
準備 WinAVR
你可以到官網下載最新版 WinAVR,然後按照指示安裝。
Arduino IDE 也使用 WinAVR 編譯與燒錄程式,如果你有在使用 Arduino,那麼就不用下載 WinAVR,因為 Arduino IDE 就有一份 WinAVR。你只要把底下幾個路徑加到 PATH 環境變數裏就行了:
C:\arduino-00xx\hardware\tools\avr\bin;
C:\arduino-00xx\hardware\tools\avr\utils\bin;
C:\arduino-00xx\hardware\tools\avr\etc
其中,arduino-00xx 是 Arduino IDE 的版本號碼,例如 arduino-0021。
編譯 Blink 範例
我們用一支簡單的程式示範如何使用 WinAVR 編譯程式,底下是 Blink.c 的程式碼:
關於 AVR 程式怎麼撰寫,不在本文的討論範圍。
接著下指令編譯程式:
avr-gcc -Os -DF_CPU=16000000 -mmcu=atmega328p -o Blink.o -c Blink.c
avr-gcc -Os -DF_CPU=16000000 -mmcu=atmega328p -o Blink.elf Blink.o
avr-objcopy -O ihex Blink.elf Blink.hex
其中,"-DF_CPU=16000000 -mmcu=atmega328p" 告訴 avr-gcc 所用的晶片是 atmega328p 晶片,振盪頻率為 16 MHz。我用的 AVR 晶片是 atmega328p (Arduino Duemilanove 及 UNO 所用的晶片),振盪器頻率是 16 MHz。
編譯完成後會產生 Blink.hex。
用 avrdude 燒錄韌體
接著就可以用 avrdude 把 blink.hex 燒錄到 Arduino 板子上:
avrdude -q -c stk500v1 -P com4 -b 57600 -p atmega328p -U flash:w:Blink.hex:i
當 Blink.hex 燒錄到板子上後,Arduino pin 13 上的 LED 就會開始閃爍。
我用的 Arduino 板子是 Duemilanove,接在 COM4 上,Duemilanove 用的燒錄 baud rate 是 57600 bps。你可能得根據的硬體和作業環境做適當的調整。
關於 avrdude 的使用方法,請參考「用 avrdude 燒錄 Arduino Sketch」一文。
延伸閱讀