Set up a Barebones STM32F4 development environment (Windows & Mac)

Every time I come back to developing for the STM32F4 discovery board, I end up searching for several hours for a basic barebones template and guide for setting everything up. I decided to make this post as a refresher for myself, and I am sure it will help many others out there. I have made a repository on my github page, which contains templates for Mac OSX and Windows (using .bat and Makefiles). The templates incorporate the ST Standard Peripheral Driver library as well as sample assembly code.

I prefer using a barebones setup (no IDE) when developing for the STM32F4. However, it is extremely easy to start development with an IDE. If you want to try out an IDE, I highly recommend CooCox CoIDE. The following steps are provided for those using either a Windows or Mac OSX operating system. If you are using Linux, then I recommend going to EliasElectronics; I have used this on my own system.

0. Install git

I highly recommend that you install git on your machine, regardless if you are using OSX or Windows.
There are tons of great examples on how to install git on Windows and OSX, so just do a google search.

Once you have git installed, clone the repo I have made which contains all of the Barebones templates.

Windows Toolchain Setup:

1. Install arm-none-eabi

We first need to download the GNU Toolchain for ARM embedded systems. Go to the following URL, and download the windows installer (as of now: 4.8 2014q3).

Go to wherever you downloaded the installer and run the executable to start the installation process. When you get to the step to choose a destination location, browse to a path without spaces, as seen below.

add gcc to PATH photo add_gcc_to_windows_path.png

Continue with the installation until you reach the final screen. Make sure you click “Add path to environment variable” as seen below.

installation Path arm-none-eabi photo ARM1.jpg

Now open up the command prompt and type:

arm-none-eabi-gcc --version

You should see the following results if the ARM toolchain was setup correctly.

 photo armnoneeabiCMD.jpg

At this point, you can start developing for the STM32F4. The only caveat is that you must use windows batch files in order to build your projects. This limits the cross compatibility of your code, as you will most likely be using some sort of makefile on OSX and Linux. However, this option is favorable as you do not need to download any other software to build your projects. Therefore, I have created a template for you to use, along with the batch scripts. You can find the template, Barebones_Windows_Batch, on my github.

If you choose to go this route you will still need the ST-Link Utility software in order to flash the .hex file to the ST board. Skip to step 3 for the instructions to install.

2. Install MinGW and MSYS (optional if using .bat files)

We will now install MinGW and MSYS in order to get a nice terminal emulator and many unix capabilites including make.
Download the latest mingw-get-setup.ext
Select mingw32-base, mingw32-gcc-g++, msys-base under ‘Basic Setup’
Installation Manager photo mingw_installation_manager.png
Select msys-minty and msys-wget under ‘All Packages’
Install Mintty photo install_mintty.png
Select Installation/Apply Changes to install the software selected
 photo mingw_installation_successful.png

Add the following to the your PATH variable:


 photo add_msys_to_the_path.png
Create a desktop shortcut to mintty terminal which is located here:C:\MinGW\msys\1.0\bin
Right click on the shortcut, click on properties, and change the target to:

C:\MinGW\msys\1.0\bin\mintty.exe /bin/bash -l

You now have all the command line utilities necessary to build the STM templates using the make command.

3. Install ST-Link Utility

In order to flash the STM32F4 board with our compiled project, we will use the ST-Link Utility.
Go to the link above and download the ST-Link Utility. Follow the steps as it will install all of the necessary drivers for connecting to the STM32 board.

4. Flash The STM32F4

After you build your project, either through make.bat, or the Makefile, you must then flash the .hex file to the ST board.
A. Connect your STM32F4-Discovery board to your PC
B. Open up the ST-Link Utility
C. Select File/Open File/ and navigate to the build/ directory and open the ***.hex file
D. Select Target/Program and Verify/Start to flash the board
 photo STLinkUtility.jpg

Mac OSX Toolchain Setup

1. Install arm-none-eabi

You can either download the toolchain as we did above and then edit your path variables, or we can use the homebrew package manager for osx, which is the way I will describe below.
A. Install Homebrew
Homebrew is a very nice package manager for OSX, much like apt-get on Ubuntu. There is a lot of information on their website, so feel free to take a look.
Otherwise, simply open the terminal, enter the following command, and follow all the steps to install.

ruby -e "$(curl -fsSL"

Now that we have homebrew installed, it is very easy to install the ARM toolchain. Simply enter the following commands:

brew tap PX4/homebrew-px4
brew update
brew install gcc-arm-none-eabi-48

This will install the latest (as of Oct. 5, 2014) ARM toolchain (4.8 2014q3)
To test that the installation works, enter:

arm-none-eabi-gcc --version

and you should get the following output
 photo ScreenShot2014-10-05at94513PM.png

2. Install ST-Link

In order to flash our programs onto the STM32F4 we will use a software called st-link. We will need to get and compile from source, the st-link software. Run the following commands to build st-link. *This assumes you are at your home (~) directory.

mkdir src && cd src
git clone git://
cd stlink

Now we will install the st-link tools we will use and make them available via the PATH variable. *Again, this assumes you are in the ~/src/stlink directory from above.

sudo mkdir /usr/local/opt/stlink
sudo cp st-flash /usr/local/opt/stlink/.
sudo cp st-util /usr/local/opt/stlink/.

Now we must add the st-link to our path (be cautious with this)

sudo bash -c "echo /usr/local/opt/stlink >> /etc/paths"
---> OR, edit the file yourself and append "/usr/local/opt/stlink"
sudo emacs /etc/paths

To test the st-link is working, restart the terminal, plug in your STM32F4-Discovery board, and enter st-util into the terminal. You should get the following output.

 photo ScreenShot2014-10-05at94836PM.png

Have fun developing

Now everything should be setup and you can start developing on either Windows or OSX. I hope this helped some of you and saved many hours hunting. Let me know if you have any questions, and feel free to checkout my youtube page,, for tutorials on the STM32F4-Discovery Board. Thanks!!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s