Introduction

It has been a while since I started playing around with microcontrollers. My journey began with the Arduino UNO and programming it using the Arduino IDE. Later, I spent some time learning how to program PIC microcontrollers for my coursework, and that was my first real exposure to bare metal programming.

At that time, though, I was more focused on completing coursework than truly understanding what I was being exposed to. The Arduino ecosystem abstracts a lot of things away, and for almost everything there is already a library available. Compared to that, bare metal programming felt painful reading datasheets, finding register addresses, and doing all that work just to blink an LED did not seem exciting back then.

But something changed recently.

Now I actually want to avoid those high-level Arduino functions and understand what is happening underneath them. Somehow, bare metal programming now feels much cooler than simply calling prebuilt functions.