Blog
Switched from the STM32 onto the TM4C123 LaunchPad to follow Valvano's Cortex-M book and the Quantum Leaps material, and drove a chain of WS2812B RGB LEDs with the hardware PWM peripheral. Three register-level bugs stood between me and a lit LED.
Chapter 11 of Bare-Metal Embedded C Programming
First ADC driver on the STM32F446RE — configuring the analog peripheral, getting printf working again, and pointing it at an ambient light sensor.
Chapter 10 of Bare-Metal Embedded C Programming
UART driver on the STM32, printf build issues, and how the ST-LINK debugger was hijacking my serial output.
Handmade drone part 1: building the devFrame from scratch
Part 1 of a series on building a slow-flying camera drone from 3D printed parts, off-the-shelf hardware, and hand-sourced electronics. This post covers printing and assembling the devFrame open source quadcopter frame.
Bare-Metal Embedded C Programming: Chapter 8 - SysTick Timer
Implementing a SysTick driver for millisecond delays on the STM32F446RE, then using it to debounce a button press that toggles an LED.
Debugging My First GPIO Driver
I found two typos in my GPIO code by stepping through CLion's debugger with the peripherals view. Sometimes the bugs teach you more than the working code.
Understanding ARM CMSIS: Memory-Mapped Hardware
How I learned to work with ARM CMSIS standard by rewriting a blinky program and understanding memory-mapped peripheral structures.
STM32F446 + CMake + CLion Integration
Setting up one-click build and flash for STM32F446 bare-metal development with CMake and CLion on Arch Linux.
Building a Custom Makefile for STM32 Bare-Metal Development
I wrote a custom Makefile for my STM32F446 bare-metal C project, learning about target-prerequisite relationships and Make's reserved keywords along the way.
Building an Analytics Dashboard with SvelteKit and Cloudflare D1
Built a self-hosted analytics dashboard that captures pageviews, enriches data with Cloudflare geo and user-agent parsing, and displays real-time stats and trends using uPlot.