I recently got a new board, finally. This is my first endeavors into STM32 microcontrollers after mainly working with RaspberryPis and Arduinos. Embedded has a special place in my heart since I worked on a drone project with a team at university, and it improved my programming skills ten fold. It was super cool to see something go from software simulated into the real physical world.
STM32F767ZI
There wasn't really a reason why I chose this board over other microcontroller boards, I thought it was pretty popular and decided to go with the flow here. The ARM Cortex built into the board provided more than enough power for my use case, which is nothing too demanding. It has more peripheral interfaces then I would ever need, and most importantly for me, it has ethernet.
Bare Metal
Working with the registers directly is quite satisfying. At times, it is admittedly repetitive to open up the enormous datasheets to find exactly what register or what address you need, and how it works, but the moment it all comes together is magical. In most of my projects I have ever done in c++ never had to deal with fiddling around with bits ever, unless it was for doing enum flags or something.
Doing Everything All At Once
I knew I was going to spend more time reading documentation then doing anything meaningful in the beginning stages, so I just set out to do the blinky exercise, of course. After getting that working, I started to get a better idea of the hardware and just did more trivial exercises that are small in scope. The board has a built in LED and button, so I was able to use that to try out and see how the GPIO pins worked with this new board.
Afterwards again, I went through the routine of doing some messing around with timers, clocks, and interrupts. In general, I am not sure if the average developer will ever need to interact with interrupts since x86_64 and other modern processors just take care of it for you. In embedded, it is a feature that we can control though, which provides some neat tricks we can do. Since the manufacturer will have a template for the syscall.c, we can as developers just insert our own logic for anything that happens on the microcontroller. In my case, I had a timer interrupt just did a char write out to the OLED screen.
The Future
I desperately want to try FPGAs, but the boards are so wildy expensive. Apparently, you can actually try to build circuits entirely on the desktop for now, without the hardware. I might try that sometime despite not knowing much about Verilog. Yet, it seems interesting enough.