stm32l0xx-hal 0.5.0

Peripheral access API for STM32L0 series microcontrollers
Documentation
stm32l0xx-hal
=============

[![Build Status](https://travis-ci.com/stm32-rs/stm32l0xx-hal.svg?branch=master)](https://travis-ci.com/stm32-rs/stm32l0xx-hal)

[_stm32l0xx-hal_](https://github.com/stm32-rs/stm32l0xx-hal) is a Hardware Abstraction Layer (HAL) for the STMicro STM32L0xx family of microcontrollers.

This crate relies on Adam Greig's [stm32l0](https://crates.io/crates/stm32l0) crate to provide appropriate register definitions and implements a partial set of the [embedded-hal](https://github.com/rust-embedded/embedded-hal) traits.

Based on the [stm32l1xx-hal](https://github.com/stm32-rs/stm32l1xx-hal) crate by Vitaly Domnikov and the [stm32f4xx-hal](https://github.com/stm32-rs/stm32f4xx-hal) crate by Daniel Egger.


# Supported Configurations

* __stm32l0x1__
* __stm32l0x2__
* __stm32l0x3__

# Build Dependencies

1. Rustup toolchain installer

    https://rustup.rs


# Toolchain Configuration

`$ rustup target add thumbv6m-none-eabi`

# Build Examples

`$ cargo build --release --examples --features stm32l0x1,rt`

# Using as a Dependency

To use the stm32l0xx-hal [crate](https://crates.io/crates/stm32l0xx-hal) as a dependency, add the following definition to your `Cargo.toml`:

``` 
[dependencies.stm32l0xx-hal]
version = "0.5.0"
features = ["stm32l0x1", "rt"]
```

Example Projects: [HABEXpico](https://github.com/arkorobotics/HABEXpico/tree/master/Firmware)

# Dependecies for Flashing

1. Download and install the arm-none-eabi toolchain

	https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
	We recommend installing the precompiled binaries to '/usr/local/opt'. 
	Add the bin folders (/bin & /arm-none-eabi/bin) to your environments variable 'PATH'.

2. Install STLink Tool (>=v1.5.1)

	https://github.com/texane/stlink

3. Install OpenOCD (OPTIONAL)

    NOTE: OpenOCD v0.10.0 does not fully support the stm32l0 family MCU. We recommend using `gnu-mcu-eclipse/openocd` instead:

    https://gnu-mcu-eclipse.github.io/openocd/install/
    We recommend installing the precompiled binaries to '/usr/local/opt'. 
	Add the bin folders (i.e. - /usr/local/opt/gnu-mcu-eclipse/openocd/0.10.0-12-20190422-2015/bin) to your environments variable 'PATH'.

4. Install GDB Dashboard (OPTIONAL)

	https://github.com/cyrus-and/gdb-dashboard

# Flashing

The following instructions outline how-to on flashing the 'serial' example code. This can be extended to any other example code.

## Flashing with ST-Flash:

1. Flash the microcontroller using the flash script
    ``` 
    $ ./flash.sh target/thumbv6m-none-eabi/release/examples/serial
    ```

## Flashing with OpenOCD

1. Flash the microcontroller using the openocd flash script
    ``` 
    $ ./openocd_flash.sh target/thumbv6m-none-eabi/release/examples/serial
    ```

# Debugging

## Debugging with GDB

1. Terminal 1 - OpenOCD Session:
    ``` 
    $ ./openocd_session.sh
    ```
    
2. Terminal 2 - GDB Session:
    ``` 
    $ ./gdb_session.sh target/thumbv6m-none-eabi/release/examples/serial
    ```

## Debugging with GDB Py and GDB Dashboard

1. Terminal 1 - OpenOCD Session:
    ``` 
    $ ./openocd_session.sh
    ```

2. Terminal 2 - GDB Py Session:
    ``` 
    $ ./gdb_session.sh target/thumbv6m-none-eabi/release/examples/serial -d
    ```

    Note: Users can redirect the dashboard output to separate terminal (i.e. - ttys001) using:
    ```
    >>> dashboard -output /dev/ttys001
    ```

Contibutor Notes
---------

- Revert local dependencies to external cargo and uncomment configurations before committing

License
-------

0-Clause BSD License, see [LICENSE-0BSD.txt](LICENSE-0BSD.txt) for more details.