1. Introduction
  2. Background
  3. Hardware/knowledge requirements
  4. Setting up a development environment
    1. Linux
    2. Windows
    3. macOS
    4. Verify the installation
    5. Setting up your IDE
  5. Meet your hardware
    1. micro:bit v2
    2. Rust Embedded terminology
  6. Meet your software
    1. Embedded Setup
    2. Build it
    3. Flash it
    4. Debug it
    5. Light it up
  7. Hello World
    1. Toggle it
    2. Spin wait
    3. NOP
    4. Timers
    5. Portability
    6. Board support crate
  8. LED roulette
    1. The challenge
    2. My solution
  9. Inputs and Outputs
    1. Polling
    2. Turn signaller
    3. My solution
    4. Polling sucks, actually
  10. Registers
    1. RTRM
    2. (mis)Optimization
    3. 0xBAAAAAAD address
    4. Spooky action at a distance
    5. Type safe manipulation
  11. Serial communication
    1. *nix tooling
    2. Windows tooling
  12. UART
    1. Send a single byte
    2. Send a string
    3. Naive approach and write!
    4. Receive a single byte
    5. Echo server
    6. Reverse a string
    7. My solution
  13. I2C
    1. The general protocol
    2. LSM303AGR
    3. Read a single register
    4. Using a driver
    5. The challenge
    6. My solution
  14. LED compass
    1. Magnitude
    2. The challenge
    3. My solution
  15. Punch-o-meter
    1. Gravity is up?
    2. The challenge
    3. My solution
  16. Interrupts
    1. NVIC and interrupt priority
    2. Sharing data with globals
    3. Debouncing
    4. Waiting to be interrupted
    5. The MB2 speaker
    6. The challenge
    7. My solution
    8. Addendum: PWM
  17. Snake game
    1. Game logic
    2. Controls
    3. Non-blocking display
    4. Final assembly
  18. What's left for you to explore
  19. Download epub version of the book
  20. General troubleshooting
  21. How to use GDB
  22. Magnetometer calibration
  23. Licenses and attribution