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
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.
|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!|