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 Cube Firmware package. This included removing dependency on the STM32 board support packages (BSP), STM32 HAL and FreeRTOS that came packaged in the STM32 Cube Firmware package.
- I added a dependency on FreeRTOS as downloaded directly from its site. (I used version 10.0.0)
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 STM32 firmware packages.
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 FreeRTOS. (I used version 10.0.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 BlinkLightsFreeRTOS directory and run "make FreeRTOSDir=LocationOfFreeRTOS" subsituting in the location of the uncompressed FreeRTOS 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 BlinkLightsFreeRTOS 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.