ws2812-pwm-dma 0.1.1

Pwm and Dma based Ws2812 led driver
Documentation
For usage with the [smart-leds](https://github.com/smart-leds-rs/smart-leds) 
crate.

An [stm32f4xx-hal](https://github.com/stm32-rs/stm32f4xx-hal) driver 
for ws2812 leds using a pwm timer and dma streaming.

It uses a buffer to store the signal & transmits it automatically in
the background over dma.

# Why
Compared to packages like [ws2812-spi](https://github.com/smart-leds-rs/ws2812-spi-rs) 
this implementation requires less timing constraints and has no problems with 
being interrupted by interrupts.

# Why not
a big problem of the current implementation is storage requirements.
this needs 48 or 96 bytes per LED (depending on the timers ARR size).

the code is also not very portable since there is no general
abstraction over DMA transfers. therefore currently only the
[stm32f4xx-hal](https://github.com/stm32-rs/stm32f4xx-hal) is supported.

# Example
```
let led_buf={
    static mut led_buf:[u16;24*LED_COUNT+8]=[0;24*LED_COUNT+8];
    unsafe{&mut led_buf};
}

let gpiob=dp.GPIOB.split();
let dma1=dp.DMA1.split();

let ws_pin=gpiob.pb5.into_alternate();

// uses stream channel 5 and Timer channel 2
let mut ws=Ws2812Pwm::new(dp.TIM3,ws_pin,dma1.5,led_buf,&clocks);

ws.write((0..=LED_COUNT).map(|_|RGB8::new(255,255,255)));
```