STM32 Series #12: Optimization and Assembly in C

The compiler transforms code while preserving meaning — but forget volatile and it changes the meaning too. See how assembly changes between -O0 and -O2 with objdump, and close out 12 episodes with the ‘conditions for embedded mastery.’

May 8, 2026 · 26 min · 

STM32 Series #11: Linker Scripts and Map Files Explained

“RAM is full!” “A variable is changing on its own…” The answer is in the map file. This episode covers what .text/.data/.bss really are, how to read a linker script, how to stop stack overflows — and what the 512,000-line Claude Code leak teaches us about map file hygiene.

May 2, 2026 · 19 min · 

STM32 Series #10: DMA — Transfers That Free the CPU

Stop having the CPU send bytes one at a time — let DMA handle everything. By DMA-ifying UART transmission, the CPU is freed to do real work. Episode 10 builds intuition for throughput, latency, and bus contention.

April 30, 2026 · 16 min · 

STM32 Series #9: Interrupt Design Anti-Patterns

printf in ISR, missing volatile, heavy processing, forgotten flag clear — we deliberately trigger every classic embedded landmine and watch them fail. Applies to Arduino, ESP32, Renesas, PIC — every MCU with interrupts.

April 26, 2026 · 18 min · 

STM32 Series #8: Interrupts — Vector Table, NVIC, Context

Why does polling fail when you need to ‘do something every 1ms’? Understand the vector table, NVIC, and context saving — then implement a 1ms periodic event with TIM2 interrupts.

April 17, 2026 · 24 min · 

STM32 Series #7: The Weight of a Single Clock Cycle

How many CPU cycles does ‘wait 1 second’ actually consume? Learn to measure execution time in µs using DWT CYCCNT, and internalize the embedded engineer’s iron rule: ‘you can’t discuss it without measuring it.’

April 8, 2026 · 20 min ·