This example was written for the STM32F429 development board. It originally came as an example with the STM32 Cube Firmware v1.18.0 however, I've made a few changes:
- I added a makefile so that it can easily be built without an IDE (see directions below)
- I've removed the dependency on the STM32 board support packages (BSP)
- I've removed the dependency on the STM32 HAL
Although this is a simple program - it just blinks LEDs on the board periodically - its importance is that it shows how to use FreeRTOS with multiple threads in an STM32 project without any dependency on other third party packages. Note that FreeRTOS is available indepdently at freertos.org but that it also comes packaged in the STM32 Cube Firmware. This example uses FreeRTOS that comes packaged in the STM32 Cube Firmware.
Foreword
I currently (Winter 2018) use Windows as my main development machine, however, I'm fairly certain the following build steps can be done using a typical Linux distro (with a few minor tweaks) and quite possibly MacOS as well.
Prerequisites
- An STMF32F429 development board. Currently they can be ordered online for around $30 USD plus shipping.
- Download and install the GNU Arm Embedded Toolchain
- Download and install GNU Make for Windows
- Download and install the STM32 ST-Link Utility.
- Download and uncompress STM32 Cube Firmware (I'm using v1.18.0)
Compiling and Flashing the Program to the Dev Board
- Open a GCC Command Prompt. Note that a "GCC Command Prompt" option was installed when installing the GNU Arm Embedded Toolchain and should be available from the Windows Start Menu.
- Change to the BlinkLightsCube32FreeRTOS directory and run "make STM32CubeDir=LocationOfSTM32Cube" subsituting in the location of STM32Cube Firmware package on your machine. This will compile the program into a bin file.
- Open the STM32 ST-Link Utility and select "Program" from the "Target" pulldown menu.
- Navigate to the BlinkLightsCube32FreeRTOS directory and select main.bin.
- Click "Start" to flash main.bin to the development board. After this is done you should see both of the LEDs blink in differing intervals. See the code in main.c. Each LED is controlled from a separate FreeRTOS thread.