Key bites:
- GPIO: we can atomically SET/RESET an entire gpio bank with the BSRR register.
- DMA: dma is able to read SRAM and write in any peripheral mapped in memory (for example our GPIO's BSRR register)
We will need a DMA channel for each GPIO bank.
- Triggers (Timers): we need to deterministically trigger each dma transaction.