Skip to content
Caleb.ee
Embedded SystemsCompleted2025

STM32 Toaster Oven Controller

My first embedded project — a finite-state-machine toaster-oven controller on an STM32 Nucleo development board, with buttons, ADC input, and an OLED bring-up shield.

STM32 toaster oven finite state machine diagram

Role

Firmware developer

Team

Individual

Status

Completed

Timeline

2025

STM32 NucleoCFSMADCEmbedded COLED
  • First embedded project — STM32 Nucleo bring-up
  • State-machine architecture for heat-control states
  • Buttons, switches, potentiometer, and ADC input
  • OLED + shield stack for lab demos

Context

This was my first embedded project. I built it on an STM32 Nucleo development board — USB-powered, ST-Link onboard — with a black expansion shield stacked on top for buttons, switches, a potentiometer, UART headers, and a small OLED (early bring-up showed Hello World!).

Problem Statement

Appliance-style control is a classic embedded problem: debounce inputs, manage timed heating states, and respond to temperature feedback without blocking the MCU.

Design Goals

  • Learn STM32 firmware on a Nucleo board from scratch
  • Clear finite-state-machine architecture
  • Button and ADC temperature / knob input handling
  • Timed control states for heating cycles

Hardware

STM32 Nucleo as the MCU platform, plus a shield with: - OLED (I²C — SDA/SCL) - Push buttons and slide switches - Potentiometer for analog input - Buffered headers (74HC244) and UART breakouts for peripherals

System Architecture

Inputs (buttons, ADC) → FSM (idle, preheat, bake/toast, fault/done) → outputs (heater drive indicators / control signals) with timing services on the Nucleo.

Software Design

The controller is an explicit state machine in C. Each state defines entry actions, transitions, and timing. ADC readings inform temperature-related transitions.

Engineering Decisions

  • FSM over ad-hoc flags for predictable behavior and easier testing
  • Nucleo so I could flash and debug over USB without a separate programmer

Testing and Validation

Exercised state transitions with button sequences and ADC / pot inputs on the Nucleo + shield stack, verifying timing and control-state behavior.

Results

A working STM32 Nucleo FSM controller — my first end-to-end embedded stack from board bring-up through structured appliance-style control logic.

Challenges

  • First-time toolchains, flashing, and peripheral bring-up
  • Debouncing and input edge cases
  • Accurate timing without busy-waiting

Lessons Learned

Explicit states and transition tables make embedded control far easier to reason about than deeply nested conditionals — and a Nucleo is a forgiving place to learn that.

Future Improvements

  • PID temperature regulation overlay
  • Soft-start heater drive
  • Logging/telemetry for lab demos

Questions about this project? Email Caleb.