This course is focused on giving real world coding experience and hands on project work with ARM based Microcontrollers (STM32). In Introduction to Embedded System Programming, students will learn the essential skills for reading and writing I/O lines, configuring peripherals such as analog and digital converters, counter/timer modules, and the serial interface or UART. First, students will discover how to configure the clock system of the Microcontroller to balance performance and power consumption. Later, students will explore digital and analog inputs and outputs, and write interrupt service routines to handle real-time tasks quickly. Finally, students will delve into the basics of powerful debugging tools by putting the Microcontroller to sleep to extend the battery life of the system, and ultimately learn to refactor and organize code.By the end of this course, students will have the fundamental skills necessary for embedded firmware development, helping students design and build products of their own.