Last updated: July 2026. Specific electrical deltas below are quoted from the named datasheet revisions; verify them against the exact part, package, and revision you design in, and against the alternate's own errata rather than the STM32's.

The short version
When STM32 supply tightened, a group of Chinese MCU vendors with STM32F103-footprint lines went from curiosity to genuine second-source option: GigaDevice GD32, Geehy APM32, Artery AT32, WCH CH32, MindMotion MM32, Hangshun HK32. These are real parts, and for specific device-and-package pairs the nominal pin assignment matches the STM32F103 device they shadow, which is why a qualified swap can save a BOM in a shortage or shave cost. This guide is vendor-neutral, and all six are legitimate options.
Two precisions come before anything else, and both of them concern the level at which a claim is made. First, those six are vendor family names, and a family name does not amount to a compatibility claim, because each vendor offers particular lines aimed at particular STM32F103 devices, and nothing follows from that about the rest of the vendor's portfolio. A comparison holds for an exact part-and-package pair, an STM32F103C8T6 against its GD32F103C8T6 counterpart for instance, and never for a family name, since density, package, ordering suffix, temperature grade, and silicon revision all participate. Second, "pin-compatible" here means matching nominal pin assignment, which is a statement about the pinout and about nothing else. The term earns its place without the quotation marks only after a pin-by-pin electrical comparison of the exact parts: 5 V tolerance, analog capability, oscillator pins, reset behavior, boot straps, default states, drive strength.
One principle governs the rest of this guide. A matching pin assignment is a fact about the package, whereas the behavior a design depends on is a fact about the silicon and about the documents that describe it, and the second does not follow from the first. That is where swaps go wrong, because matching pins tell you nothing about matching behavior. Read the documents side by side and specific, dated differences appear: a much higher reset threshold and minimum supply voltage, a different flash-latency mechanism, different USB clock dividers, and, tellingly, far thinner published errata. Any one of them can turn a "compatible" swap into a board that will not start, will not program, or fails intermittently. None of them permanently damages anything. What they break is the swap, the schedule, and sometimes the field-return budget. What actually differs comes from the documents, and so does the method for qualifying an alternate properly.
The candidates
All six vendors offer lines that target the STM32F103-class footprint and, with one important exception, the Arm Cortex-M ecosystem:
GigaDevice GD32: the most commonly compared alternative, built on an Arm Cortex-M3 core, and the pair this guide opened primary sources for. The worked comparison below sets GD32F103 against STM32F103.
Geehy APM32, Artery AT32, MindMotion MM32, Hangshun HK32: Arm Cortex-M alternatives, each with its own pin-compatible lines. Hangshun's and MindMotion's own materials state "pin-to-pin" compatibility, which is the kind of vendor claim you verify against the exact part and ordering code rather than trust. The claim tells you where to look, and the ordering code tells you what you have.
WCH CH32, with a catch: the popular CH32V line is RISC-V, and it therefore falls outside the Arm Cortex-M ecosystem the other five share. Your existing Arm binaries cannot run on it, and source code has to be ported and rebuilt for RISC-V, which means new startup code, device headers, interrupt handling, linker scripts, and debug configuration, even though the compiler framework may still be GCC or LLVM. CH32 is a fine chip; just do not file it under "recompile and go."
The remainder of this guide uses GD32F103 against STM32F103 as the worked example, because it is the canonical pair and the one whose primary documents this guide actually opened. The method generalizes, whereas the specific numbers belong to GD32 and must be re-checked for any other vendor.

The deltas that break a swap
Each of the differences below comes from the vendors' own documents, and folklore contributed none of them. Each is the kind of difference a "pin-compatible" label hides.
1. Reset threshold and minimum supply, the "won't start" delta: GD32F103's power-on reset threshold is typically 2.40 V, and its power-down reset threshold depends on the device tier: typically 2.35 V on the smaller-flash parts (x4/6/8/B) but typically 1.85 V on the larger-flash parts (xC and above), per the datasheet's power-supply-supervisor tables. The STM32F103's power-on and power-down thresholds are around 1.88 V falling / 1.92 V rising (typical; max 2.0 V rising). Equally important, GD32F103's specified operating supply is 2.6–3.6 V, against the STM32F103's 2.0–3.6 V. The delta therefore matters in specific situations, and those situations divide into two questions: whether the rail is inside the alternate's specified operating range, and whether the rail's behavior during startup or brownout can hold the part in reset. A rail designed below 2.6 V is simply out of spec for the GD32 regardless of reset behavior. A supply with severe startup droop, a slow or non-monotonic ramp, or a brownout into the 2.0–2.5 V region can hold a GD32 in reset, or reset it, where an STM32 kept running. An ordinary, healthy 3.3 V rail with normal tolerance is not the problem case. These are the datasheets' typical figures, and design margin therefore comes from the limits and conditions in the current datasheet and from testing your actual ramp.
2. Flash latency, where the mechanism differs and GigaDevice's own documents disagree: STM32F103 uses clock-banded flash wait states that firmware must configure in FLASH_ACR, with 0 wait states up to 24 MHz, 1 up to 48 MHz, and 2 up to 72 MHz, per RM0008, and with the documented prefetch settings. GD32F103's datasheet headline says the core runs "at 108 MHz frequency with Flash accesses zero wait states", whereas GigaDevice's own flash-programming manual (AN002) specifies address-banded access latency: 0 wait states for code in the first 256 KB of flash, 1 wait state for 256–512 KB, and 2 wait states above 512 KB. The GD32F10x user manual documents wait-state registers (FMC_WS, FMC_WSEN). The zero-wait headline therefore holds for code placed in the first 256 KB, and it does not hold above that boundary. The difficulty is that the two GigaDevice documents do not tell one story. Treat that as a documentation inconsistency to confirm with the vendor. It does not amount to a specification you design against. The inconsistency also shows why a single document is not enough: the datasheet and the application note disagree, and reading either of them alone would have left the disagreement invisible. The practical consequence is mechanism-independent: code whose timing was calibrated to the STM32's flash behavior (a cycle-counted delay loop, a bit-banged protocol tuned by trial) can run faster or slower on the GD32 depending on access pattern, code placement, and configuration, which is why timing-critical firmware is exactly where "it ran fine on STM32" stops being evidence.
3. USB clocking: both parts derive the 48 MHz USB clock from the PLL through a prescaler, and the prescalers differ. STM32F103's RCC_CFGR has a single USBPRE bit, giving PLL divided by 1.5 or by 1, so a valid USB clock means a PLL at 72 or 48 MHz. GD32F103's RCU_CFG0, by contrast, has a two-bit USBD prescaler offering PLL divided by 1.5, 1, 2.5, or 2 (per GigaDevice's GD32F10x user manual and its own firmware library headers), which serves PLL clocks of 72, 48, 120, or 96 MHz. Two consequences follow from that difference. Firmware that pokes STM32 register values still produces a valid USB clock only in the configurations both parts share, such as 72 MHz with divide-by-1.5. And at the GD32's headline 108 MHz no divider reaches 48 MHz, so a USB design chooses its PLL frequency from what the USB prescaler can serve, and the maximum frequency the core allows does not decide it. Reaching 48.000 MHz nominal is only the entry condition, since USB clock tolerance, the D+ pull-up implementation, packet-memory details, and errata are each their own check.
4. The errata gap, a difference in what the two vendors publish: STMicroelectronics publishes a detailed, revision-specific errata sheet for the STM32F103 medium-density parts (ES096, Rev 15 as of March 2022: 40 documented silicon limitations with workaround status). On GigaDevice's own download portal, the Errata Sheet category filtered for GD32F103 returned "Errata Sheet (0 in all)" as of 2026-07-21, while the same portal lists errata sheets for several other GD32 families. Flawless silicon is a very unlikely explanation. The difference is one of transparency, and absence from the portal is not evidence that no known limitations exist, so ask the vendor or distributor for device limitations in writing. Two cautions cut both ways here, and both concern work you may assume is already done. Do not assume that your "mature" STM32 firmware already handles ES096, because the workarounds are implemented partly in libraries and partly in application code and are revision-specific; audit which ones you actually implement. And expect the bugs an errata sheet would have told you about to surface on your bench instead. Less published errata means more qualification work; it does not mean less.
5. A tooling trap: even programming the part can go wrong. OpenOCD's mainline STM32F1 flash driver (src/flash/nor/stm32f1x.c, checked 2026-07-06) documents that several GigaDevice families share the STM32F1 medium-density device ID 0x410 and are told apart only by revision ID; the driver's comment records that a difference in option-byte bit offsets "caused problems e.g. during flash block programming because of unexpected active hardware watchdog," and the RISC-V GD32VF103 needed its own flash-write code path entirely. The comment names GD32F1x0, GD32F3x0, and GD32E23x explicitly. Whether your exact part and probe combination is affected is precisely the kind of thing you validate, with the exact OpenOCD or vendor-tool version your production line uses, across erase, program, verify, option bytes, and the watchdog-active case. The problem is fixable, but it is the kind of problem that costs a day if you assume the existing toolchain "just works."

What is actually similar: not everything is a trap. Both parts specify an ADC clock of up to 14 MHz and a maximum sampling rate of about 1 MSPS at minimum sample time, so the headline ADC throughput matches. That amounts to one similar headline specification. It does not amount to an equivalence, because accuracy, calibration, input impedance requirements, trigger routing, and multi-ADC modes still need their own comparison. Parity at the level of a single headline specification and equivalence at the level of a system are separate findings, and the first is the smaller of the two. A vendor-neutral guide has to report the parity it found as carefully as the deltas.
Which alternative, and when
The six are not interchangeable with one another either. "A Chinese STM32 alternative" is the name of a category, and qualification happens at the level of a part. A rough guide follows.
GD32 (GigaDevice): substantial community experience and broad support in open-source and commercial tools, together with the vendor documents this guide could actually verify against. That makes it a reasonable starting point for an STM32F103-class second source, on the condition that you verify the exact tool versions you depend on.
APM32 (Geehy), AT32 (Artery), MM32 (MindMotion): Arm Cortex-M alternatives with their own pin-compatible lines. Each has its own reset, clock, and flash behavior, which makes each of them its own qualification. AT32 in particular advertises higher clock ceilings than the STM32 parts it shadows.
HK32 (Hangshun): markets explicit pin-to-pin compatibility. Verify that claim against its own datasheet exactly as you would verify the same claim from any other vendor on this list.
CH32 (WCH): capable parts, though the popular CH32V line is RISC-V, which makes adopting it a deliberate new-architecture decision. The phrase "recompile-and-go STM32 swap" does not describe the work involved.
One rule holds across all six. Each vendor is a separate qualification, which is why the deltas that matter (reset and supply thresholds, flash timing, USB clocking, errata depth) must be checked for the specific part you pick and never assumed from "GD32 works." Experience with one of them transfers insofar as it teaches which questions to ask, and it settles none of the answers.
How to qualify a Chinese STM32 alternative
The procedure below is the same discipline that any datasheet-grade second source requires, and one distinction governs the steps that follow. A matching pin assignment establishes that the part fits the footprint; whether the design works with it is established from the alternate's own documents, and then on your own hardware.
Read the alternate's own current datasheet, reference manual, and errata: the whole failure mode is assuming the alternate behaves like the part it resembles, and the STM32's documents describe a different device. Take its actual reset thresholds, supply range, flash behavior, and clock specifications from its own documents, at their current revision. Use the vendor's official full documentation, and never work from a distributor summary. Where the Chinese edition is newer or more complete than the English one, or where only a Chinese document answers the question, read the Chinese source or obtain written vendor clarification.
Confirm your supply design against the alternate's minimum operating voltage and reset thresholds with margin, including ramp rate and brownout behavior: the specified operating range and the reset thresholds are two separate limits, and a rail can satisfy one of them while failing the other. This step catches the "won't start" delta.
Re-validate timing-dependent code (delay loops, bit-banged protocols, anything cycle-counted) on the real part, because the mechanism behind flash and clock behavior differs and the numbers differ along with it. Code tuned by trial was tuned against the mechanism it ran on.
Test the peripherals your firmware actually uses (especially USB, timers, ADC, and DMA) on hardware, against the alternate's own register documentation. Reading the register map is the preparation, and running the peripheral on the part is the test.
Confirm your toolchain, debugger, and production programmer recognize and program the part cleanly, in the exact versions your line uses, and mind the shared device IDs. Identifying the part correctly and programming it correctly are separate results, and the second is the one your line depends on.
Treat "pin-compatible" as the point at which qualification begins: the label describes a footprint, and the qualification establishes what the footprint does not. For CH32V specifically, remember that it is RISC-V, so the work is an architecture port and "substitution" is the wrong word for it.
These six steps screen for the failure modes in this guide and define the qualification plan; by themselves they are not a production qualification. A full second-source qualification still covers the exact ordering code and silicon revision, pin-level electrical comparison, boot configuration and option bytes, oscillator and clock characterization, low-power modes, flash endurance and programming in production, package and manufacturing details, quality and lifecycle documentation from the vendor, and corner testing across voltage, temperature, ramp, and silicon lots, with defined pass/fail criteria. Skip the corners and you can ship a failure that appears only at a voltage, temperature, ramp-rate, host, or lot extreme you never exercised.

FAQ
Is the GD32 a drop-in replacement for the STM32?
For specific exact pairs, the nominal pin assignment matches and substantial STM32-oriented code runs after a rebuild. Behaviorally it is not a drop-in, and it should not be treated as one, because the documented differences (reset threshold and 2.6 V minimum supply, a different flash-latency mechanism with an internally inconsistent headline, different USB clock dividers, and far less published errata) mean that you qualify the exact part on your own hardware. Assumption does not do that work. As a qualified second source it is legitimate and widely used, whereas as an unverified swap it is a risk.
What's the single most important thing to check?
There is no universal answer, and it depends on your board and your firmware. The reset-threshold and minimum-supply check comes first for a reason, since it can prevent any execution at all and is cheap to run against your rail design. For a solid 3.3 V system, though, the deltas that dominate are more likely flash timing, USB clocking, boot configuration, or the programming toolchain. Rank the checks by your power architecture and by the peripherals you actually use; the ordering is a property of your design, and that is why the question has no answer in the abstract.
Are these Chinese MCUs reliable enough for a product?
Several of these vendors ship in high volume, yet reliability is not a class property and does not follow from volume or from origin. Volume is a fact about a vendor, and the question in front of you is about a device. It has to be established for the exact device, grade, package, and supply channel against your mission profile: request qualification and reliability documentation, check PCN/EOL practice and traceability, and budget your own testing. The transparency difference (thinner published errata) is one practical difference; supply commitments, tool support, and documentation depth are others. Qualify the specific part, and then judge.
Is the WCH CH32 an STM32 alternative?
The Arm-core CH32 parts are in the same conversation, though the popular CH32V line is RISC-V: existing Arm binaries cannot run, and source needs a real architecture and device port (startup, headers, interrupts, linker scripts, debug), even if you keep GCC or LLVM as the compiler. Treat CH32V as a new-architecture decision. It does not do the work a second source does.
Do I need to read the Chinese datasheets?
Use the vendor's official full datasheet and reference manual, and never work from a distributor summary; that requirement is not negotiable. The language question is a conditional one. Several of these vendors publish official English documentation that states the reset and timing specifications, so the Chinese editions matter in the particular cases where they are newer or more complete, where an application note or errata answer exists only in Chinese, or where the two language editions disagree. Being able to read the Chinese original, or obtaining written vendor clarification, is the difference between a verified answer and a hopeful one.
Will my existing STM32 firmware run unmodified?
Split the question, because the answer differs for a compiled binary and for source code. Take an existing compiled binary first: running it unmodified is not a supported compatibility claim anywhere, and even where it appears to work on an exact Arm-compatible pair, production use needs a rebuild or a deliberate binary-validation program. Source code is the second case: for an exact GD32F103-class pair, substantial register-level code rebuilds and runs, yet the deltas above (reset, flash timing, USB clocks) surface in corner cases, so you test on the actual part, exercising your actual peripherals and timing. Other vendors' families need their own porting assessment, and CH32V needs an architecture port.

How much cheaper are these than STM32?
It varies with the market and with the shortage of the day, which is exactly why these parts matter. In an STM32 allocation, the alternative that is available and qualified beats the cheaper part you cannot buy. Treat the question as one of supply security together with cost, since cost alone does not describe what an available part is worth under allocation. On that reasoning, get the qualification done before you need it, so that a swap becomes a purchase order rather than a redesign under a line-down clock.
Do these alternatives cover the newer STM32 families (F4, G0, H7)?
The alternative landscape is deepest around the STM32F103 class, which is what this guide covers, whereas coverage of newer families varies by vendor and is generally thinner and less mature. If you are second-sourcing a newer STM32, confirm that a genuine pin-and-peripheral-compatible alternative exists for that specific part before you count on it. Do not assume that F103-class compatibility extends up the range, because the existence of an alternative for one class of part is evidence about that class and about nothing else.
Close
A Chinese STM32 alternative is one possible move for de-risking a BOM, and one of the easiest to get wrong, because "pin-compatible" reads like "done" and means "start here." The upside is real: supply security when STM32 goes on allocation, a cost advantage in many markets, and a swap that amounts to a purchase order rather than a redesign under a line-down clock, provided the qualification is already done. The trade is real too: you are adding a second dependency, a Chinese vendor with its own supply risk, its own geopolitical exposure, and documentation whose decisive answers sometimes exist only in Chinese. And the qualification itself costs engineering time up front, on a part you may never ship. Whether the balance works depends on the product and on which risk you are actually trying to reduce. A Second-Source Map screens these parts the way they have to be screened: against their own current datasheets and errata, in the supplier's own language where the answers are to be found, and on the deltas that actually break a swap. It names what still has to be qualified on your hardware. If that would help before you commit a design to one, that's what I do.
This article quotes specific documents: GigaDevice GD32F103xx Datasheet Rev. 2.15 (June 2023; general description and supply range re-verified 2026-07-21, electrical-table values as extracted from Rev. 2.12 on 2026-07-06 — re-verify tables against the current revision at publish), GD32F10x User Manual (FMC and RCU chapters) and AN002 flash-programming manual Rev 3.0, plus GigaDevice's GD32F10x firmware-library headers; STMicroelectronics STM32F103x8/xB datasheet (DocID13587, Rev 17 as opened; ST's current revision is newer, values unchanged per its revision history), RM0008 reference manual (Rev 20 as opened), and errata sheet ES096 Rev 15 (scope: STM32F101x8/B, F102x8/B, F103x8/B medium-density); and OpenOCD mainline source. Other parts, vendors, and revisions differ, and some widely-circulated compatibility notes could not be independently verified and are not relied on here. This is general engineering guidance: qualify any alternate against its own documents, errata, and your firmware before committing.
Get the next pattern by email
One dependency pattern from real hardware audits, occasionally. No schedule promised yet.
Working through this right now? Book a call → or write to me →