STM32F103 "Blue Pill" (STM32F103C8T6)
⚡ The essentials in 60 seconds
- cpu — single-core ARM Cortex-M3, r2p0, up to 72 MHz (ST page title; f_cpu = 72000000L in PlatformIO board definition, retrieved 2026-10-13). No MPU (__MPU_PRESENT 0), 4 NVIC priority bits, no FPU (Cortex-M3) — per ST's CMSIS device header stm32f103xb.h (github.com/STMicroelectronics/cmsis_device_f1, retrieved 2026-10-13).
- memory — 64 KB flash / 20 KB SRAM ("STM32F103C8 (20k RAM. 64k Flash)", maximum_size: 65536, maximum_ram_size: 20480 in the PlatformIO board JSON above; corroborated by stm32-base.org FLASH 64 KiB / SRAM 20 KiB, retrieved 2026-10-13). Flash page size 1 KB up to 128 KB density (STM32duino-bootloader README, retrieved 2026-10-13).
- package — LQFP48 is listed among the STM32F1 package options (Wikipedia — STM32). >
- clocks_on_the_board — HSE crystal 8 MHz, LSE RTC crystal 32.768 kHz, HSI 8 MHz / LSI 40 kHz internal (stm32-base.org, retrieved 2026-10-13). >
- connectivity — no WiFi / BT / Ethernet — this is a bare MCU board; USB is device-only full-speed (bit of the fun is bit-bang/USBD stacks). CAN and RS-485-style UARTs make it popular in industrial tinkering. Board:
- power — micro-USB (5 V), +5V and +3.3V header pins; on-board 3.3 V LDO, TX6211B, 3.6–5.5 V in, 3.3 V @ 300 mA out (stm32-base.org, retrieved 2026-10-13). VBAT pin broken out; no backup battery holder; VREF+/VDDA not separately brought out (same source).
- On this board : 9 tutorials · 10 code
The STM32F103C8T6 development board, universally known in the maker community as the "Blue Pill," stands as one of the most significant entry points into the world of 32-bit microcontrollers. Named after the iconic plot device in the film The Matrix, this small, unbranded Chinese development board centers on the STMicroelectronics STM32F103C8T6 chip, a member of the STM32F1 "Performance" line announced by ST in June 2007. The core of this microcontroller is an ARM Cortex-M3 processor, a single-core architecture that runs at a clock speed of up to 72 MHz. For those new to embedded systems, the clock speed represents the number of cycles the processor can perform per second; 72 million cycles allow for significantly more complex calculations and faster response times than the 8-bit chips found in many beginner kits, making it a powerful yet affordable tool for learning. The board itself is compact, measuring just 23 mm by 53 mm, and features a blue printed circuit board, which contributes to its nickname. It is designed with a "Nano footprint," meaning its physical pin layout is compatible with Arduino Nano shields and carrier boards. However, a crucial distinction must be made: while the physical shape matches the Nano, the logic levels are 3.3 Volts, not the 5 Volts used by standard Arduino boards. Connecting 5V devices directly can damage the chip, so users must always verify voltage compatibility when expanding their projects.
The technical specifications of the Blue Pill offer a compelling balance of resources and cost. The STM32F103C8T6 variant typically comes with 64 KB of Flash memory for storing program code and 20 KB of SRAM for temporary data storage. While these numbers may seem small compared to modern computers, they are ample for most real-time control applications, sensor data logging, and communication tasks. The chip includes a rich set of peripherals that expose various communication protocols directly to the user. These include three USARTs (serial communication ports), two SPI interfaces, two I2C interfaces, and notably, a CAN bus controller. The presence of CAN (Controller Area Network) is a standout feature, as this robust communication standard is widely used in automotive and industrial robotics, making the Blue Pill a rare budget-friendly option for learning these professional-grade systems. The board also features two 12-bit Analog-to-Digital Converters (ADCs), allowing it to read analog signals from sensors like light detectors or temperature probes with reasonable precision. It is important to note that this specific chip lacks a hardware Floating-Point Unit (FPU) and a Memory Protection Unit (MPU), meaning it handles decimal math through software emulation and does not have built-in memory isolation for security, which is typical for this class of microcontroller.
Powering the board is straightforward but requires caution. It features a micro-USB connector that supplies 5 Volts, which is then regulated down to 3.3 Volts by an onboard Low-Dropout (LDO) regulator, specifically the TX6211B. This regulator can supply up to 300 mA, which is sufficient for the chip and small peripherals but not for driving motors or high-current devices directly. A critical warning for users is that the 5V pin on the header is directly connected to the USB power source without any protection circuitry. Therefore, one must never power the board via USB and an external power supply simultaneously, as this can cause a short circuit or damage the components. The board also includes an 8 MHz external crystal oscillator for the main system clock and a 32.768 kHz crystal for the Real-Time Clock (RTC), ensuring accurate timekeeping even when the main power is off, provided a backup battery is connected to the VBAT pin.
Programming the Blue Pill has evolved significantly, offering multiple pathways for developers. The most recommended method today is using the official STM32duino core within the Arduino IDE. This allows users to write code using the familiar Arduino syntax while leveraging the powerful hardware of the STM32. The board is supported as the "BLUEPILL_F103C8" target. For those who prefer lower-level control, the board supports bare-metal programming using C or C++ with libraries like libopencm3 or ST’s own STM32Cube HAL. This gives developers direct access to the hardware registers, allowing for optimized performance and deeper understanding of how the microcontroller works. Uploading code can be done via the onboard micro-USB port if a community bootloader is installed, or via the Serial Wire Debug (SWD) interface using an external programmer like an ST-Link. The board also has a built-in ROM bootloader that allows programming over the serial port (USART1) by setting the BOOT0 jumper, a useful fallback if the main firmware becomes corrupted.
Despite its popularity, the Blue Pill is not without its challenges, primarily stemming from its status as a mass-produced, unbranded item. A well-documented issue is the prevalence of counterfeit or cloned chips. Many boards sold as genuine STM32F103C8T6 units actually contain pin-compatible clones from manufacturers like GigaDevice (GD32 series) or other unmarked fakes. These clones often exhibit subtle bugs, such as failing to program at higher baud rates or having incorrect USB pull-up resistor values, which can lead to flaky USB connections. Users should be aware that boards labeled "C8" (64 KB Flash) often ship with "CB" (128 KB Flash) chips, which is generally beneficial but requires verifying the actual memory size in software. Another common pitfall for beginners is the onboard LED on pin PC13. Unlike most microcontroller boards where a HIGH signal turns an LED on, the Blue Pill’s LED is wired in "sink mode," meaning it lights up when the pin is set to LOW. This inverted logic is a frequent source of confusion for new users. Additionally, the board lacks protection against reverse polarity or overvoltage, so careful attention to power connections is essential. Despite these quirks, the Blue Pill remains a cornerstone of the maker community, offering an unparalleled combination of performance, peripheral richness, and low cost, serving as a gateway to advanced embedded systems development.

Pinout diagram

| Attr | Specs | verified |
|---|---|---|
cpu | single-core ARM Cortex-M3, r2p0, up to 72 MHz (ST page title; f_cpu = 72000000L in PlatformIO board definition, retrieved 2026-10-13). No MPU (__MPU_PRESENT 0), 4 NVIC priority bits, no FPU (Cortex-M3) — per ST's CMSIS device header stm32f103xb.h (github.com/STMicroelectronics/cmsis_device_f1, retrieved 2026-10-13). | ✔ |
memory | 64 KB flash / 20 KB SRAM ("STM32F103C8 (20k RAM. 64k Flash)", maximum_size: 65536, maximum_ram_size: 20480 in the PlatformIO board JSON above; corroborated by stm32-base.org FLASH 64 KiB / SRAM 20 KiB, retrieved 2026-10-13). Flash page size 1 KB up to 128 KB density (STM32duino-bootloader README, retrieved 2026-10-13). | ✔ |
package | LQFP48 is listed among the STM32F1 package options (Wikipedia — STM32). > | ✔ |
clocks_on_the_board | HSE crystal 8 MHz, LSE RTC crystal 32.768 kHz, HSI 8 MHz / LSI 40 kHz internal (stm32-base.org, retrieved 2026-10-13). > | ✔ |
connectivity | no WiFi / BT / Ethernet — this is a bare MCU board; USB is device-only full-speed (bit of the fun is bit-bang/USBD stacks). CAN and RS-485-style UARTs make it popular in industrial tinkering. Board: | ? unverified |
power | micro-USB (5 V), +5V and +3.3V header pins; on-board 3.3 V LDO, TX6211B, 3.6–5.5 V in, 3.3 V @ 300 mA out (stm32-base.org, retrieved 2026-10-13). VBAT pin broken out; no backup battery holder; VREF+/VDDA not separately brought out (same source). | ✔ |
i_o | 2× 20-pin 2.54 mm male headers (PA0–PA7, PA11–PA15, PB0–PB15, PC13–PC15, VBAT, NRST, 3V3, 5V, GND), 4-pin SWD header (3V3/PA13/PA14/GND), user LED on PC13 wired in sink mode (LED between VCC and pin → writing LOW turns it ON), power LED, reset button, BOOT0 and BOOT1 jumpers (BOOT1 on PB2) — full pin table in stm32-base.org (retrieved 2026-10-13). | ✔ |
logic_level | 3.3 V. | ? unverified |
consumption | ? unverified | |
temperature_range | ? unverified |
- MCU: STMicroelectronics STM32F103C8T6 — part of the STM32F1 "Performance" line (STM32F103), the first STM32 family, based on the ARM Cortex-M3 core. The F1-series was announced by ST in June 2007 (Wikipedia — STM32, retrieved 2026-10-13). ST's official product page is titled "STM32F103 — Arm Cortex-M3 Microcontrollers (MCU) 72 MHz" (st.com/en/microcontrollers-microprocessors/stm32f103.html, retrieved 2026-10-13).
- Board: the "Blue Pill" is an unbranded Chinese development board around that chip. Per the STM32-base board database: Brand "Unknown", Origin "China", PCB colour blue, 23 mm × 53 mm (stm32-base.org — STM32F103C8T6 Blue Pill, retrieved 2026-10-13). It is a Nano-footprint-compatible board (Arduino Nano pin-compatible male headers, 0.6-inch DIP-30 row spacing, but 3.3 V logic, not 5 V) (Wikipedia — STM32, retrieved 2026-10-13).
- Name origin: "This board got its name from a forum post at the STM32duino forums and is a reference to the movie The Matrix" (stm32-base.org, retrieved 2026-10-13).
- Launch year of the board: >
- Launch price: a 2015-era community write-up linked from the Arduino_STM32 README is titled "4 Dollar 90 MIPS 32-bit 72 MHz ARM Arduino" (hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino, linked from github.com/rogerclarkmelbourne/Arduino_STM32, retrieved 2026-10-13). The "≈2 $ pill" price point commonly quoted today is >
- Status: MCU in active production (ST product page live, retrieved 2026-10-13); board endlessly available from Chinese marketplaces. Beware: "most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, retrieved 2026-10-13).
- Variants: boards populated with STM32F103C6 (32 KB), C8T6 (64 KB) or CB (128 KB, often sold as C8 — "64KB Flash (most have 128KB)" per land-boards.com wiki, retrieved 2026-10-13); the official Arduino core lists BluePill F103C6/C8/CB targets (Arduino_Core_STM32 supported boards, retrieved 2026-10-13). Pin-compatible clone MCUs from GigaDevice (GD32F103, Cortex-M3 line introduced 2013, Wikipedia — GigaDevice/GD32, retrieved 2026-10-13) and remarked counterfeits (see Problems). The "Black Pill" is the F401/F411 successor (Wikipedia — STM32).
+ Strengths
- Cheapest 72 MHz Cortex-M3 ever mass-distributed — "4 Dollar 90 MIPS 32-bit 72 MHz ARM Arduino" (hackster link in Arduino_STM32 README, retrieved 2026-10-13); the de-facto entry ticket to 32-bit ARM.
- Genuine USB full-speed peripheral on-chip (not a CDC chip): device USB on PA11/PA12 enables HID/MIDI/CDC/DFU projects without extra silicon (USB pins per stm32-base.org, retrieved 2026-10-13).
- bxCAN controller (CAN1 in the official variant pin map, PeripheralPins.c/PeripheralPins.c), retrieved 2026-10-13) — rare at this price, drives its automotive/robotics use.
- The on-board STM32 itself is the "special feature": the chip can be reprogrammed as a USB device, so a spare Blue Pill can host community bootloaders or test firmware like Greaseweazle's Blinky diagnostic (STM32-Fakes wiki, retrieved 2026-10-13).
- Nano-compatible 3.3 V footprint lets Nano shields/carrier boards work with level caution (Wikipedia — STM32, retrieved 2026-10-13).
- Huge dual-core Arduino story: the only board equally served by both the official ST-backed core and the historic community core (see Systems).
- No hardware FPU, no MPU, no crypto engine — "features" here mean raw price/peripherals, not security (CMSIS header shows __MPU_PRESENT 0, cmsis_device_f1, retrieved 2026-10-13).
− Weaknesses
- Counterfeit/clone chips are endemic. "Unfortunately, most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, retrieved 2026-10-13). The Greaseweazle "Rogues' Gallery" documents fakes sold as STM32F103C8 with concrete failures: cannot program at 921600 baud; cannot start firmware from the System Bootloader; I2C won't accept CR1_ACK in the same write as CR1_PE; DMA generates spurious completion interrupts and locks up; backup-domain clock-off hangs the chip; some clones even fix genuine Erratum 2.3 (debug-register reads), which is itself a detection trick (github.com/keirf/greaseweazle/wiki/STM32-Fakes, retrieved 2026-10-13). Legit pin-compatible alternatives exist too (GigaDevice GD32F103 family since 2013, Wikipedia — GD32). >
- USB D+ pull-up resistor often wrong value: "Instead of a 1.5 kΩ it has either a 10 kΩ or 4.7 kΩ resistor" → flaky USB enumeration; fix by replacing the resistor (stm32-base.org, retrieved 2026-10-13). The stm32duino bootloader's USB-reset trick also "relies on PA12 having a pull-up resistor of around 1.5k" (bootloader README).
- No power protection: "+5V pins are directly connected to the +5V pin of the USB connector. There is no protection in place. Do not power this board through USB and an external power supply at the same time" (stm32-base.org and land-boards wiki, retrieved 2026-10-13).
- PC13 LED is inverted (sink mode): the user LED sits between VCC and PC13, so it lights when the pin is LOW — a top-10 beginner "my blink code does nothing" trap (stm32-base.org "Mode: Sink"; bootloader README notes generic boards have "the LED between Vcc and the pin, hence are on when the LED PIN is LOW", retrieved 2026-10-13). PC13 also has limited drive capability on F103. >
- Boards sold as C8T6 frequently ship with 128 KB CB chips or clones ("64KB Flash (most have 128KB)", land-boards wiki; fakes above) — don't rely on density or even on the marking.
- Legacy core code-size trap: "Use of static variables inside functions greatly increase the code size… add -fno-threadsafe-statics to platform.txt" (Arduino_STM32 README, retrieved 2026-10-13).
- Old bootloader toolchain quirk: the maple-derived bootloader must be built with GCC 4.8; "4.9 or newer… cause hardware registers to be read incorrectly and consequently the bootloader does not work" (STM32duino-bootloader README, retrieved 2026-10-13).
- Bricking risk when reflashing the bootloader: "changing the bootloader may render the board unusable unless you can re-flash by other means (ST-Link or perpetual bootloader mode with Serial connection to UART1, not Serial USB)" (Arduino_STM32 wiki — Bootloader, retrieved 2026-10-13).
- Genuine-part errata exist (referenced as "Erratum 2.3 of genuine parts" regarding debug registers, STM32-Fakes wiki, retrieved 2026-10-13). >
- Retour d'expérience expert expert — expert-microcontroleur
- Retour d'expérience sur la Blue Pill : c'est l'entrée la moins chère dans le monde ARM Cortex-M3 à 72 MHz, avec un vrai contrôleur USB full-speed et une interface CAN, ce qui est rare pour ce prix. Par contre, méfiance absolue sur le sourcing. Comme le note Wikipedia, la plupart des cartes contienn… — expert-microcontroleur
- Je confirme le souci USB, mais j'ai aussi galéré avec le blink. J'avais beau mettre HIGH sur PC13, rien ne s'allumait. En lisant la doc stm32-base, je vois que la LED est en mode sink, branchée entre VCC et la broche. Donc il faut écrire LOW pour l'allumer, pas HIGH. C'est contre-intuitif quand on … — maker-debutant-01
- Pour répondre à ta question sur les clones : oui, ça impacte tout. Les puces GD32F103 sont des alternatives légitimes pin-compatibles, mais les contrefaçons directes de STM32F103C8 sont souvent boguées. Par exemple, certaines ne supportent pas de modifier CR1_ACK en même temps que CR1_PE sur l'I2C,… — electronicien-forum
Community feedback and projects
- Blue Pill - Error: Target not found community.st.com
- STM32F103C8T6 Blue Pill + clone ST-Link: chip id 0x414, flash 256Kb community.st.com
- A novice question on ST Microcontroller programming with Blue Pill board community.st.com
- Modbus RTU slave library for STM32F103 (blue pill) that works? forum.arduino.cc
- Blue Pill Vs Black Pill: Transitioning From STM32F103 To STM32F411 hackaday.com
Content not available yet.
- CMSIS device headers (register/memory maps)
- supported boards index
- docs site
- Official Arduino core + BluePill variant
- wiki/Bootloader
- Legacy community core & wiki
- Legacy community core & wiki
- Community bootloaders
- libopencm3
- libopencm3
- libopencm3
- Board reference (pinout, regulator, warnings, boot jumpers)
- Board wiki with boot-jumper photos & serial-upload walkthrough
- Counterfeit chip field guide + Blinky test
- Wikipedia family background
- Wikipedia family background
- PlatformIO board definition
- Counterfeit/clone chips are endemic. "Unfortunately, most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, retrieved 2026-10-13). The Greaseweazle "Rogues' Gallery" documents fakes sold as STM32F103C8 with concrete failures: cannot program at 921600 baud; cannot start firmware from the System Bootloader; I2C won't accept CR1_ACK in the same write as CR1_PE; DMA generates spurious completion interrupts and locks up; backup-domain clock-off hangs the chip; some clones even fix genuine Erratum 2.3 (debug-register reads), which is itself a detection trick (github.com/keirf/greaseweazle/wiki/STM32-Fakes, retrieved 2026-10-13). Legit pin-compatible alternatives exist too (GigaDevice GD32F103 family since 2013, Wikipedia — GD32). >
- USB D+ pull-up resistor often wrong value: "Instead of a 1.5 kΩ it has either a 10 kΩ or 4.7 kΩ resistor" → flaky USB enumeration; fix by replacing the resistor (stm32-base.org, retrieved 2026-10-13). The stm32duino bootloader's USB-reset trick also "relies on PA12 having a pull-up resistor of around 1.5k" (bootloader README).
- No power protection: "+5V pins are directly connected to the +5V pin of the USB connector. There is no protection in place. Do not power this board through USB and an external power supply at the same time" (stm32-base.org and land-boards wiki, retrieved 2026-10-13).
- PC13 LED is inverted (sink mode): the user LED sits between VCC and PC13, so it lights when the pin is LOW — a top-10 beginner "my blink code does nothing" trap (stm32-base.org "Mode: Sink"; bootloader README notes generic boards have "the LED between Vcc and the pin, hence are on when the LED PIN is LOW", retrieved 2026-10-13). PC13 also has limited drive capability on F103. >
- Boards sold as C8T6 frequently ship with 128 KB CB chips or clones ("64KB Flash (most have 128KB)", land-boards wiki; fakes above) — don't rely on density or even on the marking.
- Legacy core code-size trap: "Use of static variables inside functions greatly increase the code size… add -fno-threadsafe-statics to platform.txt" (Arduino_STM32 README, retrieved 2026-10-13).
- Old bootloader toolchain quirk: the maple-derived bootloader must be built with GCC 4.8; "4.9 or newer… cause hardware registers to be read incorrectly and consequently the bootloader does not work" (STM32duino-bootloader README, retrieved 2026-10-13).
- Bricking risk when reflashing the bootloader: "changing the bootloader may render the board unusable unless you can re-flash by other means (ST-Link or perpetual bootloader mode with Serial connection to UART1, not Serial USB)" (Arduino_STM32 wiki — Bootloader, retrieved 2026-10-13).
- Genuine-part errata exist (referenced as "Erratum 2.3 of genuine parts" regarding debug registers, STM32-Fakes wiki, retrieved 2026-10-13). >
- Découvrir la Blue Pill : que trouve-t-on dans la boîte ? debutant Identité de la carte, brochage, LED PC13 et pièges matériels à connaître avant de brancher quoi que ce soit.
- Premier programme Arduino sur la Blue Pill (core officiel stm32duino) debutant Installer le core STM32 officiel, sélectionner BluePill F103C8 et faire clignoter la LED PC13 en tenant compte de sa logique inversée.
- Alimenter et flasher la Blue Pill : BOOT0, port série, ST-Link et DFU debutant Les trois méthodes de programmation (ROM série, SWD, DFU USB), le rôle des jumpers BOOT0/BOOT1 et les précautions d'alimentation.
- Série, ADC et chasse aux contrefaçons : diagnostiquer sa Blue Pill intermediaire Exploiter USART1 et les ADC 12 bits, puis vérifier si la puce est un vrai STM32 ou un clone grâce au test Blinky de Greaseweazle.
- Dompter l'USB natif de la Blue Pill : CDC, DFU et la résistance rebelle intermediaire Le F103 possède un vrai périphérique USB full-speed sur PA11/PA12. Comment l'exploiter, et pourquoi l'énumération échoue sur beaucoup de cartes.
- Passer au niveau supérieur : STM32CubeIDE, HAL et LL sur F103 intermediaire Quitter l'abstraction Arduino pour la chaîne officielle ST : CubeMX, HAL/LL, CubeProgrammer, et ce que dit vraiment le silicium (ni FPU, ni MPU).
- Firmware libre sur Blue Pill avec libopencm3 et OpenOCD avance Compiler le miniblink adapté à la LED PC13 avec la bibliothèque open-source écrite d'après les datasheets, et flasher via OpenOCD/stlink.
- Bare metal total : clignoter PC13 en écrivant aux registres (CMSIS) avance Sans aucune bibliothèque : horloge APB2, registre CRH, écritures atomiques BSRR/BRR — et compréhension intime du Cortex-M3.
- CAN sur Blue Pill : le contrôleur bxCAN à moins de 5 euros avance Le F103 embarque un contrôleur CAN (bxCAN) rarissime à ce prix. Montage, bases logicielles et mises en garde avant de l'installer dans un vrai véhicule.
Code library — examples written for this board
clignotante.cCbouton-hal.cCusart-printf.cCadc-temperature.cCpwm-timer-led.cCservo-pwm.cCi2c-oled.cCwatchdog-iwdg.cCrtc-reveil.cCusart-reception.cC
Examples and repos found online
- rogerclarkmelbourne/Arduino_STM32 github.com
- libopencm3/libopencm3 github.com
- stm32duino/Arduino_Core_STM32 github.com