Вместо STM32 чаще всего ставят четыре китайских семейства микроконтроллеров: GigaDevice GD32, Geehy APM32, Artery AT32 и WCH CH32. У тех из них, что построены на Cortex-M, распиновка и адреса регистров близко повторяют заменяемый STM32, поэтому плата обычно остаётся прежней. Прошивка обычно нет. В документах самих производителей перечислены отличия в задержках flash, запуске генератора, программировании flash, USB и потреблении, а часть инструментов ST отказывается работать с чужими кристаллами. Микроконтроллеры WCH серии CH32V встают на посадочные места STM32, но у них ядро RISC-V, поэтому нужен полноценный перенос, а не пересборка.
Считайте любой из них аналогом, который нужно квалифицировать, а не прямой заменой: пересоберите проект с заголовками производителя, перепроверьте тактирование, запись во flash, USB и режимы пониженного потребления и сверьте электрические ограничения - они различаются сильнее, чем признают большинство сравнений. Ни один из производителей не обещает, что прошивка от STM32 заработает без изменений, а в проверенных нами документах ST не названа вообще: в руководствах Artery по миграции речь идёт о микроконтроллерах «SXX32».
Мы поставляем из Шэньчжэня и STM32, и эти аналоги. Ниже - что на самом деле написано в даташитах и апнотах на октябрь 2026 года.
Что чем заменяют
| Семейство | Обычно заменяет | Ядро | Макс. частота | Питание (VDD) | Что важно знать сразу |
|---|---|---|---|---|---|
| GigaDevice GD32F103 | STM32F103 | Cortex-M3 | 108 МГц | 2,6-3,6 В | Flash без задержек только в первых 256 КБ |
| GD32F303 | STM32F103 high-density | Cortex-M4F | 120 МГц | 2,6-3,6 В | USB может работать без кварца |
| GD32F405/407 | STM32F405/407 | Cortex-M4F | 168 МГц | 2,6-3,6 В | Область без задержек 512 КБ |
| GD32E230 | Класс STM32F030 | Cortex-M23 | 72 МГц | 1,8-3,6 В | Ядро не то, что у F030 (M0) |
| Geehy APM32F103 | STM32F103 | Cortex-M3 | 96 МГц | 2,0-3,6 В | Тот же диапазон питания, что у STM32F103 |
| APM32F030 / F072 | STM32F030 / F072 | Cortex-M0+ | 48 МГц | 2,0-3,6 В | У F072 USB без кварца |
| APM32F405/407 | STM32F405/407 | Cortex-M4F | 168 МГц | 1,8-3,6 В | У ранних ревизий ошибка в NVIC |
| Artery AT32F403A | STM32F103 (по руководству Artery) | Cortex-M4F | 240 МГц | 2,6-3,6 В | Встроенная подтяжка USB, дольше старт |
| AT32F413 | STM32F103 от C8 до RC | Cortex-M4F | 200 МГц | 2,6-3,6 В | |
| AT32F421 | STM32F030 | Cortex-M4 без FPU | 120 МГц | 2,4-3,6 В | Два вывода питания в LQFP48 отличаются |
| AT32F435/437 | Класс STM32F4 | Cortex-M4F | 288 МГц | 2,6-3,6 В | Выводы VCAP от STM32F4 здесь GPIO |
| WCH CH32F103 | Посадочное место STM32F103C8/R8 | Cortex-M3 | 72 МГц | 2,7-5,5 В | Только SWD, без JTAG |
| WCH CH32V203 | Посадочное место класса STM32F103 | RISC-V (QingKe V4B) | 144 МГц | 2,4-3,6 В | Двоичной совместимости нет |
| WCH CH32V303/305/307 | Класс STM32F105/107 | RISC-V (QingKe V4F) | 144 МГц | 2,4-3,6 В | Двоичной совместимости нет |
Для сравнения: STM32F103 - Cortex-M3 на 72 МГц с питанием 2,0-3,6 В. Столбец «обычно заменяет» составлен по распиновке и карте памяти; руководства по миграции «деталь в деталь» публикует только Artery. Источники: даташиты GigaDevice, страницы продуктов Geehy, даташиты Artery и таблица соответствия, даташиты WCH.
Две ошибки, которые часто встречаются в интернете: микроконтроллера «GD32F030» не существует (младшие серии GigaDevice - GD32F1x0 и GD32E230), а AT32F403A работает на 240 МГц, не на 288. 288 МГц - это AT32F435/437.
Flash: области без задержек и медленное программирование
Отсюда берётся большинство сюрпризов с производительностью.
- Без задержек выполняется только часть flash. У GD32F103 без тактов ожидания работают только первые 256 КБ («code area»); за её пределами даташит GigaDevice предупреждает о долгих задержках выборки. У GD32F4xx эта область - 512 КБ. Почему так, видно на фотографиях кристаллов Zeptobars: в корпусе GD32F103 рядом с кристаллом микроконтроллера стоит отдельный кристалл последовательной flash (Zeptobars).
- Artery называет цифру. У AT32F403A код из области с задержками выполняется примерно в 0,4 раза медленнее, то есть 240-мегагерцовый микроконтроллер там ведёт себя примерно как 96-мегагерцовый (Artery FAQ0069). Если в пользовательских настройках выбрать увеличенную SRAM на 224 КБ, область без задержек сокращается до 128 КБ.
- У WCH так же. У CH32V203 и CH32V30x на полной скорости работает только область без задержек, а тактовая частота flash ограничена 60 МГц.
- Стирание и запись дольше. GD32F103: стирание страницы 50 мс типично (до 400 мс) и полное стирание 2,4 с типично для 128 КБ, против 20-40 мс у STM32F103 (даташит GD32F103, даташит STM32F103). Полное стирание AT32F403A: 0,8-2,8 с против 40 мс (Artery MG0007). Первыми ломаются загрузчики и эмуляция EEPROM с жёсткими таймаутами.
- Другие размеры страниц и опционных байтов. Страницы GD32 - 1 КБ у моделей до 128 КБ, 2 КБ в первых 512 КБ у старших моделей и 4 КБ дальше. Область пользовательских настроек AT32F403A - 48 байт против 16 у STM32F103.
Что делать: держите критичный по времени код и обработчики прерываний в области без задержек (проверьте по map-файлу линкера) и перепроверьте каждую запись, стирание и таймауты загрузчика.
Тактирование и запуск
- Таймаут запуска HSE - классическая причина «не стартует». По умолчанию у ST
HSE_STARTUP_TIMEOUTравен 0x0500. В руководстве GigaDevice по переносу ПО (AN001) сказано поменять его на 0xFFFF (GD AN001). В errata Geehy для APM32F103 написано, что 0x0500 может не хватить, и рекомендовано не меньше 0x3200 (errata Geehy). В библиотеке самой Artery стоит 0x3000. - Старт дольше. GD32F103 от сброса до main нужно 9-68 мс типично при области кода 16-128 КБ и 125 мс при 256 КБ. AT32F403A стартует за 13 мс против 2,5 мс у STM32F103, а из Standby выходит за 8 мс против 50 мкс. Всё, что должно быстро реагировать после сброса или пробуждения, нужно перепроверить.
- Такты ожидания. У APM32F103 задержка flash - 0/1/2/3 такта при частоте до 24/48/72/96 МГц, настраивается привычно. По GD32F303 документы GigaDevice расходятся между собой, поэтому лучше измерить.
USB
Здесь плату всё-таки может понадобиться изменить.
| Микроконтроллер | Тактирование USB | Подтяжка D+ |
|---|---|---|
| STM32F103 | Кварц HSE + PLL | Внешняя 1,5 кОм |
| GD32F103 | Кварц HSE + PLL | Сверьтесь с даташитом |
| GD32F303 | Может работать без кварца (IRC48M + CTC) | Сверьтесь с даташитом |
| APM32F103 | Кварц HSE + PLL | Внешняя 1,5 кОм |
| APM32F072 | Без кварца (CRS) | Сверьтесь с даташитом |
| AT32F403A | Без кварца, от HICK 48 МГц с подстройкой по USB SOF | Встроенная: внешний резистор 1,5 кОм не ставить |
| CH32V203 / V30x | Сверьтесь с даташитом | Встроенная 1,5 кОм |
На плате под STM32F103 с внешней подтяжкой 1,5 кОм на D+ после установки AT32F403A или CH32V окажется вторая, встроенная, поэтому внешний резистор нужно убрать. Кроме того, у AT32F403A делитель частоты USB допускает только значения от /2 до /4 (Artery MG0007).
Питание и электрические ограничения
- Минимальное напряжение. GD32F1/F3 и AT32F403A нужно не меньше 2,6 В, а STM32F103 работает от 2,0 В. Изделия, которые питаются от просаживающейся батареи или шины 2,5 В, с ними не заработают. APM32F103 повторяет диапазон STM32F103: 2,0-3,6 В.
- Предельно допустимое напряжение. У GD32F103 абсолютный максимум 3,6 В против 4,0 В у STM32F103. Выбросы питания, которые переживает STM32, для него могут быть опасны.
- Потребление в режимах сна. Здесь самая большая документированная разница:
| Режим (3,3 В) | STM32F103 | GD32F103 | AT32F403A |
|---|---|---|---|
| Stop / Deep-sleep | 14-24 мкА | 247-259 мкА | 1,4 мА (у STM32F103 в сравнении Artery - 25 мкА) |
| Standby | 2,0-3,4 мкА | 6,1-7,8 мкА | 5,7 мкА (у STM32F103 в сравнении Artery - 2,1 мкА) |
| Домен VBAT | 1,4 мкА | 12,65 мкА | Не сравнивалось |
Источники: даташиты GD32F103 и STM32F103, Artery MG0007. Для изделий на батарейках одного этого может хватить, чтобы отказаться от замены.
- Аналоговые мелочи. У AT32F403A встроенный датчик температуры имеет положительный наклон характеристики, а у STM32 - отрицательный, АЦП работает на 2 Msps, а вывод BOOT0 постоянно подтянут к земле резистором около 90 кОм.
Выводы, которые не совпадают
«Pin-to-pin» верно для большинства корпусов, но не для всех:
- AT32F421 в LQFP48: выводы 35 и 36 - это PF6/PF7, а у STM32F030CC на этих местах VSS/VDD (Artery MG0016). Интерфейсы I2C и АЦП тоже отличаются.
- AT32F435/437: выводы, которые у STM32F405/407 служат VCAP_1 и VCAP_2, здесь GPIO (PH3/PH2).
- CH32F103: только SWD. Плату, где используется JTAG, придётся дорабатывать.
Отладка и библиотеки
- Пакет Keil для STM32F1 отвергает чужие кристаллы. Keil.STM32F1xx_DFP проверяет идентификатор устройства и останавливается с сообщением «Not a genuine ST Device!». Errata Geehy советуют использовать пакет Geehy или закомментировать проверку (описание пакета Keil).
- Отладочный сервер самой ST тоже может отказать. Пользователи сообщают, что GDB-сервер ST-LINK в STM32CubeIDE останавливается с «Could not verify ST device!» на клонах, тогда как OpenOCD работал (сообщество ST, Хабр). Заявлений ST о поддержке чужих микроконтроллеров мы не нашли.
- Идентификаторы отличаются. APM32F1 отдаёт JTAG/SWD ID 0x4ba00477/0x2ba01477 против 0x3ba00477/0x1ba01477 у STM32F1, поэтому конфигурация OpenOCD для STM32F1 не проходит проверку ID. GD32F1x0 используют тот же Device ID 0x410, что и STM32, но с другими ревизиями.
- Берите инструменты производителя. У каждого есть пакеты для Keil/IAR и свой программатор: GD-Link, Geehy-Link, AT-Link и WCH-Link. CH32V отлаживаются через двухпроводной интерфейс WCH SDI, а не SWD, и требуют WCH-Link. Последний номерной релиз OpenOCD - 0.12.0 (январь 2023 года) - вышел раньше поддержки Geehy и Artery, она есть только в ветке разработки; поддержка CH32 - в форке WCH (OpenOCD).
- Библиотеки не взаимозаменяемы. Производители переименовывают периферию: у GigaDevice RCU, FMC, TIMER0 и USART0; у Geehy RCM, TMR и EINT; у Artery префиксы
crm_иtmr_; WCH копирует имена из старой SPL от ST. - Проверьте лицензию на middleware ST. Драйверы HAL и LL из STM32CubeF1 распространяются по BSD-3-Clause. А USB Device и Host и STemWin - по лицензии ST SLA0044, которая разрешает их использование только с устройствами ST (лицензия STM32CubeF1, лицензия USB Device). Если изделие переходит на GD32 или AT32 и сохраняет USB-стек ST, возникает проблема с лицензией.
CH32V - это перенос, а не замена
CH32V203 и CH32V30x встают на посадочные места класса STM32, но их ядра QingKe построены на RISC-V. Прошивки для Cortex-M на них не работают. Для переноса нужны тулчейн RISC-V, таблица векторов через mtvec, контроллер прерываний PFIC от WCH вместо NVIC и другие номера прерываний (WWDG_IRQn - 16, а не 0). Атрибут «WCH-Interrupt-fast» штатный GCC не принимает, поэтому используйте тулчейн WCH или перепишите обработчики (руководство QingKe V4, атрибуты RISC-V в GCC).
Errata и ревизии кристалла
Читайте errata для конкретной модели и ревизии. Пример: в ранних ревизиях APM32F407 (A2/A3) реализованы только три бита приоритета NVIC - восемь уровней против шестнадцати у STM32F407; в ревизиях C1/C2 это исправлено (errata Geehy).
Чек-лист миграции
- Сравните распиновку конкретного корпуса, а не семейства: выводы питания AT32F421 в LQFP48, выводы VCAP у AT32F435, подтяжку USB D+.
- Сверьте диапазон питания и предельно допустимые значения с вашими шинами: минимум 2,6 В отсекает часть изделий.
- Пересоберите проект со стартовыми файлами и заголовками производителя, увеличьте
HSE_STARTUP_TIMEOUT, настройте задержки flash и тактирование под новый кристалл. - Держите горячий код в области flash без задержек и проверьте это по map-файлу.
- Перепроверьте работу с flash: размеры страниц, время стирания, опционные байты, таймауты загрузчика.
- Перепроверьте USB: подтяжку, источник тактирования, делитель.
- Измерьте потребление во всех режимах сна, которые использует изделие.
- Заново откалибруйте АЦП и датчик температуры.
- Настройте отладку с пакетом и программатором производителя или со свежей сборкой OpenOCD.
- Замените middleware ST, лицензированное только для устройств ST.
- Квалифицируйте во всём температурном диапазоне, проведите длительные испытания и зафиксируйте ревизию кристалла, на которой прошли квалификацию.
Закупка
Аналоги pin-to-pin - один из главных способов пережить дефицит STM32 или снятие модели с производства; общая стратегия - в нашей статье об управлении EOL-компонентами. Если рассматриваете замену, закажите образцы для квалификации до серийных объёмов и внесите аналог в BOM отдельной согласованной строкой, а не в одно поле с исходным партномером; формат показан в статье о подготовке BOM.
Мы поставляем STM32 и их аналоги из Шэньчжэня, помогаем с подбором замен и можем отправить образцы для вашей квалификации. Отправьте запрос с партномером, который нужно заменить.
Частые вопросы
GD32 - это прямая замена STM32?
Для платы - обычно да, для прошивки - нет. Большинство корпусов GD32F1/F3 повторяют распиновку STM32, но руководство самой GigaDevice по переносу требует изменений в прошивке: увеличить таймаут запуска HSE и использовать алгоритм прошивки flash от GigaDevice. Кроме того, GD32 нужно не меньше 2,6 В, flash без задержек есть только в первых 256 КБ, а в глубоком сне потребление намного выше.
Какой аналог ближе всего к STM32F103?
На бумаге - Geehy APM32F103: то же ядро Cortex-M3 и то же питание 2,0-3,6 В при частоте до 96 МГц. Errata Geehy всё равно требуют увеличить таймаут запуска HSE. GD32F103 быстрее (108 МГц), но требует 2,6 В. AT32F403A намного быстрее (240 МГц, Cortex-M4F), но и отличий больше: встроенная подтяжка USB, долгий старт, высокое потребление во сне.
Можно ли прошивать GD32 или AT32 программатором ST-LINK?
Аппаратно SWD работает с инструментами вроде OpenOCD, но пакет Keil для STM32 отвергает чужие кристаллы, а сервер ST-LINK в STM32CubeIDE, по сообщениям пользователей, тоже. Используйте пакет Keil и программатор производителя (GD-Link, AT-Link) или свежую сборку OpenOCD.
Заработает ли на них код на STM32 HAL?
Скомпилировать его можно - HAL из STM32CubeF1 распространяется по лицензии BSD, - но ни один производитель не гарантирует, что он заработает без изменений: как минимум придётся поправить тактирование, таймауты запуска и настройки flash. USB-стек ST лицензирован только для устройств ST.
Совместим ли CH32V203 с STM32F103?
Он встаёт на посадочное место класса STM32F103, но ядро у него RISC-V, поэтому прошивку STM32 придётся переносить на другой тулчейн, контроллер прерываний и интерфейс отладки. Вариант от WCH на Cortex-M3 - CH32F103.
Достаточно ли они надёжны для серийного производства?
Надёжность нужно подтверждать квалификацией, а не принимать на веру. Испытайте образцы во всём температурном диапазоне и во всех режимах работы, прочитайте errata для конкретной ревизии кристалла и зафиксируйте ревизию, на которой прошли квалификацию.
Нужна помощь с поиском компонентов?
Наша команда из Шэньчжэня готова помочь с EOL, труднодоступными и специализированными компонентами. Котировка за 2-4 часа, гарантия 1 год.