modm:driver:ws2812: WS2812 Driver¶
Drives any number of chained WS2812 LEDs using a 3-bit SPI encoding (0 -> 100, 1 -> 110) running at 3 MHz. Thus, writing one LED takes 24µs and 9 bytes of memory.
There are several caveats:
- This only provides a blocking write API, due to technical limitations.
- Atomicity is not enforced, this should be done externally if required.
- The memory footprint is 3x as large, due to the bit stuffing for SPI.
- There is no enforced reset period of at least 50µs after the write is finished, it is up to the user to not trigger another write too early.
This driver directly accesses the STM32 HAL to keep the transmit register full, due to a lack of DMA capability in modm, thus this driver is STM32-only for now.
This driver requires a 3 MHz ±10% SPI clock in order to get the protocol timing right. Depending on your device clock tree and the SPI prescalers, this might require lowering the frequency of the entire device! If this is unacceptable, consider using APA102.
This module is only available for stm32.
Limited availability: Check with 'lbuild discover' if this module is available for your target!