Embedded Systems 1


This course is an introduction to bare-metal embedded systems programming. Assuming solid foundational knowledge of one of the programming languages used, the entire course should take about 10 hours to complete. The time required is very approximate, and depends on the student's learning style and target thoroughness. This course is roughly equivalent to half of a semester-long college course.

The course will roughly follow the Embedded Rust Book (CC BY-SA 4.0), using it as assigned reading, and occasionally borrowing files and the like.

It is important to note that this course is for bare-metal programming. For a microcontroller course based on a higher level abstraction, consider Arduino


  • Computer Architecture I
  • A basic understanding of Git
  • Rust (or C)

Platform AgnosticismEdit

In an attempt to make it more widely-available, one of the main priorities of this class is to be as platform-agnostic as possible, and therefore supports many operating systems, programming languages, target SoCs, and chip architectures. However, it is logistically difficult to support all of these different platforms equally, and we therefore recommend that you use Linux to program in Rust for the STM32 SoC, as that is the most thoroughly tested platform.


  • SoC (System on a Chip): Also known as a microcontroller, this will be the device you program in the course.
  • Debugger: Though there are many tools used for debugging, this term generally refers to a software program run on your computer to examine the states of various parts of your SoC, such as registers or memory locations.
  • Processor: Each SoC has a primary processing unit that runs the code that you put on it. Generally this will be either an ARM, Atmel, or RISC-V CPU.
  • Peripheral: A set of hardware devices, either built into your SoC or connected to it externally using the pins.
  • IC (Integrated Circuit): A circuit built into a single package, generally a flat black box with metal 'legs' sticking out of it. The SoC is an example of an IC.

Course ChecklistEdit

Lesson Name Description
Lab 00: Hello, World! Get your code from your brain, through your computer, onto your target chip
Lab 01: Communication is essential Enable communication between your computer and your chip so that you can more easily see what is going on inside of it
Lab 02: Types of data An overview of the many types of data in embedded systems programming, and how using them differs from traditional computer programming
Lab 03: Wax in Read digital and analog data from the outside world
Lab 03: Wax out Write digital and analog data to the outside world
Lab 04: Time is of the essence Measure time using a Timer peripheral
Lab 05: Chatting amongst peers Implement three of the most widely used communication protocols to interface your SoC to external ICs
Lab 06: Final project Implement one of 3 different projects that uses all of the concepts from the course, or even better, design and create your own!

See AlsoEdit

  Type classification: this resource is a course.
  Educational level: this is a tertiary (university) resource.
  Subject classification: this is an engineering resource.
  Completion status: this resource is just getting off the ground. Please feel welcome to help!