STM32 is a family of 32bit microcontrollers manufactured by STMicroelectronics and based on the ARM Cortex M core.
The STM32 family is divided into different lines of microcontrollers (L0-1-4, F0-1-2…) depending on their features and the use they are designed for:
These microcontroller are widely used in the industrial world… for example both Pebble watches and Fitbit bracelets are based on STM32 MCUs.
If you’re interested in quadricopters or drones, you probably have heard or used F1, F3, F4… flight control boards. The board name (“F…”) indicated indeed the STM32 microcontroller they are based on.
Thanks to the work made by the stm32duino community and to the support of ST itself, starting from the past June STM32 microcontrollers can be easily used with the Arduino IDE and it’s also possible to take advantage of most of the libraries available for Arduino.
I decided to buy a minimal development board based on the STM32F103C8T6 microcontroller (these boards are sometimes known as blue pills); let’s see how to use it with Arduino.
Many boards are sold unprogrammed: the first thing to do is therefore to program a bootloader, that is a small program which will allow to upload the “real” program via USB port.
To flash the bootloader, you need an USB -> serial adapter, connected to your dev board as it follows:
- RX -> A9
- TX -> A10
- VCC -> 5V
- GND -> GND
You have also to enable the programming mode, moving the first jumper (labeled BOOT0) to position 1:
Now you need a software to flash the file with the bootloader into the chip. If you’re under Windows, you can download the Flash Loader from ST’s official website: after having registered (for free) you’ll receive the download link via email.
The bootloader is developed and maintained by Roger Clark and it’s available in his Github repository. For STMF1 boards there are several binary files, depending on the PIN the onboard led is connected to. My board uses P13, so I downloaded the file generic_boot20_pb13.bin.
Run the Demonstrator GUI program and select the serial port your adapter is connected to:
If all the connections are ok, the software should be able to detect the microcontroller:
Now you can select the specific MCU your board uses:
then select the file with the bootloader and program it. To be sure, you can ask the software to perform also a global erase of the memory:
The program will flash the chip and, when complete, will confirm the operation with a message:
If you now move back the BOOT0 jumper to the original position, you should see the led blink: this means that the bootloader is running and can’t find a program to execute… now it’s time to configure the IDE.
Open your IDE and select File – Preferences. Type the following address in the Additional Boards Manager URLs field:
Now open the Boards Manager:
Search STM32F1 and install the corresponding Cores package:
You’re almost ready to compile and run your first program…
Connect the dev board to your PC using an USB cable and verify how it is identified.
It may happen that Windows cannot correctly identify the board and displays it as Maple 003, is this case you have to install the correct drivers:
Download the following files from Clark’s repository:
Run the two .bat:
now Windows should identify the board correctly:
Sometimes Windows cannot see the additional serial port of the board. To solve the problem, you can try to program on the board a simple sketch that uses the Serial object. Open for example the blink sketch and change it as it follows:
Program the sketch choosing BluePill F103C8 as board and STM32duino bootloader as upload method.
Once the sketch is programmed and executed, Windows should detect and install the new COM port:
You’re done, now the board is fully integrated with the Arduino IDE: