STM32F103 "Blue Pill" (STM32F103C8T6)

MCU 8-32 bitarduino

⚡ Lo esencial en 60 segundos

La placa de desarrollo conocida como "Blue Pill", basada en el microcontrolador STM32F103C8T6 de STMicroelectronics, representa uno de los puntos de entrada más accesibles y populares al mundo de los microcontroladores de 32 bits. Su nombre, que hace referencia a la película Matrix, proviene de una publicación en los foros de la comunidad STM32duino y se debe al color azul característico de su placa de circuito impreso. Aunque es una placa de origen chino sin una marca comercial específica, su diseño compacto de 23 por 53 milímetros la ha convertido en un estándar de facto para estudiantes y entusiastas. El corazón de este dispositivo es el microcontrolador STM32F103, parte de la serie F1, que fue la primera familia de la línea STM32 anunciada por ST en 2007. Este chip integra un núcleo ARM Cortex-M3, una arquitectura de procesador de 32 bits que ofrece un equilibrio eficiente entre rendimiento y consumo de energía, operando a una frecuencia máxima de 72 MHz. Esta velocidad de reloj, medida en millones de ciclos por segundo, permite ejecutar instrucciones con rapidez suficiente para aplicaciones de tiempo real, aunque carece de una unidad de coma flotante (FPU) dedicada, lo que significa que los cálculos matemáticos complejos con decimales se realizan por software, siendo más lentos que en chips más avanzados.

En términos de memoria, la versión estándar C8T6 cuenta con 64 KB de memoria Flash, donde se almacena el programa o firmware, y 20 KB de memoria RAM, utilizada para el almacenamiento temporal de datos durante la ejecución. Es importante notar que, aunque la placa se vende comúnmente como C8T6, existen variantes con el chip C6 (32 KB de Flash) o CB (128 KB de Flash), y a menudo las placas etiquetadas como C8 contienen en realidad chips CB con mayor capacidad. La placa está diseñada con una huella compatible con el formato Arduino Nano, utilizando conectores macho de paso estándar, pero funciona con una lógica de 3.3 voltios, a diferencia de los 5 voltios de los Arduinos clásicos. Esta diferencia de voltaje es crucial: conectar sensores de 5 voltios directamente puede dañar el microcontrolador, por lo que se requiere precaución o conversores de nivel lógico. La alimentación se realiza mediante un puerto micro-USB que entrega 5 voltios, los cuales son regulados internamente a 3.3 voltios por un regulador lineal de bajo consumo. No obstante, la placa carece de protección contra sobrecorriente o inversión de polaridad en sus pines de alimentación, por lo que nunca se debe alimentar simultáneamente por USB y por una fuente externa.

La conectividad y los periféricos expuestos son abundantes para su precio. La placa ofrece tres puertos serie USART, dos interfaces SPI, dos interfaces I2C y un controlador CAN, este último especialmente útil en entornos industriales y automotrices para la comunicación robusta entre dispositivos. También dispone de dos conversores analógico-digital de 12 bits para leer señales del mundo real, como la luz o la temperatura, aunque carece de un conversor digital-analógico (DAC) para generar señales analógicas. Una característica distintiva es su puerto USB de velocidad completa integrado directamente en el chip, lo que permite emular dispositivos como teclados, ratones o memorias sin necesidad de chips adicionales. Sin embargo, la implementación física de este puerto en la placa a menudo presenta defectos de fabricación, como resistencias de pull-up de valor incorrecto, lo que puede causar fallos intermitentes en la detección del dispositivo por parte del ordenador.

El sistema de arranque y la programación de la placa tienen particularidades que el usuario debe conocer. El microcontrolador posee un bootloader en memoria ROM que permite programarlo a través del puerto serie USART1. Para acceder a este modo, se debe colocar el puente BOOT0 en la posición de descarga y reiniciar la placa. Alternativamente, la comunidad ha desarrollado bootloaders personalizados que permiten la programación por USB, aunque estos ocupan una pequeña porción de la memoria Flash. La placa incluye un conector de cuatro pines para depuración mediante el protocolo SWD, compatible con herramientas como ST-Link, lo que facilita el desarrollo profesional. Un detalle técnico importante para los principiantes es el LED de usuario conectado al pin PC13, el cual está cableado en modo "sink" o activo bajo; esto significa que el LED se enciende cuando el pin se pone a nivel lógico bajo (0), y se apaga cuando se pone a nivel alto (1), lo contrario a lo que suelen esperar los usuarios acostumbrados a otras placas.

Es fundamental abordar la cuestión de la autenticidad de los componentes. La popularidad masiva de la Blue Pill ha llevado a una proliferación de chips falsificados o clones, principalmente de fabricantes como GigaDevice, que son pin-compatibles pero pueden presentar incompatibilidades sutiles en el comportamiento de periféricos como I2C o DMA, o fallos en la programación a altas velocidades. Aunque muchos de estos clones funcionan para proyectos básicos, pueden causar errores difíciles de depurar en aplicaciones críticas. Además, la placa no incluye protección contra descargas electrostáticas ni filtros de ruido avanzados, por lo que se recomienda usarla en entornos controlados o añadir protección externa en aplicaciones industriales. A pesar de estas advertencias, la Blue Pill sigue siendo una herramienta pedagógica excepcional debido a su bajo costo, la abundancia de documentación y el soporte tanto del núcleo oficial de Arduino para STM32 como de librerías de bajo nivel como libopencm3, permitiendo al usuario explorar desde la programación sencilla hasta el desarrollo de sistemas operativos en tiempo real.

Foro (1 tema) →

AttrEspecificacionesverificado
cpusingle-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).✔
memory64 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).✔
packageLQFP48 is listed among the STM32F1 package options (Wikipedia — STM32). > ✔
clocks_on_the_boardHSE crystal 8 MHz, LSE RTC crystal 32.768 kHz, HSI 8 MHz / LSI 40 kHz internal (stm32-base.org, retrieved 2026-10-13). > ✔
connectivityno 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:? sin verificar
powermicro-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_o2× 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_level3.3 V.? sin verificar
consumption? sin verificar
temperature_range? sin verificar
  • MCU: STMicroelectronics STM32F103C8T6 — parte de la línea STM32F1 "Performance" (STM32F103), la primera familia STM32, basada en el núcleo ARM Cortex-M3. La serie F1 fue anunciada por ST en junio de 2007 (Wikipedia — STM32, consultado el 2026-10-13). La página de producto oficial de ST se titula "STM32F103 — Arm Cortex-M3 Microcontrollers (MCU) 72 MHz" (st.com/en/microcontrollers-microprocessors/stm32f103.html, consultado el 2026-10-13).
  • Placa: la "Blue Pill" es una placa de desarrollo china sin marca construida alrededor de ese chip. Según la base de datos de placas de STM32-base: Brand "Unknown", Origin "China", color del PCB azul, 23 mm × 53 mm (stm32-base.org — STM32F103C8T6 Blue Pill, consultado el 2026-10-13). Es una placa compatible con el footprint Nano (headers macho pin-compatibles con Arduino Nano, espaciado de fila DIP-30 de 0,6 pulgadas, pero lógica de 3,3 V, no de 5 V) (Wikipedia — STM32, consultado el 2026-10-13).
  • Origen del nombre: "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, consultado el 2026-10-13).
  • Año de lanzamiento de la placa: >
  • Precio de lanzamiento: un artículo comunitario de la época de 2015 enlazado desde el README de Arduino_STM32 se titula "4 Dollar 90 MIPS 32-bit 72 MHz ARM Arduino" (hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino, enlazado desde github.com/rogerclarkmelbourne/Arduino_STM32, consultado el 2026-10-13). El punto de precio de "≈2 $ pill" que se cita habitualmente hoy es >
  • Estado: MCU en producción activa (página de producto de ST en línea, consultado el 2026-10-13); placa disponible sin fin en los marketplaces chinos. Precaución: "most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, consultado el 2026-10-13).
  • Variantes: placas con STM32F103C6 (32 KB), C8T6 (64 KB) o CB (128 KB, a menudo vendidas como C8 — "64KB Flash (most have 128KB)" según la wiki de land-boards.com, consultado el 2026-10-13); el core oficial de Arduino lista los objetivos BluePill F103C6/C8/CB (placas admitidas de Arduino_Core_STM32, consultado el 2026-10-13). MCUs clon pin-compatibles de GigaDevice (GD32F103, línea Cortex-M3 introducida en 2013, Wikipedia — GigaDevice/GD32, consultado el 2026-10-13) y falsificaciones remarcadas (ver Problems). La "Black Pill" es la sucesora F401/F411 (Wikipedia — STM32).

+ Puntos fuertes

  • El Cortex-M3 de 72 MHz más barato jamás distribuido en masa — "4 Dollar 90 MIPS 32-bit 72 MHz ARM Arduino" (enlace de hackster en el README de Arduino_STM32, consultado el 2026-10-13); el billete de entrada de facto al ARM de 32 bits.
  • Periférico USB full-speed genuino en el chip (no un chip CDC): USB de dispositivo en PA11/PA12 permite proyectos HID/MIDI/CDC/DFU sin silicio adicional (pines USB según stm32-base.org, consultado el 2026-10-13).
  • Controlador bxCAN (CAN1 en el mapa de pines de la variante oficial, PeripheralPins.c/PeripheralPins.c), consultado el 2026-10-13) — raro a este precio, explica su uso en automoción/robótica.
  • El propio STM32 de a bordo es la "característica especial": el chip puede reprogramarse como dispositivo USB, así que una Blue Pill de repuesto puede alojar bootloaders comunitarios o firmware de prueba como el diagnóstico Blinky de Greaseweazle (wiki STM32-Fakes, consultado el 2026-10-13).
  • Footprint de 3,3 V compatible con Nano que permite usar shields/placas portadoras Nano con precaución con los niveles (Wikipedia — STM32, consultado el 2026-10-13).
  • Enorme historia Arduino de dos cores: la única placa igualmente bien servida por el core oficial respaldado por ST y por el core comunitario histórico (ver Systems).
  • Sin FPU de hardware, sin MPU, sin motor criptográfico — las "características" aquí significan precio/periféricos brutos, no seguridad (el header CMSIS muestra __MPU_PRESENT 0, cmsis_device_f1, consultado el 2026-10-13).

− Puntos débiles

  • Los chips falsificados/clon son endémicos. "Unfortunately, most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, consultado el 2026-10-13). La "Rogues' Gallery" de Greaseweazle documenta falsos vendidos como STM32F103C8 con fallos concretos: no se pueden programar a 921600 baudios; no arrancan el firmware desde el System Bootloader; I2C no acepta CR1_ACK en la misma escritura que CR1_PE; el DMA genera interrupciones espurias de finalización y se bloquea; apagar el reloj del dominio de backup cuelga el chip; algunos clones incluso corrigen el Erratum 2.3 genuino (lectura de registros de debug), lo que es en sí un truco de detección (github.com/keirf/greaseweazle/wiki/STM32-Fakes, consultado el 2026-10-13). También existen alternativas legítimas pin-compatibles (familia GigaDevice GD32F103 desde 2013, Wikipedia — GD32). >
  • La resistencia pull-up de USB D+ suele tener un valor incorrecto: "Instead of a 1.5 kΩ it has either a 10 kΩ or 4.7 kΩ resistor" → enumeración USB inestable; se soluciona reemplazando la resistencia (stm32-base.org, consultado el 2026-10-13). El truco de reset USB del bootloader stm32duino también "relies on PA12 having a pull-up resistor of around 1.5k" (README del bootloader).
  • Sin protección de alimentación: "+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 y wiki de land-boards, consultado el 2026-10-13).
  • El LED de PC13 está invertido (modo sink): el LED de usuario está entre VCC y PC13, por lo que se enciende cuando el pin está en LOW — una trampa de principiante de primer nivel del tipo "mi código blink no hace nada" (stm32-base.org "Mode: Sink"; el README del bootloader indica que las placas genéricas tienen "the LED between Vcc and the pin, hence are on when the LED PIN is LOW", consultado el 2026-10-13). PC13 también tiene capacidad de conducción limitada en F103. >
  • Las placas vendidas como C8T6 a menudo llevan chips CB de 128 KB o clones ("64KB Flash (most have 128KB)", wiki de land-boards; falsificaciones arriba) — no dependa de la densidad ni siquiera del marcado.
  • Trampa de tamaño de código del core legado: "Use of static variables inside functions greatly increase the code size… add -fno-threadsafe-statics to platform.txt" (README de Arduino_STM32, consultado el 2026-10-13).
  • Rareza del toolchain del bootloader antiguo: el bootloader derivado de maple debe compilarse con GCC 4.8; "4.9 or newer… cause hardware registers to be read incorrectly and consequently the bootloader does not work" (README de STM32duino-bootloader, consultado el 2026-10-13).
  • Riesgo de brick al reflashear el 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)" (wiki de Arduino_STM32 — Bootloader, consultado el 2026-10-13).
  • Existen erratas de piezas genuinas (referenciada como "Erratum 2.3 of genuine parts" respecto a los registros de debug, wiki STM32-Fakes, consultado el 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

Opiniones y proyectos de la comunidad

  • Greaseweazle

    Greaseweazle — lector/escritor de nivel de flujo de disquetes USB de código abierto cuyo firmware se ejecuta en placas STM32F103 de la clase Blue-Pill; su wiki mantiene la prueba de referencia "STM32 Fakes" Blinky para exactamente estas placas. (retrieved 202…

  • BLUE-PILL-HUB

    BLUE-PILL-HUB — placa base/expansión comunitaria diseñada alrededor de la Blue Pill, con conector serie FTDI para cargas del bootloader. (enlazado desde la página de la Blue Pill, recuperado el 2026-10-13). (unverified au 2026-10-13)

  • Programming the Blue Pill via USB bootloader

    Programación del Blue Pill mediante el cargador de arranque USB — flujo de trabajo de Instructables ampliamente referenciado para cargas mediante cargador de arranque serie/USB sin un ST-Link, enlazado desde la página de land-boards sobre el Blue Pill. (enlac…

Contenido no disponible todavía.

  • Los chips falsificados/clon son endémicos. "Unfortunately, most blue pill boards now contain a fake STM32 from China" (Wikipedia — STM32, consultado el 2026-10-13). La "Rogues' Gallery" de Greaseweazle documenta falsos vendidos como STM32F103C8 con fallos concretos: no se pueden programar a 921600 baudios; no arrancan el firmware desde el System Bootloader; I2C no acepta CR1_ACK en la misma escritura que CR1_PE; el DMA genera interrupciones espurias de finalización y se bloquea; apagar el reloj del dominio de backup cuelga el chip; algunos clones incluso corrigen el Erratum 2.3 genuino (lectura de registros de debug), lo que es en sí un truco de detección (github.com/keirf/greaseweazle/wiki/STM32-Fakes, consultado el 2026-10-13). También existen alternativas legítimas pin-compatibles (familia GigaDevice GD32F103 desde 2013, Wikipedia — GD32). >
  • La resistencia pull-up de USB D+ suele tener un valor incorrecto: "Instead of a 1.5 kΩ it has either a 10 kΩ or 4.7 kΩ resistor" → enumeración USB inestable; se soluciona reemplazando la resistencia (stm32-base.org, consultado el 2026-10-13). El truco de reset USB del bootloader stm32duino también "relies on PA12 having a pull-up resistor of around 1.5k" (README del bootloader).
  • Sin protección de alimentación: "+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 y wiki de land-boards, consultado el 2026-10-13).
  • El LED de PC13 está invertido (modo sink): el LED de usuario está entre VCC y PC13, por lo que se enciende cuando el pin está en LOW — una trampa de principiante de primer nivel del tipo "mi código blink no hace nada" (stm32-base.org "Mode: Sink"; el README del bootloader indica que las placas genéricas tienen "the LED between Vcc and the pin, hence are on when the LED PIN is LOW", consultado el 2026-10-13). PC13 también tiene capacidad de conducción limitada en F103. >
  • Las placas vendidas como C8T6 a menudo llevan chips CB de 128 KB o clones ("64KB Flash (most have 128KB)", wiki de land-boards; falsificaciones arriba) — no dependa de la densidad ni siquiera del marcado.
  • Trampa de tamaño de código del core legado: "Use of static variables inside functions greatly increase the code size… add -fno-threadsafe-statics to platform.txt" (README de Arduino_STM32, consultado el 2026-10-13).
  • Rareza del toolchain del bootloader antiguo: el bootloader derivado de maple debe compilarse con GCC 4.8; "4.9 or newer… cause hardware registers to be read incorrectly and consequently the bootloader does not work" (README de STM32duino-bootloader, consultado el 2026-10-13).
  • Riesgo de brick al reflashear el 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)" (wiki de Arduino_STM32 — Bootloader, consultado el 2026-10-13).
  • Existen erratas de piezas genuinas (referenciada como "Erratum 2.3 of genuine parts" respecto a los registros de debug, wiki STM32-Fakes, consultado el 2026-10-13). >

Biblioteca de código — ejemplos escritos para esta placa

  • clignotante.c C

    El parpadeo de referencia en C puro con STM32 HAL: el LED de usuario en pin 13 cambia cada 500 ms gracias al tick SysTick de 1 ms de HAL. El esqueleto es el generado por STM32CubeIDE, listo para comp…

  • bouton-hal.c C

    El botón de usuario de la placa (GPIOA/GPIO_PIN_0, activo en HIGH) alterna el LED en cada pulsación. El antirrebote por muestreo a 50 Hz es el patrón estándar en C embebido, sin interrupciones ni esp…

  • usart-printf.c C

    Redirigir printf() al USART en tres líneas: la placa envía sus medidas por el puerto serie virtual USB, visibles en un terminal a 115200 baudios. El patrón de retargeting es el mismo en toda la gama …

  • adc-temperature.c C

    El sensor térmico interno cuelga de un canal dedicado del ADC: este programa lo convierte, aplica la calibración típica de la ficha técnica e imprime la temperatura del circuito en grados Celsius por…

  • pwm-timer-led.c C

    El PWM hardware de un temporizador STM32 hace respirar un LED sin consumir CPU: el canal compara con el contador y genera la señal en autonomía. El ciclo de trabajo se expresa en porcentaje del perio…

  • servo-pwm.c C

    El temporizador configurado para contar microsegundos genera el impulso de control del servo (0,5 a 2,5 ms sobre periodo de 20 ms). La función servo_angle convierte cualquier ángulo en un valor de co…

  • i2c-oled.c C

    El protocolo I2C del SSD1306 se resume en dos bytes de control: 0x00 para orden, 0x40 para datos. Este programa envía la secuencia de inicialización y una imagen de prueba, sin librería: la mejor for…

  • watchdog-iwdg.c C

    El watchdog independiente IWDG reinicia la placa si el firmware deja de refrescarlo: aquí un bucle infinito simulado provoca el reset tras 30 ciclos. El puerto serie muestra claramente el rearranque …

  • rtc-reveil.c C

    La RTC mantiene la hora aunque se corte la alimentación (pila de botón o supercondensador de la placa): este programa imprime el reloj continuamente y lanza un despertador cada 10 s, base de las esta…

  • usart-reception.c C

    El DMA circular rellena el búfer UART sin interrumpir nunca la CPU: el bucle principal trocea el flujo en líneas y ejecuta órdenes ("led" alterna el LED de usuario). El patrón de referencia para un m…

Ejemplos y repositorios encontrados en línea