Hardware Abstraction Layer for AVR microcontrollers and common boards (for example Arduino). Based on the avr-device
crate.
This is a new version of avr-hal
! Older versions can be found in the old
branch but will no longer get support.
You need a nightly Rust compiler for compiling Rust code for AVR. Note: Due to a regression, versions after nightly-2021-01-07
are currently broken (see #124). Please use that version of the compiler for now. The correct version will be installed automatically.
On Ubuntu, you'll need to install dependencies:
sudo apt install avr-libc gcc-avr pkg-config avrdude
Next, install "ravedude", a tool which seamlessly integrates flashing your board into the usual cargo workflow:
cargo +stable install ravedude
Go into ./examples/arduino-uno
(or the directory for whatever board you want), and run the following commands:
cd examples/arduino-uno
# Build and run it on a connected board
cargo run --bin uno-blink
The best way to start your own project is via the avr-hal-template
which you can easily use with cargo-generate
:
cargo install cargo-generate
cargo generate --git https://github.com/Rahix/avr-hal-template.git
The avr-hal
repository is a workspace containing all components making up the HAL. Here is an overview:
arduino-hal
is the batteries-included HAL for all Arduino & similar boards. This is what you probably want to use for your projects. It is intentionally built to abstract away the differences between boards as much as possible.
The examples directory contains lots of examples for common hardware. Do note that not all examples were ported to all boards, but there is a good chance that you can still use the code. Currently, the Arduino Uno crate contains the most examples.
HAL crates for AVR microcontroller families. If you have a custom board, you'll want to work with these crates. Please check their documentation for a list of supported MCUs.
This is a generic crate containing most of the HAL implementaions in the form of macros which are instanciated in each HAL crate for the specific MCUs. If you intend to write drivers that work with any AVR chip, targeting avr-hal-generic
is probably the best route.
The avr-specs/
directory contains rustc target definitions for all supported microcontrollers. You will need these for compiling rust code for AVR. The avr-hal-template
already includes them for convenience.
ravedude
is a utility for seamlessly integrating avrdude and a serial console into the cargo workflow. With a bit of configuration (check its README!) you can then upload your code to your board and view its output over the serial console by just using cargo run
as you would normally.
This project is not affiliated with either Microchip (former Atmel) nor any of the Vendors that created the boards supported in this repository.
avr-hal is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.