Expand description


Common HAL (hardware abstraction layer) for Arduino boards.

Note: This version of the documentation was built for Arduino Uno. This means that only items which are available for this board are visible. If you are using a different board, try building the documentation locally with

cargo doc --open

in your project (where arduino-hal is included with the feature-flag for your board).


For setting up a new project, the avr-hal-template is the recommended baseline. Applications should be built ontop of the following skeleton:


use panic_halt as _;

fn main() -> ! {
    let dp = arduino_hal::Peripherals::take().unwrap();
    let pins = arduino_hal::pins!(dp);

    loop { }

For examples, please check the avr-hal examples: https://github.com/Rahix/avr-hal/tree/main/examples


pub use atmega_hal as hal;
pub use atmega_hal::pac;
pub use hal::Peripherals;
pub use port::Pins;
pub use adc::Adc;
pub use i2c::I2c;
pub use spi::Spi;
pub use usart::Usart;


Analog to Digital converter.

MCU core clock support.

I2C bus controller.

GPIO & Pin control.

Simple PWM output for supported Pins.

SPI controller.


Convenience macro to instanciate the Pins struct for this board.


Delay execution for a number of milliseconds.

Delay execution for a number of microseconds.

Type Definitions

Default clock speed for this board.

Delay type for embedded-hal compatibility.

Attribute Macros

Attribute to declare the entry point of the program