STM32F103C8T6 vs CBT6: Flash Size, Pinout and Use Cases
A complete engineering and procurement comparison of ST's two most popular Blue Pill MCUs — identical LQFP-48 pinout, identical peripherals, one doubled Flash size. Includes migration checklist, counterfeit detection for both variants, and when to skip F103 entirely.
The Blue Pill Family: Why These Two Parts Dominate
If you have ever bought a "STM32 minimum system board" from AliExpress, Banggood, Amazon or a Shenzhen vendor on Alibaba, you have held an STM32F103C8T6 in your hand. The little blue PCB with the LQFP-48 chip in the center, a micro-USB connector, an SWD header, a reset button and two rows of 20-pin male headers is the single most-copied development board in embedded history — more ubiquitous in the maker and industrial-prototyping world than the Arduino Uno itself.
The C8T6 became popular for three reasons: it is cheap ($1-2 in volume), it is powerful enough for real work (72 MHz Cortex-M3, 64 KB Flash, 20 KB SRAM, USB, CAN, three USARTs), and it has a massive open-source ecosystem (STM32duino, libopencm3, PlatformIO, Zephyr, FreeRTOS, ChibiOS, RT-Thread all support it out of the box). Every tutorial, every library, every example project assumes C8T6.
But as firmware grows — adding a USB stack, a file system, a BLE library, a GUI framework, extensive Modbus/CANopen protocol handlers — 64 KB fills up fast. ST anticipated this and produced the STM32F103CBT6: identical die, identical package, identical pinout, identical peripheral set, but with 128 KB of Flash instead of 64 KB. The upgrade path is literally "swap the chip, reflash, done" — no PCB respin, no firmware port, no toolchain change.
This article covers exactly what differs, when to choose which, how to migrate a design from C8 to CB, and — critically for B2B buyers — how to avoid the counterfeit epidemic that surrounds both parts.
Side-by-Side Specification Comparison
The two parts share every specification except one. Here is the full table:
| Parameter | STM32F103C8T6 | STM32F103CBT6 |
|---|---|---|
| Core | ARM Cortex-M3 | ARM Cortex-M3 |
| Max clock | 72 MHz | 72 MHz |
| Flash | 64 KB | 128 KB |
| SRAM | 20 KB | 20 KB |
| Package | LQFP-48 (7×7 mm, 0.5 mm pitch) | LQFP-48 (7×7 mm, 0.5 mm pitch) |
| Supply voltage | 2.0-3.6 V | 2.0-3.6 V |
| Operating temp | -40 to +85 °C | -40 to +85 °C |
| ADC | 2× 12-bit, 16 channels, 1 MSPS | 2× 12-bit, 16 channels, 1 MSPS |
| Timers | 3× GP 16-bit + 1× advanced | 3× GP 16-bit + 1× advanced |
| USART | 3 | 3 |
| SPI | 2 | 2 |
| I²C | 2 | 2 |
| USB | Full-speed 2.0 device | Full-speed 2.0 device |
| CAN | 1× bxCAN 2.0B | 1× bxCAN 2.0B |
| DMA | 7 channels | 7 channels |
| Debug | SWD + JTAG | SWD + JTAG |
| Bootloader | UART, I²C, SPI, CAN, USB DFU | UART, I²C, SPI, CAN, USB DFU |
| Die ID register | 0x1FFFF7E8 | 0x1FFFF7E8 |
| Flash size register | 0x1FFFF7E0 = 0x0040 | 0x1FFFF7E0 = 0x0080 |
The only two rows that differ are Flash size and the Flash-size register value. Everything else — pinout, peripheral map, electrical characteristics, debug interface, bootloader protocol, toolchain support — is identical.
This is why CBT6 is a true drop-in upgrade. You can literally desolder a C8T6 from a board, solder a CBT6 in its place, reflash with the same binary (or a re-linked binary targeting 128 KB), and the board works. No layout change, no firmware port, no requalification of peripherals.
When to Choose C8T6 vs CBT6
Choose STM32F103C8T6 when: - Firmware is under 50 KB compiled (leaves 14 KB headroom for bootloader and future patches) - Cost is the absolute dominant factor and volume exceeds 50,000 units/year (the $0.10-0.30 savings adds up) - You are building a clone of an existing open-source project (Grbl, Marlin, BlueSCSI) that was designed for C8T6 and has no path to grow - You are buying replacement chips for field repair of legacy equipment that originally shipped with C8T6
Choose STM32F103CBT6 when: - Firmware is between 50 KB and 110 KB compiled, or you expect it to grow into that range - You are starting a new design and want insurance against "we ran out of Flash" six months into production - You are adding a USB stack (CDC, HID, MSC), a file system (FATFS, LittleFS), a BLE library, a GUI framework (LVGL), or extensive protocol handlers (Modbus + CANopen + MQTT) - Volume is under 50,000 units/year (the per-unit savings from C8T6 is smaller than the cost of one PCB respin) - You are designing for a market where firmware updates over the air are expected (OTA images need headroom for dual-bank or A/B partition schemes)
Choose neither (skip F103 entirely) when: - You need more than 128 KB Flash → STM32F103RCT6 (256 KB, LQFP-64) or STM32F103VET6 (512 KB, LQFP-100) - You need a floating-point unit → STM32F303 or STM32F4 series (Cortex-M4F) - You need lower power → STM32L4 series (Cortex-M4F, ultra-low-power modes) - You need modern peripherals (USB HS, Ethernet MAC, LCD controller) → STM32F4, F7 or H7 - You are starting a brand-new design with no legacy constraint → STM32G0B1 (Cortex-M0+, 64 MHz, 512 KB Flash, cheaper than F103CBT6 in volume) or STM32F303CB (Cortex-M4F, same LQFP-48 footprint)
The F103 family is mature, well-documented, and will remain in production for at least another decade under ST's longevity commitment. But for new sockets, ST's own marketing pushes designers toward G0/F3/L4 — and for good reason: those families offer more Flash, better cores, and lower cost at equivalent volumes.
C8T6 → CBT6 Migration Checklist
If you have an existing C8T6 design and want to migrate to CBT6, follow this checklist to avoid the common pitfalls:
1. Update the linker script. Your C8T6 firmware uses a linker script ('.ld' for GCC, '.icf' for IAR, '.sct' for Keil) that declares 'FLASH : ORIGIN = 0x08000000, LENGTH = 64K'. Change 'LENGTH = 64K' to 'LENGTH = 128K'. Without this, the linker will still constrain your binary to 64 KB even though the chip has 128 KB.
2. Update the STM32CubeMX project. If you use CubeMX, open the .ioc file, go to Pinout → SYS → Debug, and verify the device selection. CubeMX usually auto-detects, but if you manually selected "STM32F103C8" change it to "STM32F103CB" so the generated startup code and HAL config match.
3. Update platformio.ini or Makefile. For PlatformIO, change 'board = bluepill_f103c8' to 'board = bluepill_f103cb' (or use 'board_upload.maximum_size = 131072'). For bare-metal Makefiles, update the '-DSTM32F10X_MD' (medium-density) define — both C8 and CB are medium-density in ST's taxonomy, so this usually does not change, but verify against the reference manual.
4. Check Flash page size. F103 medium-density parts (C8, CB) have 1 KB Flash pages. If your firmware uses Flash emulation of EEPROM or stores calibration data in the last Flash page, verify the page address is still valid at 128 KB (page 127 starts at 0x0801FC00, not 0x0800FC00).
5. Verify bootloader compatibility. If your board uses a UART or USB DFU bootloader, confirm the bootloader binary itself fits in the first few KB and does not assume a 64 KB Flash limit. Most open-source bootloaders (stm32duino, Black Magic Probe, DFU) handle both sizes automatically.
6. Test on real CBT6 silicon. Do not assume the migration works — program a real CBT6 chip, run your full test suite, and verify Flash size register reads 0x0080 at address 0x1FFFF7E0. Some clone dies report the wrong Flash size and will silently corrupt data if you write past the real boundary.
7. Update your BOM and CM instructions. Change the part number on the BOM from STM32F103C8T6 to STM32F103CBT6. Add a note to your contract manufacturer: "Do NOT substitute C8T6 for CBT6 — firmware exceeds 64 KB." Without this note, a cost-conscious CM will silently substitute the cheaper part and your boards will brick in the field.
Counterfeit Detection: The F103 Epidemic
The STM32F103 family is arguably the most counterfeited MCU line on the planet. Three factors drive this: high demand (every Blue Pill clone needs one), simple package (LQFP-48 is easy to remark), and a large ecosystem of Chinese clone dies (CKS32F103 from Cksic, APM32F103 from Geehy, CH32F103 from WCH, GD32F103 from GigaDevice) that are functionally similar but electrically distinct.
The most common frauds:
C8 remarked as CB. A genuine 64 KB C8T6 die is sanded, relabeled "CBT6," and sold at CB pricing. Your firmware links for 128 KB, writes past 64 KB, and corrupts itself. Detection: read Flash size register at 0x1FFFF7E0. Genuine CB reads 0x0080; remarked C8 reads 0x0040.
CKS32F103 remarked as STM32F103. Cksic's CKS32F103 is a pin-compatible clone with a different die ID, different Flash size register location in some revisions, and subtly different peripheral timing. Most STM32 firmware runs on CKS32 without modification, but USB, CAN and ADC DMA have known quirks. Detection: read the DBGMCU_IDCODE register at 0xE0042000 — genuine ST reads 0x20036410 for medium-density F103; CKS reads a different value. Decapsulation and die-marking inspection is definitive.
Recycled pulls from e-waste. Used F103 chips harvested from discarded boards, cleaned, re-plated, and sold as new. Detection: visual inspection for solder residue on leads, re-plating shine (genuine ST has matte tin), and mold-compound discoloration from previous reflow cycles. X-ray reveals internal voids from prior thermal stress.
Our verification protocol. Every STM32F103 tray we ship passes: (1) visual inspection under 20× magnification checking laser-etched ST logo, date code plausibility, and matte-tin lead finish; (2) electrical test on 30-pc sample reading Flash size register, device ID register, and running a full peripheral self-test (ADC, timers, USART, SPI, I²C, USB enumeration); (3) X-ray on 5-pc sample verifying die size and bond-wire count against ST reference images; (4) C-of-C and lot traceability documentation included with every shipment.
If you are buying F103 from a broker who cannot provide lot traceability, assume the parts are either clones or recycled pulls until proven otherwise.
Sourcing, Pricing and Lead Time (Q3 2026)
STM32F103C8T6 pricing. $1.20-2.50 per unit in 250-pc tray quantities from authorized distribution; $0.80-1.50 in 10k+ volumes. Shenzhen broker market runs $0.60-1.20 but carries significant counterfeit risk — only buy from brokers who provide lot traceability and accept returns on failed verification.
STM32F103CBT6 pricing. $1.40-2.80 per unit in tray quantities; $1.00-1.80 in 10k+ volumes. The $0.15-0.30 premium over C8T6 is trivial insurance against a Flash-overflow redesign.
Lead time. ST authorized channel is currently 8-14 weeks with periodic allocation. Shenzhen stock (authorized + vetted brokers) typically has both variants available for same-day to 2-day shipment for quantities under 5,000 pcs.
MOQ from our warehouse. 1 tray (250 pcs) for either variant, or 90 pcs on cut tape for prototyping. We stock both C8T6 and CBT6 from ST authorized channel with full C-of-C, lot traceability, and electrical verification on every tray.
Alternatives worth considering. For new designs, evaluate: - STM32G0B1CBT6 — Cortex-M0+ at 64 MHz, 128 KB Flash, 144 KB SRAM, USB-C PD, same LQFP-48 footprint, often cheaper than F103CBT6 - STM32F303CBT6 — Cortex-M4F at 72 MHz, 128 KB Flash, 256 KB SRAM, floating-point unit, same LQFP-48 footprint - GD32F303CBT6 — GigaDevice's pin-compatible clone with Cortex-M4F, 30-50% cheaper than ST, but ecosystem is smaller and USB has known quirks - APM32F103CBT6 — Geehy's clone, cheaper, but verify peripheral compatibility with your specific firmware
For legacy designs already shipping on F103C8T6, migrating to CBT6 is almost always the right call. For new sockets, seriously evaluate G0B1 or F303 before committing to another decade of F103.
Components Mentioned in This Article
Need genuine STM32F103C8T6 or CBT6?
We stock both variants from ST authorized channel with full lot traceability, C-of-C, and electrical verification on every tray. MOQ 90 pcs for prototyping, 250 pcs for production.
Request a Quote →