Learn STM32F3DISCOVERY: From Zero to STM32F3DISCOVERY Master

Goal: Deeply understand the STM32F3DISCOVERY board from the metal up: what each peripheral is for, how signals flow through the microcontroller, and why real-time constraints change how you design software. You will internalize the MCU boot process, clocking, memory map, GPIO, timers, ADC, DAC, DMA, interrupts, and power trade-offs, then apply them to tangible embedded systems. By the end, you will be able to plan, build, and debug reliable firmware for sensors, motors, and real-world interfaces—knowing why each register, bus, and timing decision exists. You will also learn how to verify behavior with measurable outcomes and traceability, not just “it seems to work.”


Why STM32F3DISCOVERY Matters

The STM32F3DISCOVERY board made high-performance ARM Cortex-M4F microcontrollers accessible to hobbyists and professionals with a low-cost, sensor-rich dev kit. It bridges the gap between toy microcontroller projects and industrial-grade embedded systems where timing, signal integrity, and power matter.

Real-world impact:

  • Cortex-M MCUs power motor controllers, drones, appliances, and industrial sensors.
  • The F3 series is built around mixed-signal workloads: fast ADCs, analog comparators, and timers.
  • It teaches the exact design constraints that separate “embedded software” from “desktop code.”

Understanding this board unlocks:

  • Hardware-software co-design thinking
  • Real-time control loops and signal processing
  • Embedded debugging skills used in interviews and production systems
        Real World Sensors + Actuators
                  │
                  ▼
   ┌──────────────────────────────┐
   │  STM32F3DISCOVERY (MCU Core) │
   │  ┌───────────┐  ┌──────────┐ │
   │  │  Timers   │  │   ADC    │ │
   │  └────┬──────┘  └────┬─────┘ │
   │       │              │       │
   │  ┌────▼─────┐   ┌────▼─────┐ │
   │  │   DMA    │   │   DAC    │ │
   │  └────┬─────┘   └────┬─────┘ │
   │       │              │       │
   │  ┌────▼─────┐   ┌────▼─────┐ │
   │  │  NVIC    │   │  GPIO     │ │
   │  └──────────┘   └──────────┘ │
   └──────────────────────────────┘
                  ▲
                  │
            Debug + SWD

Core Concept Analysis

1) Board Anatomy and Signal Paths

The board is a complete embedded system: CPU, memory, clocks, power, and peripherals. Your firmware is only one piece of a signal chain that starts in the physical world and ends in an electrical output.

[Sensor] -> [Analog Front-End] -> [ADC] -> [DMA] -> [Memory] -> [DSP/Logic] -> [DAC/PWM] -> [Actuator]

Why it matters: Understanding the chain prevents “mystery bugs” where the issue is hardware timing, noise, or data movement rather than your algorithm.

2) Clock Tree and Timing Domains

The MCU is a city of clocks. Timers, ADCs, buses, and CPU all run at derived rates. The clock configuration is the hidden backbone of deterministic behavior.

     HSE/HSI
        │
        ▼
      [PLL]
        │
   ┌────┴─────┐
   │          │
  [SYSCLK]  [USB]
   │
   ├─ AHB (CPU/DMA)
   └─ APB (Peripherals)

Why it matters: Wrong clock assumptions create timing drift, missed ADC samples, or unstable PWM outputs.

3) GPIO and Alternate Functions

GPIO pins are not just inputs/outputs—they are multiplexed to peripherals. Each pin can become SPI, I2C, UART, or a timer output.

     Pin PA9
      ├─ GPIO Output
      ├─ USART1_TX
      ├─ TIM1_CH2
      └─ ADC1_IN2

Why it matters: Pin planning and alternate-function routing define your hardware capabilities before you write code.

4) Timers, PWM, and Real-Time Control

Timers are the heartbeat of real-time systems: periodic interrupts, PWM generation, and input capture all rely on them.

Timer Counter ──> Compare Match ──> PWM Output
      │
      └────────> Update Event ──> Interrupt

Why it matters: Motor control, audio generation, and accurate scheduling depend on precise timer behavior.

5) ADC, DAC, and Mixed-Signal Workloads

The F3 series shines in analog-to-digital and digital-to-analog workloads. Sampling theory and signal conditioning are fundamental.

Analog Signal -> [Sampling] -> [Quantization] -> Digital Value

Why it matters: If you don’t understand sampling, you won’t trust your data or your control loops.

6) Interrupts, NVIC, and Latency

Interrupts are how the MCU reacts to external events. But each interrupt adds latency and complexity.

Event -> NVIC Priority -> ISR -> Main Loop -> Shared Data

Why it matters: Embedded systems fail silently when interrupts starve critical tasks.

7) DMA and Data Movement

DMA moves data without CPU involvement. It’s how you sustain high-throughput peripherals.

[ADC] -> [DMA] -> [Buffer] -> [CPU Processes]

Why it matters: Without DMA, you waste CPU cycles and risk missing data.

8) Power, Sleep Modes, and Energy Budgets

Power is a first-class constraint in embedded systems.

Active Mode -> Sleep -> Stop -> Standby

Why it matters: Battery life and thermal limits are as important as correctness.


Concept Summary Table

Concept Cluster What You Need to Internalize
Board anatomy Signals move across hardware blocks; firmware is one link in a signal chain.
Clock tree Every peripheral timing depends on clock sources and prescalers.
GPIO multiplexing Pin function selection determines system capability.
Timers/PWM Time-based control is implemented by hardware timers and compare logic.
ADC/DAC Sampling and quantization turn analog signals into data you can trust.
Interrupts/NVIC Event-driven behavior introduces priority and latency tradeoffs.
DMA High-throughput data movement needs hardware assistance.
Power modes Correct power decisions define real-world viability.

Deep Dive Reading by Concept

This section maps each concept from above to specific book chapters for deeper understanding. Read these before or alongside the projects to build strong mental models.

Microcontroller Architecture

Concept Book & Chapter
ARM Cortex-M fundamentals “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu — Ch. 1–2
Memory map and buses “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu — Ch. 3

Peripherals and Timing

Concept Book & Chapter
GPIO and alternate functions “Mastering STM32” by Carmine Noviello — Ch. 6
Timers and PWM “Mastering STM32” by Carmine Noviello — Ch. 10
ADC and DAC “Mastering STM32” by Carmine Noviello — Ch. 11

Real-Time and Power

Concept Book & Chapter
Interrupts and NVIC “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu — Ch. 7
DMA “Mastering STM32” by Carmine Noviello — Ch. 12
Low-power modes “Making Embedded Systems” by Elecia White — Ch. 8

Essential Reading Order

For maximum comprehension, read in this order:

  1. Foundation (Week 1):
    • The Definitive Guide to ARM Cortex-M3/M4 Processors Ch. 1–3 (core + memory map)
    • Mastering STM32 Ch. 6 (GPIO)
  2. Real-Time Systems (Week 2):
    • Mastering STM32 Ch. 10–12 (timers, ADC/DAC, DMA)
    • The Definitive Guide to ARM Cortex-M3/M4 Processors Ch. 7 (interrupts)
  3. Power & Robustness (Week 3):
    • Making Embedded Systems Ch. 8 (low power + design tradeoffs)

Project List

Projects are ordered from foundational understanding to advanced integration.


Project 1: Board Bring-Up and Clock Audit

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 1: Beginner
  • Knowledge Area: Boot + Clocking
  • Software or Tool: STM32CubeIDE (or ST-LINK)
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A bring-up checklist that validates the MCU clock tree, system tick, and LED timing against measured outputs.

Why it teaches STM32F3DISCOVERY: It forces you to understand the boot path, system clock sources, and how timing assumptions affect every peripheral.

Core challenges you’ll face:

  • Identifying the default clock configuration and verifying it physically
  • Mapping system tick timing to real-world time
  • Separating board-level issues from firmware issues

Key Concepts

  • Clock tree: “Mastering STM32” Ch. 5 - Noviello
  • SysTick timing: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 4 - Yiu
  • Board bring-up discipline: “Making Embedded Systems” Ch. 2 - White

Difficulty: Beginner Time estimate: Weekend Prerequisites: Basic C syntax, command-line familiarity, ability to read a pinout diagram


Real World Outcome

You will create a written bring-up report and a physical LED timing validation. The report includes: 1) Your measured clock source (HSI vs HSE) and observed frequency 2) A timing log that shows a LED toggling at exactly 1 Hz, verified with a stopwatch 3) A corrected timing if the measured period deviates

Example Output:

$ board_audit
Clock source: HSI
Measured LED period: 1.02s
Target LED period: 1.00s
Clock correction: prescaler /8 -> /7 (estimated)
Status: within 2% tolerance

The Core Question You’re Answering

“How do I prove my MCU is running at the frequency I think it is?”

Before you write any firmware logic, sit with this question. Almost every embedded bug starts with a false timing assumption.


Concepts You Must Understand First

Stop and research these before coding:

  1. Clock Sources
    • What is the difference between HSI and HSE?
    • Why does PLL multiplication affect peripheral timing?
    • How do prescalers alter bus clocks?
    • Book Reference: “Mastering STM32” Ch. 5 - Noviello
  2. SysTick Timer
    • What generates the SysTick interrupt?
    • Why is SysTick tied to the core clock?
    • Book Reference: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 4 - Yiu

Questions to Guide Your Design

Before implementing, think through these:

  1. Measurement Method
    • How will you confirm frequency without an oscilloscope?
    • What counts as “good enough” accuracy for this test?
  2. Reporting
    • How will you record your observed timing without relying on a debugger?

Thinking Exercise

“Timing Without Tools”

Before coding, describe a manual method to validate a 1 Hz blink rate using only a stopwatch and a written log.

PSEUDO-STEPS
1) Start stopwatch
2) Count 20 LED transitions
3) Record total seconds
4) Compute average period

Questions while tracing:

  • If the average period is 0.9s, what does that imply about your clock?
  • If the average period is 1.1s, what could cause that?
  • How do you differentiate firmware delays from clock source errors?

The Interview Questions They’ll Ask

Prepare to answer these:

  1. “How do you validate MCU clock frequency without lab instruments?”
  2. “What is the difference between HSI and HSE?”
  3. “Why does SysTick timing drift when the PLL is misconfigured?”
  4. “How do bus prescalers impact peripheral timing?”
  5. “How would you document bring-up results for a team?”

Hints in Layers

Hint 1: Starting Point Look for the clock configuration defaults in the board setup.

Hint 2: Next Level Use a periodic LED toggle as a physical time reference.

Hint 3: Technical Details Log timestamps or counts so you can compute an average period over many cycles.

Hint 4: Tools/Debugging If timing is off, verify prescalers before changing anything else.


Books That Will Help

Topic Book Chapter
Clock tree basics “Mastering STM32” by Carmine Noviello Ch. 5
SysTick and core clock “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu Ch. 4

Implementation Hints Focus on confirming observable timing, not just register configuration. Use a stable reference and average over many cycles to reduce error.

Learning milestones:

  1. You can identify the active clock source without guessing
  2. You can measure timing with a repeatable process
  3. You can document and correct timing drift

Project 2: GPIO Map and Alternate-Function Explorer

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 1: Beginner
  • Knowledge Area: GPIO / Pin Multiplexing
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A pin-function map that documents each usable pin on the board and validates at least three alternate functions with visible outputs.

Why it teaches STM32F3DISCOVERY: It forces you to see the MCU as a limited routing problem, not just a pile of pins.

Core challenges you’ll face:

  • Reading the board schematic and matching pins to headers
  • Selecting alternate functions without conflicts
  • Verifying function selection with observable behavior

Key Concepts

  • GPIO configuration: “Mastering STM32” Ch. 6 - Noviello
  • Alternate function mapping: “Mastering STM32” Ch. 6 - Noviello
  • Hardware pin planning: “Making Embedded Systems” Ch. 5 - White

Difficulty: Beginner Time estimate: 1-2 weeks Prerequisites: Basic C, ability to read a pinout or schematic


Real World Outcome

You will produce a “pin capability map” document and a demonstration that confirms three alternate functions (example: UART TX, timer PWM output, ADC input).

Example Output:

$ pinmap_verify
PA9: USART1_TX -> verified with serial output
PA8: TIM1_CH1 -> verified PWM on LED pin
PA1: ADC1_IN2 -> verified analog read varies with potentiometer

The Core Question You’re Answering

“How do I know which pins can actually do the job I want?”

This prevents late-stage hardware rewires when a chosen pin cannot support a required peripheral.


Concepts You Must Understand First

  1. GPIO Modes
    • What is the difference between input, output, and alternate function?
    • Why do pull-up/pull-down settings matter?
    • Book Reference: “Mastering STM32” Ch. 6 - Noviello
  2. Pin Multiplexing
    • What does it mean for a pin to be shared by multiple peripherals?
    • How do you resolve conflicts?
    • Book Reference: “Making Embedded Systems” Ch. 5 - White

Questions to Guide Your Design

  1. Pin Selection
    • Which pins are exposed on headers vs reserved on-board?
    • Which alternate functions overlap on the same pin?
  2. Verification
    • What physical indicator proves each alternate function works?

Thinking Exercise

“Pin Conflict Resolution”

Before coding, sketch a table that lists three desired peripherals and the pins they require, then resolve conflicts.

PSEUDO-TABLE
Peripheral A -> Pin X or Pin Y
Peripheral B -> Pin Y or Pin Z
Peripheral C -> Pin X or Pin Z
Decision: choose Pin Y for B, Pin Z for C, Pin X for A

Questions while tracing:

  • Which peripheral is most timing-critical?
  • Which pin choices minimize conflicts?
  • How would you adapt if one pin is unavailable on the board header?

The Interview Questions They’ll Ask

  1. “Explain alternate-function GPIO and why it matters.”
  2. “How do you resolve pin conflicts in an MCU design?”
  3. “What is the difference between open-drain and push-pull?”
  4. “Why are pull-ups sometimes required for inputs?”
  5. “How do you validate that a pin is correctly configured?”

Hints in Layers

Hint 1: Starting Point Start with the board pinout and mark which pins are user-accessible.

Hint 2: Next Level Choose one peripheral and confirm its required pin function.

Hint 3: Technical Details Validate with a visible effect: serial output, LED brightness, or analog reading.

Hint 4: Tools/Debugging If a pin seems dead, check if it’s already used by on-board devices.


Books That Will Help

Topic Book Chapter
GPIO configuration “Mastering STM32” by Carmine Noviello Ch. 6
Practical pin planning “Making Embedded Systems” by Elecia White Ch. 5

Implementation Hints Make the pin map part of your project docs so every later project references the same ground truth.

Learning milestones:

  1. You can read a datasheet pinout without confusion
  2. You can route three peripherals without conflicts
  3. You can prove each selected function works

Project 3: Timer-Driven LED Sequencer

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: Timers / Scheduling
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A deterministic LED sequencer where each LED pattern is driven by hardware timers instead of delays.

Why it teaches STM32F3DISCOVERY: It demonstrates the difference between software delays and hardware-scheduled events.

Core challenges you’ll face:

  • Configuring timer prescalers and auto-reload values
  • Using timer interrupts to trigger state transitions
  • Building a deterministic state machine

Key Concepts

  • Timer basics: “Mastering STM32” Ch. 10 - Noviello
  • ISR design: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 7 - Yiu
  • State machines: “Making Embedded Systems” Ch. 3 - White

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: Understanding of basic GPIO and clocking


Real World Outcome

You will see a repeatable LED sequence that does not drift over time. Each LED transition is timestamped and matches your timer configuration.

Example Output:

$ led_sequencer
Pattern: 4-LED chase
Step interval: 250 ms
Observed drift after 10 minutes: 0 ms

The Core Question You’re Answering

“Why are timers better than software delays in embedded systems?”

This question reveals the difference between blocking delays and real-time scheduling.


Concepts You Must Understand First

  1. Timers and Prescalers
    • How does a timer count at a different rate from the CPU?
    • How do auto-reload values control intervals?
    • Book Reference: “Mastering STM32” Ch. 10 - Noviello
  2. Interrupts and Latency
    • What happens if an interrupt is delayed?
    • How do interrupt priorities affect timing?
    • Book Reference: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 7 - Yiu

Questions to Guide Your Design

  1. Timing Accuracy
    • How will you measure drift over time?
  2. State Machine
    • How do you represent the LED sequence without blocking?

Thinking Exercise

“Timer Math on Paper”

Before coding, compute the prescaler and auto-reload values required for 250 ms intervals given a 72 MHz system clock.

PSEUDO-MATH
Target tick frequency = 1 kHz
Prescaler = (72 MHz / 1 kHz) - 1
Auto-reload = 250 - 1

Questions while tracing:

  • What if the system clock is not 72 MHz?
  • How does rounding affect your interval?
  • How does interrupt latency show up in measurements?

The Interview Questions They’ll Ask

  1. “Explain how a hardware timer generates periodic interrupts.”
  2. “Why are blocking delays dangerous in embedded systems?”
  3. “How do you compute timer prescaler values?”
  4. “What is interrupt latency and why does it matter?”
  5. “How do you verify timing accuracy in firmware?”

Hints in Layers

Hint 1: Starting Point Start with a single LED and a fixed timer interval.

Hint 2: Next Level Use a state machine to represent the LED sequence.

Hint 3: Technical Details Derive timer settings from clock frequency, not from trial and error.

Hint 4: Tools/Debugging Measure drift over many cycles to reduce measurement error.


Books That Will Help

Topic Book Chapter
Timer configuration “Mastering STM32” by Carmine Noviello Ch. 10
Interrupt behavior “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu Ch. 7

Implementation Hints Use timers as your scheduler. Keep the main loop free so it can perform background tasks or sleep.

Learning milestones:

  1. You can compute timer intervals from clock settings
  2. You can build a non-blocking LED sequence
  3. You can measure and prove low drift

Project 4: PWM Motor or LED Brightness Controller

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: Timers / PWM
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A PWM-based control system that changes LED brightness or motor speed in predictable steps.

Why it teaches STM32F3DISCOVERY: It reveals how timers drive analog-like control from digital outputs.

Core challenges you’ll face:

  • Configuring PWM mode and duty cycle
  • Mapping human-friendly percentages to timer compare values
  • Observing how PWM frequency affects perception or motor response

Key Concepts

  • PWM fundamentals: “Mastering STM32” Ch. 10 - Noviello
  • Timer output compare: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 9 - Yiu
  • Human perception and PWM: “Making Embedded Systems” Ch. 6 - White

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: GPIO, timers, basic electronics safety


Real World Outcome

You will have a controller where pressing a button cycles PWM duty from 10% to 90%, visibly changing LED brightness or motor speed. You will also log the current duty cycle.

Example Output:

$ pwm_controller
Duty cycle: 10%
Duty cycle: 30%
Duty cycle: 50%
Duty cycle: 70%
Duty cycle: 90%

The Core Question You’re Answering

“How does a digital timer create analog-like control?”

PWM is the foundation of motor control, LED dimming, and audio output.


Concepts You Must Understand First

  1. PWM Duty Cycle
    • What does duty cycle represent physically?
    • How does PWM frequency influence perception?
    • Book Reference: “Mastering STM32” Ch. 10 - Noviello
  2. Timer Output Compare
    • What does the compare register actually do?
    • How does the timer toggle output without CPU intervention?
    • Book Reference: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 9 - Yiu

Questions to Guide Your Design

  1. Human Perception
    • What PWM frequency avoids visible flicker?
  2. Control Mapping
    • How do you map a 0–100% input to timer compare values?

Thinking Exercise

“Duty Cycle Mapping”

Before coding, create a conversion table for 0%, 25%, 50%, 75%, 100% duty on your timer period.

PSEUDO-TABLE
Period = 1000 ticks
0% -> 0
25% -> 250
50% -> 500
75% -> 750
100% -> 1000

Questions while tracing:

  • What happens if your timer period changes?
  • How does PWM resolution affect smoothness?
  • What duty cycle range feels linear to the human eye?

The Interview Questions They’ll Ask

  1. “Explain PWM and how it controls motor speed.”
  2. “How do you compute compare values from a desired duty cycle?”
  3. “Why does PWM frequency matter for LEDs?”
  4. “What are the tradeoffs between PWM frequency and resolution?”
  5. “How do you verify PWM output without an oscilloscope?”

Hints in Layers

Hint 1: Starting Point Pick a timer channel connected to a board LED or header pin.

Hint 2: Next Level Start with 50% duty cycle and adjust in steps.

Hint 3: Technical Details Keep PWM frequency fixed and vary only the compare value.

Hint 4: Tools/Debugging If the LED looks dim at 50%, check polarity and timer mode.


Books That Will Help

Topic Book Chapter
PWM on STM32 “Mastering STM32” by Carmine Noviello Ch. 10
Timer output compare “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu Ch. 9

Implementation Hints Favor hardware PWM over software toggling. Make the control input human-readable, then map to timer values.

Learning milestones:

  1. You can generate stable PWM on a pin
  2. You can map duty cycles to observable brightness
  3. You can reason about frequency vs resolution

Project 5: ADC Sensor Sampler + Logging

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: ADC / Sampling
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A consistent ADC sampling tool that logs sensor values at a fixed sample rate with timestamped output.

Why it teaches STM32F3DISCOVERY: It forces you to confront sampling rate, quantization, and noise in the analog domain.

Core challenges you’ll face:

  • Setting the ADC sample rate and resolution
  • Choosing an appropriate sampling interval with timers
  • Logging values without disrupting sampling

Key Concepts

  • ADC configuration: “Mastering STM32” Ch. 11 - Noviello
  • Sampling theory basics: “Making Embedded Systems” Ch. 7 - White
  • Timer-triggered sampling: “Mastering STM32” Ch. 10 - Noviello

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: Timers, GPIO, basic analog signal understanding


Real World Outcome

You will capture a continuous stream of sensor values (e.g., potentiometer or onboard sensor), at a known sample rate, and verify that the sampling frequency is stable.

Example Output:

$ adc_logger
Sample rate: 100 Hz
t=0.00s value=1834
t=0.01s value=1840
t=0.02s value=1837
...

The Core Question You’re Answering

“How do I trust the data coming from an analog sensor?”

This question forces you to link timing, noise, and quantization to real measurements.


Concepts You Must Understand First

  1. Sampling Rate
    • What happens when you sample too slowly?
    • What is aliasing in practical terms?
    • Book Reference: “Making Embedded Systems” Ch. 7 - White
  2. ADC Resolution
    • How does bit depth translate into voltage steps?
    • Why does reference voltage matter?
    • Book Reference: “Mastering STM32” Ch. 11 - Noviello

Questions to Guide Your Design

  1. Sampling Consistency
    • How will you ensure fixed sampling intervals?
  2. Data Logging
    • How will you log data without missing samples?

Thinking Exercise

“Sampling Rate Selection”

Before coding, choose a sample rate for a slowly changing sensor and justify it.

PSEUDO-LOGIC
If sensor changes once per second, sample at 20 Hz for margin
If sensor changes fast, sample at higher rate

Questions while tracing:

  • How does higher sampling rate affect CPU load?
  • When does noise dominate your readings?
  • How do you verify your sample rate is correct?

The Interview Questions They’ll Ask

  1. “Explain aliasing in ADC sampling.”
  2. “How do you choose a sample rate for a sensor?”
  3. “Why does ADC resolution matter?”
  4. “How do you trigger ADC conversions using timers?”
  5. “How do you validate sampling timing?”

Hints in Layers

Hint 1: Starting Point Start with a low sample rate and verify timing first.

Hint 2: Next Level Use a timer-triggered ADC conversion instead of manual triggers.

Hint 3: Technical Details Record timestamps to confirm intervals and jitter.

Hint 4: Tools/Debugging If readings jump, check reference voltage and input wiring.


Books That Will Help

Topic Book Chapter
ADC fundamentals “Mastering STM32” by Carmine Noviello Ch. 11
Sampling theory “Making Embedded Systems” by Elecia White Ch. 7

Implementation Hints Use hardware-triggered conversions for consistent timing. Avoid heavy logging inside interrupt handlers.

Learning milestones:

  1. You can produce stable ADC readings
  2. You can prove the sampling rate is correct
  3. You can explain why your data is trustworthy

Project 6: DAC Waveform Generator

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: DAC / Signal Generation
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A DAC-based waveform generator that outputs a triangle or sine-like waveform on a pin.

Why it teaches STM32F3DISCOVERY: It makes you think about discrete time outputs, DAC resolution, and signal reconstruction.

Core challenges you’ll face:

  • Timing DAC updates to produce a stable frequency
  • Creating a waveform lookup table
  • Observing the output using simple tools

Key Concepts

  • DAC operation: “Mastering STM32” Ch. 11 - Noviello
  • Timer-triggered DAC: “Mastering STM32” Ch. 10 - Noviello
  • Signal reconstruction: “Making Embedded Systems” Ch. 7 - White

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: Timer-driven scheduling, ADC basics


Real World Outcome

You will output a periodic voltage waveform from the DAC pin. You can verify it using a multimeter (average value changes) or a simple audio amplifier to hear a tone.

Example Output:

$ dac_wavegen
Waveform: triangle
Frequency: 400 Hz
DAC resolution: 12-bit

The Core Question You’re Answering

“How do I create a smooth analog signal from discrete digital values?”

This connects digital tables, timing, and analog output into a single system.


Concepts You Must Understand First

  1. DAC Resolution
    • What is a least significant bit in voltage terms?
    • How does resolution affect waveform smoothness?
    • Book Reference: “Mastering STM32” Ch. 11 - Noviello
  2. Sample Rate for Output
    • How does update frequency relate to output frequency?
    • Book Reference: “Making Embedded Systems” Ch. 7 - White

Questions to Guide Your Design

  1. Waveform Table
    • How many samples per cycle do you need for smoothness?
  2. Output Verification
    • How will you confirm the waveform without an oscilloscope?

Thinking Exercise

“Waveform Table Size”

Before coding, choose a number of samples per cycle and explain the tradeoff between smoothness and CPU load.

PSEUDO-LOGIC
More samples -> smoother waveform
Fewer samples -> lower CPU/DMA load

Questions while tracing:

  • How does table size impact memory usage?
  • What happens if your timer updates are not consistent?
  • How can you verify frequency without a scope?

The Interview Questions They’ll Ask

  1. “How does a DAC generate an analog signal?”
  2. “What determines the frequency of a DAC waveform?”
  3. “How do you choose a waveform table size?”
  4. “How does timer jitter affect output quality?”
  5. “How would you test a DAC output without a scope?”

Hints in Layers

Hint 1: Starting Point Use a small triangle wave table to validate the output.

Hint 2: Next Level Use a timer to trigger DAC updates at a fixed rate.

Hint 3: Technical Details Keep DAC writes lightweight and consistent.

Hint 4: Tools/Debugging If the waveform is unstable, verify clock and timer settings first.


Books That Will Help

Topic Book Chapter
DAC configuration “Mastering STM32” by Carmine Noviello Ch. 11
Sampling and reconstruction “Making Embedded Systems” by Elecia White Ch. 7

Implementation Hints Consider using DMA for DAC updates if CPU load becomes high.

Learning milestones:

  1. You can output a stable waveform
  2. You can control frequency and amplitude predictably
  3. You can reason about reconstruction quality

Project 7: Interrupt Latency Profiler

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 3: Advanced
  • Knowledge Area: Interrupts / Latency
  • Software or Tool: STM32CubeIDE
  • Main Book: “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu

What you’ll build: A small experiment that measures interrupt latency under different load conditions and logs the results.

Why it teaches STM32F3DISCOVERY: It reveals how real-time systems behave under stress and why ISR design matters.

Core challenges you’ll face:

  • Measuring latency without skewing results
  • Controlling and varying system load
  • Interpreting the effect of priority settings

Key Concepts

  • NVIC priorities: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 7 - Yiu
  • ISR best practices: “Making Embedded Systems” Ch. 4 - White
  • Timing measurement: “Mastering STM32” Ch. 10 - Noviello

Difficulty: Advanced Time estimate: 1-2 weeks Prerequisites: Timers, interrupts, basic profiling mindset


Real World Outcome

You will create a latency table that shows how long after an external trigger an ISR toggles a pin under different CPU loads.

Example Output:

$ irq_latency
Load: idle -> latency 3 us
Load: moderate -> latency 8 us
Load: heavy -> latency 22 us
Priority boost -> latency 6 us

The Core Question You’re Answering

“How quickly can my system react, and what makes it slower?”

This reveals the difference between theoretical and real-world responsiveness.


Concepts You Must Understand First

  1. NVIC Priorities
    • How are interrupt priorities encoded?
    • What happens when two interrupts fire at once?
    • Book Reference: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 7 - Yiu
  2. Timer Measurement
    • How can a timer be used as a stopwatch?
    • Book Reference: “Mastering STM32” Ch. 10 - Noviello

Questions to Guide Your Design

  1. Measurement Integrity
    • How will you measure latency without adding bias?
  2. Load Simulation
    • What background tasks represent realistic load?

Thinking Exercise

“Latency Budget”

Before coding, write a budget of how much latency your system can tolerate for a hypothetical control loop.

PSEUDO-BUDGET
Control loop must respond within 1 ms
Allocate 0.2 ms to ISR entry
Allocate 0.5 ms to processing
Allocate 0.3 ms to output update

Questions while tracing:

  • What if ISR entry already exceeds the budget?
  • How do you reduce latency without increasing CPU clock?
  • How does priority inversion appear here?

The Interview Questions They’ll Ask

  1. “What determines interrupt latency on Cortex-M?”
  2. “How do you measure ISR response time?”
  3. “Why can high system load increase latency?”
  4. “What are the risks of long-running ISRs?”
  5. “How do interrupt priorities affect real-time behavior?”

Hints in Layers

Hint 1: Starting Point Use a timer as a free-running counter and capture its value on interrupt.

Hint 2: Next Level Create a background task that simulates CPU load.

Hint 3: Technical Details Compare latency across priority levels and record results.

Hint 4: Tools/Debugging If latency is inconsistent, look for shared resource contention.


Books That Will Help

Topic Book Chapter
NVIC internals “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu Ch. 7
Real-time constraints “Making Embedded Systems” by Elecia White Ch. 4

Implementation Hints Design your measurement so the act of measurement does not become the bottleneck.

Learning milestones:

  1. You can measure ISR latency reliably
  2. You can explain how load affects responsiveness
  3. You can tune priorities based on data

Project 8: DMA-Based ADC Ring Buffer

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 3: Advanced
  • Knowledge Area: DMA / Data Streaming
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A DMA-driven ADC capture system that fills a circular buffer and allows continuous data processing.

Why it teaches STM32F3DISCOVERY: It demonstrates high-throughput acquisition without CPU bottlenecks.

Core challenges you’ll face:

  • Configuring DMA in circular mode
  • Managing buffer overrun and half-transfer events
  • Processing data without blocking acquisition

Key Concepts

  • DMA configuration: “Mastering STM32” Ch. 12 - Noviello
  • Double-buffering concepts: “Making Embedded Systems” Ch. 9 - White
  • ADC trigger timing: “Mastering STM32” Ch. 11 - Noviello

Difficulty: Advanced Time estimate: 1-2 weeks Prerequisites: ADC sampling, interrupt handling


Real World Outcome

You will produce a continuous stream of ADC samples into a ring buffer and log when half and full buffer events occur.

Example Output:

$ dma_adc
Buffer size: 1024 samples
Half-transfer event at t=0.128s
Full-transfer event at t=0.256s
Continuous capture: stable

The Core Question You’re Answering

“How do I move large amounts of data without losing samples?”

This is central to audio, motor control feedback, and sensing systems.


Concepts You Must Understand First

  1. DMA Transfer Modes
    • What is circular mode and why is it useful?
    • How does DMA know where to write next?
    • Book Reference: “Mastering STM32” Ch. 12 - Noviello
  2. Buffer Management
    • What is a ring buffer?
    • How do you avoid overwriting unread data?
    • Book Reference: “Making Embedded Systems” Ch. 9 - White

Questions to Guide Your Design

  1. Buffer Size
    • How do you choose a buffer size for your sample rate?
  2. Processing Timing
    • When do you process half-buffer vs full-buffer?

Thinking Exercise

“Buffer Capacity”

Before coding, compute how long a 1024-sample buffer lasts at 8 kHz.

PSEUDO-MATH
Duration = 1024 / 8000 = 0.128s

Questions while tracing:

  • Is 0.128s enough time to process data?
  • What if your processing takes longer?
  • How do you detect overruns?

The Interview Questions They’ll Ask

  1. “What is DMA and why is it useful?”
  2. “Explain circular buffer mode in DMA.”
  3. “How do you avoid data loss in streaming systems?”
  4. “What is the tradeoff between buffer size and latency?”
  5. “How do you handle half-transfer interrupts?”

Hints in Layers

Hint 1: Starting Point Start with a small buffer and verify half-transfer events.

Hint 2: Next Level Use a ring buffer approach to separate acquisition and processing.

Hint 3: Technical Details Keep your processing time less than the buffer duration.

Hint 4: Tools/Debugging Log buffer events to prove no overruns are occurring.


Books That Will Help

Topic Book Chapter
DMA configuration “Mastering STM32” by Carmine Noviello Ch. 12
Buffer management “Making Embedded Systems” by Elecia White Ch. 9

Implementation Hints Treat the DMA buffer as a real-time data source: your processing must keep up, or you lose data.

Learning milestones:

  1. You can stream ADC data continuously
  2. You can process data without blocking acquisition
  3. You can explain buffer size and latency tradeoffs

Project 9: I2C Sensor Driver and Calibration Log

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 2. The “Micro-SaaS / Pro Tool”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: I2C / Sensor Integration
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A driver and calibration log for an I2C sensor (temperature, accelerometer, or magnetometer).

Why it teaches STM32F3DISCOVERY: It moves you from on-chip peripherals to real external hardware integration.

Core challenges you’ll face:

  • Reading sensor datasheets and register maps
  • Handling I2C timing and bus errors
  • Converting raw sensor values into calibrated units

Key Concepts

  • I2C protocol basics: “Making Embedded Systems” Ch. 11 - White
  • Register maps: “Making Embedded Systems” Ch. 5 - White
  • Data calibration: “Mastering STM32” Ch. 11 - Noviello

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: GPIO knowledge, basic serial protocol concepts


Real World Outcome

You will output calibrated sensor values at a fixed interval and log a calibration report showing offsets and scaling.

Example Output:

$ i2c_sensor
Temperature raw: 512
Temperature calibrated: 24.6 C
Calibration offset: -1.2 C

The Core Question You’re Answering

“How do I turn raw sensor bytes into trusted real-world values?”

This bridges the gap between hardware registers and meaningful data.


Concepts You Must Understand First

  1. I2C Transactions
    • What is a start condition and why does it matter?
    • How do you read multiple bytes from a register?
    • Book Reference: “Making Embedded Systems” Ch. 11 - White
  2. Calibration
    • Why does raw data need offsets or scaling?
    • How do you store calibration values?
    • Book Reference: “Making Embedded Systems” Ch. 6 - White

Questions to Guide Your Design

  1. Data Validity
    • How do you detect a failed I2C transaction?
  2. Calibration Process
    • What reference values will you use to calibrate?

Thinking Exercise

“Calibration Table”

Before coding, write a small table that maps raw readings to corrected values.

PSEUDO-TABLE
Raw 500 -> 24.0 C
Raw 520 -> 25.0 C
Raw 540 -> 26.0 C

Questions while tracing:

  • How do you handle non-linear sensors?
  • Where do you store calibration data?
  • How do you verify calibration accuracy?

The Interview Questions They’ll Ask

  1. “Explain the I2C read sequence.”
  2. “How do you handle bus errors or NACKs?”
  3. “Why do sensor readings require calibration?”
  4. “How do you convert raw sensor data to units?”
  5. “How do you verify sensor accuracy?”

Hints in Layers

Hint 1: Starting Point Start with a known I2C device address and verify communication.

Hint 2: Next Level Read a single register and compare to a datasheet expected value.

Hint 3: Technical Details Implement a simple calibration offset and verify with a known reference.

Hint 4: Tools/Debugging If values are unstable, check pull-up resistors and bus speed.


Books That Will Help

Topic Book Chapter
I2C protocol “Making Embedded Systems” by Elecia White Ch. 11
Sensor calibration “Making Embedded Systems” by Elecia White Ch. 6

Implementation Hints Treat sensor integration as a data quality problem, not just a wiring problem.

Learning milestones:

  1. You can read sensor registers reliably
  2. You can calibrate data into real units
  3. You can explain error sources in sensor readings

Project 10: SPI Display or LED Matrix Driver

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 2. The “Micro-SaaS / Pro Tool”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: SPI / Display Control
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A simple SPI driver that pushes pixels or patterns to a small display or LED matrix.

Why it teaches STM32F3DISCOVERY: It forces you to manage high-speed data transfers and peripheral control.

Core challenges you’ll face:

  • Configuring SPI mode and clock polarity
  • Managing chip select timing
  • Updating display memory efficiently

Key Concepts

  • SPI bus fundamentals: “Making Embedded Systems” Ch. 11 - White
  • DMA for SPI: “Mastering STM32” Ch. 12 - Noviello
  • Frame buffers: “Making Embedded Systems” Ch. 9 - White

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: GPIO and pin mapping knowledge


Real World Outcome

You will display a repeating pattern or status text on an SPI display. You will also log a frame update rate.

Example Output:

$ spi_display
Pattern: checkerboard
Frame rate: 30 fps
Status: stable

The Core Question You’re Answering

“How do I push lots of data quickly and reliably to a peripheral?”

This is essential for displays, sensors, and memory devices.


Concepts You Must Understand First

  1. SPI Modes
    • What do CPOL and CPHA represent?
    • How do you choose the right SPI mode?
    • Book Reference: “Making Embedded Systems” Ch. 11 - White
  2. Frame Buffering
    • Why does a display need a buffer?
    • What is the tradeoff between buffer size and memory use?
    • Book Reference: “Making Embedded Systems” Ch. 9 - White

Questions to Guide Your Design

  1. Update Strategy
    • How often do you need to update the display?
  2. Data Transfer
    • Will you use DMA or CPU-driven transfers?

Thinking Exercise

“SPI Transaction Breakdown”

Before coding, write a step-by-step transaction plan for sending one frame to your display.

PSEUDO-STEPS
1) Assert chip select
2) Send command byte
3) Send data bytes
4) Deassert chip select

Questions while tracing:

  • How do you avoid tearing or partial updates?
  • What happens if the SPI clock is too fast?
  • How do you know the display accepted the frame?

The Interview Questions They’ll Ask

  1. “Explain how SPI differs from I2C.”
  2. “What do CPOL and CPHA mean?”
  3. “How do you improve SPI throughput?”
  4. “What is a frame buffer and why use it?”
  5. “How do you validate a display update sequence?”

Hints in Layers

Hint 1: Starting Point Send a static pattern first to verify wiring.

Hint 2: Next Level Update a small region before attempting full frames.

Hint 3: Technical Details Use DMA to reduce CPU overhead if updates are large.

Hint 4: Tools/Debugging If the display is blank, check SPI mode and chip select polarity.


Books That Will Help

Topic Book Chapter
SPI fundamentals “Making Embedded Systems” by Elecia White Ch. 11
DMA transfers “Mastering STM32” by Carmine Noviello Ch. 12

Implementation Hints Think in terms of frames and transactions. Build a small protocol for your display updates.

Learning milestones:

  1. You can transmit SPI data reliably
  2. You can update a display or matrix
  3. You can reason about throughput and timing

Project 11: Quadrature Encoder Reader

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 1. The “Resume Gold”
  • Difficulty: Level 3: Advanced
  • Knowledge Area: Timers / Input Capture
  • Software or Tool: STM32CubeIDE
  • Main Book: “Mastering STM32” by Carmine Noviello

What you’ll build: A quadrature encoder interface that measures position and speed from a rotary encoder.

Why it teaches STM32F3DISCOVERY: It combines timer input capture with real-time signal interpretation.

Core challenges you’ll face:

  • Configuring timer encoder mode
  • Debouncing or filtering encoder signals
  • Converting counts into speed and direction

Key Concepts

  • Timer encoder mode: “Mastering STM32” Ch. 10 - Noviello
  • Input capture: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 9 - Yiu
  • Signal conditioning: “Making Embedded Systems” Ch. 6 - White

Difficulty: Advanced Time estimate: 1-2 weeks Prerequisites: Timers, interrupts, signal integrity basics


Real World Outcome

You will read an encoder and output direction and speed. Rotating the knob will produce real-time updates.

Example Output:

$ encoder_read
Position: 124 counts
Direction: CW
Speed: 45 counts/sec

The Core Question You’re Answering

“How do I interpret two phase-shifted signals as precise motion?”

This is a key skill for motor control and robotics.


Concepts You Must Understand First

  1. Quadrature Signals
    • Why are there two signals (A and B)?
    • How does phase shift indicate direction?
    • Book Reference: “Making Embedded Systems” Ch. 6 - White
  2. Timer Encoder Mode
    • How does the timer count edges without CPU involvement?
    • Book Reference: “Mastering STM32” Ch. 10 - Noviello

Questions to Guide Your Design

  1. Resolution
    • What counts-per-revolution does your encoder provide?
  2. Filtering
    • How will you handle noise or bouncing signals?

Thinking Exercise

“Direction Detection”

Before coding, draw a truth table showing how A/B transitions map to direction.

PSEUDO-TABLE
A leads B -> CW
B leads A -> CCW

Questions while tracing:

  • How do you handle missed edges?
  • What happens if signals are noisy?
  • How do you estimate speed from counts?

The Interview Questions They’ll Ask

  1. “How does a quadrature encoder determine direction?”
  2. “What is timer encoder mode and why use it?”
  3. “How do you filter encoder noise?”
  4. “How do you compute speed from counts?”
  5. “What limits encoder resolution?”

Hints in Layers

Hint 1: Starting Point Test encoder outputs with slow manual rotation.

Hint 2: Next Level Configure the timer in encoder mode and read counts.

Hint 3: Technical Details Use a rolling time window to compute speed.

Hint 4: Tools/Debugging If counts jump unpredictably, add filtering or debouncing.


Books That Will Help

Topic Book Chapter
Encoder mode “Mastering STM32” by Carmine Noviello Ch. 10
Signal conditioning “Making Embedded Systems” by Elecia White Ch. 6

Implementation Hints Use hardware timer support rather than software edge tracking.

Learning milestones:

  1. You can read encoder counts reliably
  2. You can compute speed and direction
  3. You can explain noise handling decisions

Project 12: UART Command Console + Boot Diagnostics

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 2. The “Micro-SaaS / Pro Tool”
  • Difficulty: Level 2: Intermediate
  • Knowledge Area: UART / Diagnostics
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A UART-based console that prints boot diagnostics and responds to simple commands.

Why it teaches STM32F3DISCOVERY: It builds a debugging interface that is essential for embedded development.

Core challenges you’ll face:

  • Configuring UART baud rate correctly
  • Creating a simple command parser
  • Printing system diagnostics without blocking main tasks

Key Concepts

  • UART fundamentals: “Making Embedded Systems” Ch. 11 - White
  • Non-blocking I/O: “Making Embedded Systems” Ch. 4 - White
  • Boot diagnostics: “Making Embedded Systems” Ch. 2 - White

Difficulty: Intermediate Time estimate: 1-2 weeks Prerequisites: GPIO and basic serial communication


Real World Outcome

You will connect via a serial terminal and see a boot banner with clock info, then issue commands like “status” to receive live system metrics.

Example Output:

$ uart_console
STM32F3 Boot v1.0
Clock: 72 MHz
ADC: ready
Type 'status' for system state

The Core Question You’re Answering

“How do I make firmware observable without a debugger?”

A UART console is a professional-grade debugging tool.


Concepts You Must Understand First

  1. UART Timing
    • How is baud rate derived from the clock?
    • What happens when baud settings are mismatched?
    • Book Reference: “Making Embedded Systems” Ch. 11 - White
  2. Command Parsing
    • How do you parse input without blocking main tasks?
    • Book Reference: “Making Embedded Systems” Ch. 4 - White

Questions to Guide Your Design

  1. Diagnostics Content
    • What system info helps debug issues quickly?
  2. Responsiveness
    • How do you ensure the console doesn’t block real-time tasks?

Thinking Exercise

“Minimal Command Set”

Before coding, define 3 commands and the exact response for each.

PSEUDO-PLAN
status -> prints clocks and uptime
adc -> prints latest ADC value
help -> lists commands

Questions while tracing:

  • How do you handle partial input lines?
  • How do you avoid buffer overflows?
  • How do you keep the console responsive?

The Interview Questions They’ll Ask

  1. “How do you configure UART baud rate on an MCU?”
  2. “What is the risk of blocking UART reads?”
  3. “How do you implement a simple command parser?”
  4. “What diagnostics are most useful during bring-up?”
  5. “How do you make firmware observable in production?”

Hints in Layers

Hint 1: Starting Point Start with a fixed boot banner to confirm UART wiring.

Hint 2: Next Level Add a simple command that returns a static string.

Hint 3: Technical Details Use a small ring buffer for incoming characters.

Hint 4: Tools/Debugging If text is garbled, verify baud rate and clock settings.


Books That Will Help

Topic Book Chapter
UART basics “Making Embedded Systems” by Elecia White Ch. 11
Non-blocking I/O “Making Embedded Systems” by Elecia White Ch. 4

Implementation Hints Think of the console as your flight recorder. Keep it lightweight but reliable.

Learning milestones:

  1. You can output reliable serial logs
  2. You can parse commands without blocking
  3. You can diagnose issues without a debugger

Project 13: Power Mode Explorer

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 3: Genuinely Clever
  • Business Potential: 2. The “Micro-SaaS / Pro Tool”
  • Difficulty: Level 3: Advanced
  • Knowledge Area: Power / Low-Power Modes
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A test program that cycles through power modes and logs wake-up sources and timing.

Why it teaches STM32F3DISCOVERY: It connects firmware design to real-world energy constraints.

Core challenges you’ll face:

  • Entering and exiting low-power modes safely
  • Measuring time and behavior during sleep
  • Identifying wake-up sources and side effects

Key Concepts

  • Low-power states: “Making Embedded Systems” Ch. 8 - White
  • Wake-up sources: “Mastering STM32” Ch. 5 - Noviello
  • Clock gating: “The Definitive Guide to ARM Cortex-M3/M4 Processors” Ch. 6 - Yiu

Difficulty: Advanced Time estimate: 1-2 weeks Prerequisites: Timers, interrupts, clock configuration


Real World Outcome

You will log how long the board stays in each power mode and what event wakes it. You will also note which peripherals survive sleep.

Example Output:

$ power_modes
Mode: Sleep -> wake by SysTick in 100 ms
Mode: Stop -> wake by external button in 2.4 s
Mode: Standby -> wake by reset

The Core Question You’re Answering

“How do I trade performance for power without breaking functionality?”

This is fundamental for battery-powered devices.


Concepts You Must Understand First

  1. Power Modes
    • What is the difference between Sleep, Stop, and Standby?
    • Which clocks remain active in each mode?
    • Book Reference: “Making Embedded Systems” Ch. 8 - White
  2. Wake-Up Sources
    • Which peripherals can wake the system?
    • How does wake-up affect system state?
    • Book Reference: “Mastering STM32” Ch. 5 - Noviello

Questions to Guide Your Design

  1. Measurement
    • How will you measure time spent in each mode?
  2. State Preservation
    • What state must be saved before sleep?

Thinking Exercise

“Power Budget”

Before coding, estimate how long a 500 mAh battery would last if the board spends 90% of time in Stop mode and 10% active.

PSEUDO-MATH
Active current: 20 mA
Stop current: 0.2 mA
Average current = (0.1 * 20) + (0.9 * 0.2)

Questions while tracing:

  • How sensitive is battery life to active duty cycle?
  • Which peripherals must be shut down?
  • How do you confirm current draw without a meter?

The Interview Questions They’ll Ask

  1. “Explain the differences between Sleep, Stop, and Standby.”
  2. “How do you decide which power mode to use?”
  3. “What wakes the MCU from low power?”
  4. “How do you preserve state across sleep?”
  5. “How do you estimate battery life?”

Hints in Layers

Hint 1: Starting Point Start with Sleep mode and a timer-based wake-up.

Hint 2: Next Level Add an external interrupt as a wake-up source.

Hint 3: Technical Details Record state before sleep and verify after wake.

Hint 4: Tools/Debugging If wake-up fails, verify clock reinitialization steps.


Books That Will Help

Topic Book Chapter
Low-power design “Making Embedded Systems” by Elecia White Ch. 8
Clock gating “The Definitive Guide to ARM Cortex-M3/M4 Processors” by Joseph Yiu Ch. 6

Implementation Hints Design a clear wake-up story: which event wakes the MCU, and what state must be restored.

Learning milestones:

  1. You can enter and exit low-power modes safely
  2. You can log wake-up reasons reliably
  3. You can reason about energy tradeoffs

Project 14: Fault Injection and Watchdog Recovery

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 3. The “Service & Support” Model
  • Difficulty: Level 3: Advanced
  • Knowledge Area: Reliability / Watchdogs
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A fault-injection test that deliberately hangs the system and then verifies watchdog recovery behavior.

Why it teaches STM32F3DISCOVERY: It teaches reliability engineering and how embedded systems recover from failure.

Core challenges you’ll face:

  • Configuring watchdog timers
  • Simulating hangs or faults safely
  • Logging reset causes

Key Concepts

  • Watchdog operation: “Making Embedded Systems” Ch. 10 - White
  • Reset cause analysis: “Mastering STM32” Ch. 5 - Noviello
  • Fault tolerance mindset: “Making Embedded Systems” Ch. 10 - White

Difficulty: Advanced Time estimate: 1-2 weeks Prerequisites: Timers, interrupts, system logging


Real World Outcome

You will see the MCU reset itself after a simulated fault and print a report showing the watchdog reset reason and recovery time.

Example Output:

$ watchdog_test
Injecting fault: infinite loop
System reset detected
Reset reason: watchdog
Recovery time: 250 ms

The Core Question You’re Answering

“How does the system recover when my code gets stuck?”

This is critical for safety and unattended devices.


Concepts You Must Understand First

  1. Watchdog Timers
    • Why do watchdogs exist?
    • What happens if you do not refresh them?
    • Book Reference: “Making Embedded Systems” Ch. 10 - White
  2. Reset Cause
    • How can you determine why the MCU reset?
    • Book Reference: “Mastering STM32” Ch. 5 - Noviello

Questions to Guide Your Design

  1. Fault Scenarios
    • What kinds of faults should trigger a watchdog reset?
  2. Recovery Behavior
    • What should the system do after reset?

Thinking Exercise

“Failure Tree”

Before coding, write a short list of possible failure modes and how the system should recover.

PSEUDO-LIST
- Infinite loop -> watchdog reset
- Sensor read hang -> watchdog reset
- Memory corruption -> safe mode

Questions while tracing:

  • How do you distinguish a watchdog reset from power loss?
  • What critical data must be preserved across reset?
  • How do you avoid reset loops?

The Interview Questions They’ll Ask

  1. “What is a watchdog timer and why is it used?”
  2. “How do you detect the cause of a reset?”
  3. “How do you design recovery behavior after a fault?”
  4. “What risks exist with watchdog resets?”
  5. “How do you test reliability features?”

Hints in Layers

Hint 1: Starting Point Configure the watchdog with a generous timeout.

Hint 2: Next Level Create a controlled fault by deliberately skipping refresh.

Hint 3: Technical Details Log reset cause immediately on boot.

Hint 4: Tools/Debugging If it resets too quickly, check watchdog clock source.


Books That Will Help

Topic Book Chapter
Watchdog design “Making Embedded Systems” by Elecia White Ch. 10
Reset analysis “Mastering STM32” by Carmine Noviello Ch. 5

Implementation Hints Treat the watchdog as your last line of defense. Test it early and document the reset reasons.

Learning milestones:

  1. You can cause and detect a watchdog reset
  2. You can log reset reasons reliably
  3. You can design recovery flow without data loss

Project 15: On-Board Sensor Fusion Dashboard

View Detailed Guide

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 4: Hardcore Tech Flex
  • Business Potential: 2. The “Micro-SaaS / Pro Tool”
  • Difficulty: Level 3: Advanced
  • Knowledge Area: Sensors / Data Fusion
  • Software or Tool: STM32CubeIDE
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A small dashboard that reads multiple onboard sensors and outputs a fused orientation or motion status.

Why it teaches STM32F3DISCOVERY: It integrates I2C/SPI, sampling, calibration, and timing into a single system.

Core challenges you’ll face:

  • Synchronizing data from multiple sensors
  • Calibrating sensor offsets and scales
  • Producing a stable fused output

Key Concepts

  • Sensor calibration: “Making Embedded Systems” Ch. 6 - White
  • Sampling synchronization: “Mastering STM32” Ch. 11 - Noviello
  • Simple fusion logic: “Making Embedded Systems” Ch. 7 - White

Difficulty: Advanced Time estimate: 1 month+ Prerequisites: I2C/SPI drivers, ADC basics, timing knowledge


Real World Outcome

You will output a motion status or orientation indicator based on multiple sensor inputs, updated at a fixed rate.

Example Output:

$ sensor_fusion
Accel: stable
Gyro: slow rotation
Orientation: tilt-right
Update rate: 50 Hz

The Core Question You’re Answering

“How do I combine imperfect sensor data into a trustworthy signal?”

This is fundamental to robotics, drones, and inertial measurement.


Concepts You Must Understand First

  1. Sensor Calibration
    • How do you measure bias and scale errors?
    • Book Reference: “Making Embedded Systems” Ch. 6 - White
  2. Synchronization
    • Why must samples be time-aligned?
    • Book Reference: “Mastering STM32” Ch. 11 - Noviello

Questions to Guide Your Design

  1. Update Rate
    • What frequency is appropriate for motion tracking?
  2. Fusion Strategy
    • How will you combine sensor outputs into a single result?

Thinking Exercise

“Data Alignment”

Before coding, sketch a timeline showing how sensor samples align within one update cycle.

PSEUDO-TIMELINE
t0: read accel
t0+2ms: read gyro
t0+4ms: fuse -> output

Questions while tracing:

  • How does delay between samples affect accuracy?
  • What if one sensor updates slower than others?
  • How do you handle missing samples?

The Interview Questions They’ll Ask

  1. “Why is sensor fusion necessary?”
  2. “How do you calibrate an accelerometer or gyroscope?”
  3. “How do you synchronize multiple sensors?”
  4. “What are the tradeoffs of high update rates?”
  5. “How do you detect sensor drift?”

Hints in Layers

Hint 1: Starting Point Start by logging each sensor independently at the same rate.

Hint 2: Next Level Align timestamps and compute a simple combined indicator.

Hint 3: Technical Details Use a rolling average or filter to reduce noise.

Hint 4: Tools/Debugging If output is unstable, verify calibration and sample alignment.


Books That Will Help

Topic Book Chapter
Calibration “Making Embedded Systems” by Elecia White Ch. 6
Sampling synchronization “Mastering STM32” by Carmine Noviello Ch. 11

Implementation Hints Start with simple fusion logic and improve once you have stable raw data.

Learning milestones:

  1. You can read multiple sensors reliably
  2. You can align samples and output a stable result
  3. You can explain fusion tradeoffs

Project Comparison Table

Project Difficulty Time Depth of Understanding Fun Factor
Board Bring-Up and Clock Audit Beginner Weekend Medium Medium
GPIO Map and Alternate-Function Explorer Beginner 1-2 weeks Medium Medium
Timer-Driven LED Sequencer Intermediate 1-2 weeks High Medium
PWM Motor or LED Brightness Controller Intermediate 1-2 weeks High High
ADC Sensor Sampler + Logging Intermediate 1-2 weeks High Medium
DAC Waveform Generator Intermediate 1-2 weeks High High
Interrupt Latency Profiler Advanced 1-2 weeks Very High High
DMA-Based ADC Ring Buffer Advanced 1-2 weeks Very High High
I2C Sensor Driver and Calibration Log Intermediate 1-2 weeks High Medium
SPI Display or LED Matrix Driver Intermediate 1-2 weeks High High
Quadrature Encoder Reader Advanced 1-2 weeks Very High High
UART Command Console + Boot Diagnostics Intermediate 1-2 weeks High Medium
Power Mode Explorer Advanced 1-2 weeks Very High Medium
Fault Injection and Watchdog Recovery Advanced 1-2 weeks Very High High
On-Board Sensor Fusion Dashboard Advanced 1 month+ Very High High

Recommendation

Start with Project 1: Board Bring-Up and Clock Audit. It grounds everything else by making timing real and measurable. Then do Project 2 and Project 3 to build pin and timer fluency, which you will reuse in almost every later project.


Final Overall Project: Real-Time Environmental Monitor + Actuator Control

  • File: LEARN_STM32F3DISCOVERY_DEEP_DIVE.md
  • Main Programming Language: C
  • Alternative Programming Languages: C++, Rust, Ada
  • Coolness Level: Level 5: Pure Magic (Super Cool)
  • Business Potential: 3. The “Service & Support” Model
  • Difficulty: Level 4: Expert
  • Knowledge Area: Real-Time Embedded System
  • Software or Tool: STM32CubeIDE + ST-LINK
  • Main Book: “Making Embedded Systems” by Elecia White

What you’ll build: A complete embedded system that samples environmental sensors, runs a control loop, and drives an actuator (fan, heater, or pump) with a UART dashboard for monitoring.

Why it teaches STM32F3DISCOVERY: It integrates clocks, GPIO, timers, ADC, DMA, interrupts, power modes, and communications into a full system with real-world behavior.

Core challenges you’ll face:

  • Balancing real-time sampling with actuator control
  • Coordinating multiple peripherals with minimal latency
  • Designing a robust watchdog and recovery strategy

Key Concepts

  • Real-time scheduling: “Making Embedded Systems” Ch. 4 - White
  • ADC + DMA streaming: “Mastering STM32” Ch. 11–12 - Noviello
  • Power and reliability: “Making Embedded Systems” Ch. 8–10 - White

Difficulty: Expert Time estimate: 1 month+ Prerequisites: Projects 1–12, plus comfort with sensor calibration and timer math


Real World Outcome

You will have a working embedded controller that: 1) Samples sensors at a fixed rate 2) Logs data and system state over UART 3) Adjusts an actuator with PWM based on sensor thresholds 4) Recovers safely from simulated faults

Example Output:

$ env_monitor
Temp: 26.4 C
Humidity: 42%
Fan PWM: 45%
Mode: active
Watchdog: healthy

The Core Question You’re Answering

“Can I design a full embedded system that is observable, reliable, and real-time?”

This ties every concept into a single system-level answer.


Concepts You Must Understand First

  1. System Scheduling
    • How do you avoid timing conflicts across peripherals?
    • Book Reference: “Making Embedded Systems” Ch. 4 - White
  2. Control Loops
    • How do you map sensor readings to actuator output?
    • Book Reference: “Making Embedded Systems” Ch. 7 - White

Questions to Guide Your Design

  1. Data Flow
    • What is the end-to-end path from sensor to actuator?
  2. Reliability
    • How will you detect and recover from faults?

Thinking Exercise

“System Block Diagram”

Before coding, draw a block diagram that shows each peripheral and the data flow between them.

PSEUDO-DIAGRAM
Sensor -> ADC -> DMA -> Buffer -> Control Logic -> PWM -> Actuator
UART -> Diagnostics
Watchdog -> Reset Logic

Questions while tracing:

  • Which blocks are time-critical?
  • Where can data be buffered safely?
  • What is the single point of failure?

The Interview Questions They’ll Ask

  1. “How do you design a real-time embedded control system?”
  2. “How do you integrate ADC, PWM, and DMA together?”
  3. “What is your strategy for fault recovery?”
  4. “How do you validate system timing end-to-end?”
  5. “How do you make an embedded system observable?”

Hints in Layers

Hint 1: Starting Point Start with a single sensor and a single actuator path.

Hint 2: Next Level Add UART diagnostics so you can see state changes.

Hint 3: Technical Details Use DMA for data acquisition and timers for PWM control.

Hint 4: Tools/Debugging Keep a fault log so you know why the system reset.


Books That Will Help

Topic Book Chapter
System scheduling “Making Embedded Systems” by Elecia White Ch. 4
DMA + ADC “Mastering STM32” by Carmine Noviello Ch. 11–12

Implementation Hints Build in layers: make each subsystem observable before integrating the next.

Learning milestones:

  1. You can run a stable sampling + control loop
  2. You can observe system state in real time
  3. You can demonstrate recovery from faults

Summary

# Project Core Outcome
1 Board Bring-Up and Clock Audit Verified clocking and timing accuracy
2 GPIO Map and Alternate-Function Explorer Pin mapping and alternate-function validation
3 Timer-Driven LED Sequencer Deterministic scheduling without delays
4 PWM Motor or LED Brightness Controller Hardware PWM control and duty mapping
5 ADC Sensor Sampler + Logging Reliable sampling with known rate
6 DAC Waveform Generator Analog waveform output and timing control
7 Interrupt Latency Profiler Measured response time under load
8 DMA-Based ADC Ring Buffer High-throughput data capture
9 I2C Sensor Driver and Calibration Log External sensor integration and calibration
10 SPI Display or LED Matrix Driver High-speed data transfer and display updates
11 Quadrature Encoder Reader Motion sensing via timer encoder mode
12 UART Command Console + Boot Diagnostics Observable firmware with command interface
13 Power Mode Explorer Measured power tradeoffs and wake behavior
14 Fault Injection and Watchdog Recovery Reliable reset and recovery behavior
15 On-Board Sensor Fusion Dashboard Multi-sensor integration and fusion
16 Final: Real-Time Environmental Monitor + Actuator Control Full system integration with real-time control