The Essence of Embedded Systems – Firmware Edition (STM32 Discovery Board)
If you’ve understood the overall flow in *The Essence of Embedded Systems – Fundamentals*, it’s now time to implement STM32 firmware yourself. Using an STM32 Discovery Board, you’ll systematically learn everything from CubeMX configuration to implementing firmware based on GPIO, UART, timers, and interrupts. This course goes beyond simply using HAL APIs, covering how to connect peripherals and design systems within a real project workflow. Rather than practicing individual functions in isolation, you’ll gain hands-on experience completing an entire firmware system.
70 learners
Level Basic
Course period Unlimited


[New Announcement] If you’re stuck during the STM32 hands-on exercises, please ask your question like this!
Hello.
I'm Huchu Dad from the Coding Beginner Rescue Squad.
STM32 exercises involve not only code but also CubeMX settings, the build environment, Flash, wiring, and peripheral configurations working together. So when a problem occurs, if you let me know which stages are currently working properly, I can identify the cause much more quickly.
When asking a question, if possible, please include the following information as well.
Which course and which exercise it is
Whether the build and flash complete successfully
How far it works properly
The difference between the expected behavior and the actual behavior
If there is a compile/link error, include the full error message
Related code and CubeMX settings
If it is a hardware issue, a photo of the wiring
For example, rather than
❌ "The LCD isn't displaying anything."
⭕ "I’m working on an I2C LCD exercise. Build and Flash complete successfully, and no errors occur in the HAL API. The LCD backlight turns on, but no text is displayed. The CubeMX I2C settings and current wiring are as follows."
Or,
❌ "PWM is acting strangely."
Rather,
⭕ "I am practicing SG90 servo motor PWM. PWM output is generated after configuring the timer, but the servo motor does not move to the desired angle. The Prescaler/Period settings are as follows, and the period and pulse width measured with a Logic Analyzer are as follows."
It would be helpful if you could leave it like this.
Especially in firmware,
Build → Flash → peripheral initialization → signal generation → actual device operation
it is important to develop the habit of checking one by one how far things are working normally.
More important than asking a good question is communicating as accurately as possible what you currently know and what you have verified. If you're not sure, it's okay to write only what you know.
If you get stuck while taking the course, feel free to leave a question anytime. :)
Thank you.
Best regards, the Coding Beginner Rescue Team




