STM32 Bring Up
Introduction
Getting started with a micro-controller usually means picking up a board,
an IDE, some RTOS or a set of libraries. Depending of your level of experience,
your budget and the solutions you select, the learning curve may be a steep
one and what you will learn can be very limited if you end up cornered in a
sandbox with no understanding of what’s going on under the hood.
Commercial solutions and mature open source projects are a must if you want to
develop products with some level of quality. Unfortunately their complexity is
high because they have to satisfy complex requirements. Their documentation
and source code when available are often hard to navigate, out of date or just
not addressing what you need to learn.
Starting from scratch, on the other hand, is not something often documented and
when it is, it is usually after the fact. So if you want to learn how to do it
you need to catch the opportunity to watch someone going through the steps and
explaining what’s going on.
I will try to capture here my own “STM32 bring up” journey using a step by step
approach, writing down the problems faced and decisions taken while evolving
simple projects.
Part I: Bring it up!
I proceed by small incremental steps that are easy to reproduce and simple
enough to adapt to a variant of the micro-controller or a different board
layout.
- Pick up a toolchain, install it and check
that it can build an executable.
- Write a minimal bootstrap for a target
micro-controller and build a first executable.
- Flash the first executable in an actual board
and verify that it boots.
- Use the System Tick to handle the blinking.
- Insure that RAM memory is initialized as expected for a
C startup.
- Structure the code according to the
three stages: boot, initialization and main
execution.
- Publish the code to a web git repository
for further evolution.
It’s time to move to a more talkative interface so that the board not
only winks but also speaks. Again I will go through several steps to get
to a working asynchronous serial communication.
- Validate the serial connection by wiring a
board with an USB to UART adapter and using a Serial Flash loader application
to read the chipset flash memory.
- Make sure that the code evolved so far works on the
board with a serial connection.
- Say hello as first transmission.
- Use stm32flash as flashing tool on both
Windows and Linux.
- Prototype an application that tells how
long the system has been running.
- Write a production version of uptime application.
- Bundle the standard C library output functions into an actual
library.
- Implement DHT11 humidity and temperature
sensor reading.
- Use DS18B20 digital thermometer for accurate
temperature reading.
- Trigger ADC conversion to read the internal
voltage and temperature sensors.
- Perform CRC-32 flash content validation
during startup.
Appendices
© 2020-2024 Renaud Fivet