Fork me on GitHub

Project Notes

#386 BluePill

Programming an ARM Cortex-M3 STM32F103C8T6 Blue Pill board with the Arduino IDE.



Popularly known as the Blue Pill, the STM32F103C8T6 Minimum System Development Board seems like an excellent gateway drug for getting into ARM Cortex-M3 development.

This is particularly true as it is possible to program it with the familar Arduino IDE.

This is my first look at one of these boards, so I have simple expectations - follow along some of the tutorials on the web/youtube and at least get a simple program running on the board. In the process I’ll learn a bit more about the board’s capabilities and quirks.

Board Specs

  • ARM Cortex M3
  • 72 MHz
  • 64 KB
  • 20 KB RAM
  • Reset button
  • LED on PIN PC13
  • 32 kHz Real time clock crystal
  • Jump links on Boot0 and Boot1
  • Micro USB connector for power and data
  • ST-Link header on the top of the board.




The STM32F103C8 operates from 2.0 to 3.6V. The development board includes a 3.3V LDO regulator, and since many pins are 5V-tolerant, this allows the board to be used with 5V USB power.

Programming with the Arduino IDE

I’m following the STM32 Arduino Tutorial - How to use the STM32F103C8T6 board with the Arduino IDE YouTube tutorial by This is one of many, but it is the most accurate and up-to-date that I found in a quick search.


Here’s how the process went for me….

Adding Board Support to the IDE

NB: I’m running Arduino IDE 1.8.2 on MacOSX at the time of this test.

A Boards Manager package is created by Dan Drown, the instructions are on the stm32duino site

Add custom boards package package_STM32duino_index.json in Preferences


Install the STM32F1xx/GD32F1xx boards package by stm32duino in the Board Manager:


Connecting a Serial Programmer

I’m using a CH340G USB-serial adapter from MacOSX (similar but different to FTDI-based adapters).

Connections are as follows:

USB-Serial BluePill




Configuring the IDE

The default settings that work with this board are as follows:

  • Board: Generic STM32F103C series
  • Variant: STM32F103C8 (20k RAM. 64k Flash)
  • CPU Speed: 72MHz
  • Upload method: Serial
  • Port: (as selected based on USB connection)


Uploading Sketch

The Blink.ino sketch is just about the simplest thing possible - blinks the LED connected on port PC13. This is not showing off the board capabilities at all - I’m just trying to verify the programming process.

0 x Boot from User Flash. This is normal operating mode.
1 0 Boot from System Memory. This contains the embedded bootloader, and is used for programming
1 1 Boot from embedded SRAM. Used for other STM32 variants, but not the STM32F10x

For programming, the BluePill Boot0 jumper is set to 1 (pulled high).

From the Arduino IDE, the program compiled and uploaded over serial without any issue..


After disconnecting the serial programmer and switching the BluePill Boot0 jumper to 0 (pulled low), the board can be powered from USB with the program running:


Credits and References

Project Source on GitHub Project Gallery Return to the LEAP Catalog

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

LEAP is just my personal collection of projects. Two main themes have emerged in recent years, sometimes combined:

  • electronics - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting
  • scale modelling - I caught the bug after deciding to build a Harrier during covid to demonstrate an electronic jet engine simulation. Let the fun begin..
To be honest, I haven't quite figured out if these two interests belong in the same GitHub repo or not. But for now - they are all here!

Projects are often inspired by things found wild on the net, or ideas from the many great electronics and scale modelling podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know (or send a PR!). See the individual projects for credits where due.