2. Портфель STM32 и выбор камня
В портфеле STM32 больше двух тысяч микроконтроллеров в двух с лишним десятках подсемейств, если считать варианты корпусов: в подборе МК этого справочника (2.5) их 2187. Раздел о том, как в этом ориентироваться, как читать маркировку и почему для практики выбраны именно F103 и F4.
Как это называется в документации
Оригинал Перевод portfolio, series, line портфель, серия, линия part number маркировка, заказной номер package: LQFP, UFQFPN, BGA, WLCSP корпус: с выводами по сторонам, безвыводной, с шариками, размером с кристалл pin-to-pin compatible совместимый по выводам density: low, medium, high, XL класс плотности — объём Flash у F1 device header заголовок устройства (CMSIS) MCU finder подбор микроконтроллера second source замена у того же или другого поставщика
2.1 Четыре группы подсемейств
ST делит портфель не по номерам, а по назначению.
| Группа | Подсемейства | Ядро | Про что |
|---|---|---|---|
| Mainstream | C0, F0, F1, F3, G0, G4 | M0/M0+/M3/M4 | массовые задачи, лучшая цена |
| High Performance | F2, F4, F7, H5, H7, H7R/S, N6 | M3/M4/M7/M33/M55 | вычисления, мультимедиа, связь |
| Ultra Low Power | L0, L1, L4, L4+, L5, U0, U3, U5 | M0+/M3/M4/M33 | питание от батареи |
| Wireless | WB, WB0, WBA, WL | M0+/M4/M33; у WB и WL5 — пара M4 + M0+ | Bluetooth LE, Zigbee, LoRa, Sub-GHz |
ST старается раскладывать выводы одинаково у камней разных серий в одном корпусе —
это, пожалуй, главное практическое свойство портфеля. Начав разработку на F103RB в
LQFP64, к концу проекта можно перейти на F401RE в том же корпусе, если не хватило
производительности. Но плату под это готовят заранее: у F401 на выводе 30, где у F103
PB11, стоит VCAP_1 — ему нужен конденсатор на землю, а питание, BOOT0 и кварц
сверяют по таблицам выводов (2.9). И корпус должен быть тот же: F103C8 с BluePill — в
LQFP48, а 48-выводный F401 бывает только в UFQFPN48. Можно и наоборот — удешевить
изделие, спустившись на F0.
⚠️ Совместимость по выводам не означает совместимости кода. Плата останется прежней, а прошивку придётся править: у разных подсемейств отличаются шины тактирования, регистры GPIO, контроллер DMA. Об этом — весь этот справочник.
2.2 Как читать маркировку
Разберём STM32F401RET6 — камень на плате Nucleo-F401RE:
STM32 F 401 R E T 6
│ │ │ │ │ │ └── температурный диапазон
│ │ │ │ │ └───── корпус
│ │ │ │ └──────── объём Flash
│ │ │ └─────────── число выводов
│ │ └─────────────── подсемейство
│ └─────────────────── тип
└──────────────────────── платформа
Число выводов (позиция 4):
| Буква | Выводов | Буква | Выводов | |
|---|---|---|---|---|
F |
20 | R |
64 | |
G |
28 | M |
80 | |
K |
32 | V |
100 | |
T |
36 | Z |
144 | |
C |
48 | I |
176 | |
B |
208 |
Объём Flash (позиция 5):
| Буква | Flash | Буква | Flash | |
|---|---|---|---|---|
4 |
16 КБ | D |
384 КБ | |
6 |
32 КБ | E |
512 КБ | |
8 |
64 КБ | F |
768 КБ | |
B |
128 КБ | G |
1 МБ | |
C |
256 КБ | H |
1,5 МБ | |
I |
2 МБ |
Корпус (позиция 6): T — LQFP, P — TSSOP, H — BGA, U — UFQFPN/VFQFPN, Y — WLCSP,
J — UFBGA.
Температура (позиция 7): 6 — −40…+85 °C, 7 — −40…+105 °C, 3 — −40…+125 °C.
Итого STM32F401RET6 — это F401, 64 вывода, 512 КБ Flash, корпус LQFP, до +85 °C.
А STM32F103C8T6 с BluePill — F103, 48 выводов, 64 КБ Flash, LQFP, до +85 °C,
STM32F030F4P6 — F030, 20 выводов, 16 КБ Flash, TSSOP, до +85 °C.
Подсказка от заголовков CMSIS. Имена файлов в пакете устройств подтверждают схему:
stm32f412cx.h/f412rx.h/f412vx.h/f412zx.hразличаются буквой числа выводов, аstm32f401xc.h/f401xe.h— буквой объёма Flash. Букваxстоит там, где признак не влияет на регистры. То есть по имени заголовка видно, что для F412 важно количество ног (разный набор портов), а для F401 — размер памяти.
2.3 Линейка STM32F4 подробно
F4 — самая распространённая серия на Cortex-M4F в группе High Performance
и первая серия STM32 с DSP-командами и плавающей точкой. По выводам она совпадает
с F2, но ядро и АЦП у неё быстрее, есть 64 КБ CCM-памяти, I²S принимает и передаёт
одновременно (второй блок I2Sext), а у часов реального времени появились доли секунды
(RTC_SSR) и тонкая подстройка хода (RTC_CALR). Год выхода — 2011.
Сводная таблица серии STM32F4
Общее для всех F4:
- ядро Cortex-M4F с ART Accelerator, наборы Thumb / Thumb-2 / насыщающая арифметика / DSP / FPU;
- генераторы: HSI 16 МГц, LSI 32 кГц, внешние HSE 4–26 МГц, LSE 32,768 кГц;
- режимы пониженного потребления: Sleep, Stop, Standby;
- питание 1,7–3,6 В, выводы, толерантные к 5 В, до 136 быстрых линий ввода-вывода;
- до 3 × 12-битных АЦП и до 2 × 12-битных ЦАП, датчик температуры;
- 16- и 32-битные таймеры, аппаратный CRC, два сторожевых таймера, RTC-календарь;
- 96-битный уникальный идентификатор кристалла, зашитый на заводе;
- корпуса: LQFP (64…208), UFQFPN 48, UFBGA (64…176), TFBGA 216, WLCSP (36…168).
Три линии внутри F4
| Линия | Модель | Flash, КБ | RAM, КБ | МГц | Чем интересна |
|---|---|---|---|---|---|
| Access | F401 | 128–512 | 64–96 | 84 | самый дешёвый вход в F4, USB OTG FS |
| F410 | 64–128 | 32 | 100 | минимальный, лучший ток покоя (до 6 мкА в Stop) | |
| F411 | 256–512 | 128 | 100 | «F401 с запасом», популярен на Nucleo и Black Pill | |
| F412 | 512–1024 | 256 | 100 | + QSPI, CAN, много памяти | |
| F413 | 1024–1536 | 320 | 100 | максимум памяти среди Access | |
| Foundation | F405 | 512–1024 | 192 | 168 | без Ethernet, «рабочая лошадь» |
| F407 | 512–1024 | 192 | 168 | + Ethernet, 2 × CAN, камера — самый ходовой F4 | |
| F446 | 256–512 | 128 | 180 | + QSPI, SAI, SPDIF, 180 МГц | |
| Advanced | F427 | 1024–2048 | 256 | 180 | + SDRAM, Chrom-ART |
| F429 | 512–2048 | 256 | 180 | + контроллер TFT-дисплея | |
| F469 | 512–2048 | 384 | 180 | максимум: 384 КБ RAM, TFT, SAI |
Как выбирать внутри F4:
- нужен просто быстрый M4 с FPU и USB — F401 или F411;
- нужен Ethernet или CAN — F407 (он же стоит на Discovery, самая доступная плата);
- нужен графический дисплей — F429/F469 с контроллером TFT и Chrom-ART;
- нужен минимальный ток — F410;
- нужна внешняя память SDRAM — F427/F429, F469 или F446: их контроллер FMC умеет SDRAM, а FSMC у F405/F407 — только SRAM, NOR и NAND.
Что такое CCM и почему это важно
У F405/F407/F415/F417/F427/F429/F437/F439/F469/F479 есть 64 КБ CCM — Core Coupled Memory, память, подключённая к ядру напрямую, минуя матрицу шин. Доступ к ней всегда без задержек и без конкуренции с DMA.
⚠️ CCM недоступна для DMA. Это её обратная сторона: буфер, который вы отдаёте в DMA, в CCM размещать нельзя: DMA до неё не дотягивается, и поток выключится с ошибкой передачи (флаг
TEIFxвLISR/HISR). Кто этот флаг не проверяет, видит одно — «передача не пошла». CCM хороша для стека, локальных переменных и вычислительных буферов, не для обмена с периферией.
2.4 Почему в справочнике именно F103 и F4
| STM32F103C8T6 (BluePill) | STM32F407VGT6 (Discovery) | |
|---|---|---|
| ядро | Cortex-M3, 72 МГц | Cortex-M4F, 168 МГц |
| Flash / RAM | 64 КБ / 20 КБ | 1 МБ / 192 КБ, из них 64 КБ CCM |
| FPU, DSP | нет | есть |
| цена платы | самая низкая | средняя, но плата с обвязкой |
| роль в справочнике | учебная платформа: дёшево ошибаться | всё, где нужны скорость, FPU, DMA с FIFO |
F103 остаётся отличной учебной платформой: периферии достаточно, документация разобрана до последнего бита, ошибиться дёшево. F4 нужен там, где F103 упирается — обработка сигналов, звук, графика, быстрый обмен, регуляторы с плавающей точкой.
2.5 Как выбирать микроконтроллер под задачу
Идеальный порядок: сначала оценить нужную вычислительную мощность, затем требования к связи, затем питание.
- вычисления, мультимедиа, графика → группа High Performance, то есть F4/F7/H7;
- Ethernet, CAN, много протоколов → F4 (или линия связи F105/F107);
- питание от батареи → серия L, подсемейство по нужной мощности;
- обычная задача без изысков → Mainstream, чаще всего F1 или G0.
Но в жизни решают другие вопросы:
- Массовое изделие или штучное? В мелкой серии разница в цене камня несущественна — берите с запасом и не тратьте недели на оптимизацию. В массовом производстве экономия на кристалле окупает вложения в оптимизацию кода.
- Каков бюджет всей платы? Следствие из первого пункта.
- Ограничения по месту. Корпус диктует и число выводов, и возможности.
- Что умеет ваше производство? LQFP паяется где угодно. BGA и WLCSP требуют рентгеновского контроля — это может закрыть вопрос выбора само по себе.
- Критичен ли срок выхода? Если прошивка нужна вчера, берите камень с запасом мощности: оптимизировать будет некогда.
- Можно ли переиспользовать наработки? Свои библиотеки и знакомые микросхемы экономят месяцы. Переход на другую архитектуру обнуляет этот задел.
- А он вообще есть в продаже? Вопрос, ставший главным после дефицита полупроводников. сроки поставки доходили до двух лет, а дистрибьюторы вводили ограничения на число отладочных плат в одни руки. Доходило до того, что разработчики скупали Nucleo и Discovery, чтобы выпаивать из них микроконтроллеры под собственные изделия. Правило простое: сначала купите камни и положите на склад, потом открывайте IDE.
- Надо ли беречь прошивку? Для коммерческого изделия это вопрос выбора
камня, а не программы. У F1 защита чтения одна — включена или выключена
(
FLASH_ReadOutProtection(ENABLE), битRDPRT), и этот уровень обходят известными приёмами через отладочный порт. У остальных семейств есть уровень 2 (OB_RDP_LEVEL_2): отладка отключается навсегда, и вернуть камень нельзя даже стиранием. Против лабораторных атак сбоем питания и он не абсолютен, поэтому там, где прошивка — главный актив, берут семейства с TrustZone и защищённой загрузкой: L5, U5, WBA, H5 (раздел 2б; у H5 вместо уровней — состояния изделия отOPENдоLOCKED). Довод в ту же сторону: клоны и перемаркировку делают в основном для старых массовых камней — F103, F030, F407 (раздел 2а); у свежих семейств таких случаев заметно меньше.
Помогают два инструмента ST — MCU Finder для настольных систем (уже встроен в STM32CubeIDE, отдельно ставить незачем) и мобильное приложение.
В этом справочнике такой отбор есть в калькуляторах: Инструменты → Подбор МК — 2187 вариантов STM32 из описаний пакетов Keil: ядро, FPU, TrustZone, частота, Flash, ОЗУ, число выводов, а у серий, где пакет её указывает, — периферия. Кристаллы можно сравнить бок о бок. Перед заказом — всё равно даташит: пакет перечисляет не всё (у U585, например, даташит даёт 786 КБ ОЗУ, а пакет — 768).
2.6 Отладочные платы
BluePill — STM32F103C8
Самая дешёвая плата для старта и самая распространённая среди любителей.
Предпочтительна ревизия BluePill+ от WeAct на том же камне — у неё аккуратнее
разведено питание и стоит разъём USB-C. Единственный светодиод на PC13
(включён катодом к выводу), кварц HSE 8 МГц, разъём SWD.
Читать карту так: цвет метки — тип вывода, справа от имени перечислены
альтернативные функции. Красная пометка «3,3 В» означает, что вывод не терпит
5 В на входе — это все линии АЦП (PA0–PA7, PB0, PB1), выводы резервного
домена PC13–PC15 и единственный такой в порту B — PB5.
Три вывода требуют отдельного внимания:
PC13,PC14,PC15питаются через ключ резервного домена. Суммарный ток через них — не больше 3 мА, скорость не выше 2 МГц, ёмкость нагрузки до 30 пФ. Источником тока их использовать нельзя, поэтому светодиод на плате и подключён катодом кPC13: вывод работает приёмником тока, а не источником.PA13,PA14заняты отладочным интерфейсом SWD. Отдав их под GPIO, вы теряете отладку и прошивку по SWD, но не плату: приBOOT0= 1 после сброса стартует загрузчик, выводы SWD свободны, и отладчик снова видит камень. Помогает и подключение отладчика с удержанием сброса.PA15,PB3,PB4после сброса работают как выводы JTAG и подтянуты. Чтобы освободить их и оставить SWD, включают тактAFIO(RCC_APB2ENR_AFIOEN) и пишут вAFIO_MAPRполеSWJ_CFG= 010 (AFIO_MAPR_SWJ_CFG_JTAGDISABLE).
⚠️ На рынке много BluePill с перемаркированными или поддельными кристаллами: вместо STM32F103C8 ставят клоны CS32/CKS или камни с меньшей Flash. Признак — Keil или ST-Link видит не тот идентификатор устройства. На работу примеров это чаще всего не влияет, но знать полезно.
NR Blue Kit
Учебная плата на том же STM32F103 с готовой обвязкой: светодиоды, кнопки, дисплей, датчик температуры, потенциометры. Удобна тем, что примеры запускаются без макетирования и навесных проводов.
Nucleo — линейка ST
Плата Nucleo
Появились в 2015 году, три группы по типу корпуса камня: Nucleo-32 (LQFP-32), Nucleo-64 (LQFP-64), Nucleo-144 (LQFP-144). Линейка Nucleo-64 самая полная — обычно под словом «Nucleo» имеют в виду именно её.
Устройство платы:
- отделяемая часть с ST-LINK 2.1 — программатор и отладчик; её можно отломить
по обозначенной линии и пользоваться как самостоятельным ST-Link (отдельно такой
стоит около 25 долларов). Можно и не отламывать: сняв перемычки
ST-LINK, вы получаете SWD-выход на внешнюю плату; - виртуальный COM-порт через тот же USB — удобно для отладочного вывода;
- целевой микроконтроллер, кнопка RESET (чёрная), пользовательская кнопка (синяя), светодиод;
- кварц HSE на плате не распаян (место X3 пустое): 8 МГц приходят с микроконтроллера
ST-LINK, с его выхода MCO, на вход
OSC_IN— так у платы MB1136 с ревизии C-02 (кроме NUCLEO-L476RG). Поэтому HSE включают как внешний сигнал: сначалаRCC_CR_HSEBYP, потомRCC_CR_HSEON(в CubeMX — «BYPASS Clock Source»); часовой кварц LSE на новых платах распаян; - разъёмы Arduino — принимают готовые шилды;
- собственные разъёмы Morpho — два ряда 2×19 с шагом 2,54 мм, выводят все ноги.
Цена 10–15 долларов, и платы совместимы по разъёмам: шилд и проводку от Nucleo-F103RB можно пересадить на Nucleo-F401RE, если понадобилась мощность. Прошивку при этом пересобирают под новый камень, а регистровый код переписывают (2.9).
Discovery
Более полусотни разных плат под конкретные возможности камней. Для нашей темы главная — STM32F407G-DISC1 (в старых ревизиях STM32F4-Discovery): F407VG, акселерометр, микрофон, аудио-ЦАП, USB OTG, восемь светодиодов. Это самый доступный способ пощупать F4 всерьёз.
2.7 Программатор ST-Link
Годится любая версия: V2, V2.1, V3. Самый дешёвый вариант — «свисток» ST-Link V2 с AliExpress, его вполне достаточно. Если у вас есть Nucleo или Discovery, отдельный программатор не нужен — он уже на плате.
Кроме программатора для практики понадобятся:
- преобразователь USB–UART (для отладочного вывода);
- мультиметр;
- провода DuPont и кнопка.
Настройка ST-Link в Keil разобрана отдельно.
2.8 ⚠️ Тактовые константы: ловушка при переходе на F4
Практическая мина, на которой легко потерять вечер.
| STM32F1 | STM32F4 | |
|---|---|---|
где заданы HSI_VALUE/HSE_VALUE |
в CMSIS-заголовке stm32f10x.h |
не в заголовке, а в system_stm32f4xx.c |
HSI_VALUE по умолчанию |
8 МГц | 16 МГц |
HSE_VALUE по умолчанию |
8 МГц (у F105/F107 — 25 МГц) | 25 МГц |
Это проект на одном CMSIS. В проекте с HAL обе константы задаёт stm32f4xx_hal_conf.h
(у F1 — stm32f1xx_hal_conf.h), и CubeMX пишет туда частоту из дерева тактов: править
её в CubeMX или определением в настройках проекта.
Два следствия:
- Внутренний генератор у F4 вдвое быстрее. Все расчёты множителей PLL, перенесённые с F1 без правки, дадут вдвое завышенную частоту.
- Значение внешнего кварца по умолчанию — 25 МГц, а на Discovery F407
распаян кварц 8 МГц. Если не переопределить
HSE_VALUE, библиотека будет считать частоты, исходя из 25 МГц, — иHAL_Delay(1000)отмерит не секунду, аSystemCoreClockразойдётся с реальностью в три с лишним раза.
Лечится определением в настройках проекта:
-DHSE_VALUE=8000000
Обе константы объявлены через #if !defined(...), поэтому определение из проекта
имеет приоритет и предупреждений не будет — молча возьмётся ваше значение.
Именно поэтому ошибку так трудно заметить.
2.9 Замена камня: совместимость по выводам
Камень меняют по трём причинам: его нет на складе, его мощности не хватило или хочется удешевить изделие. Случаев замены два, и они совсем разные.
Внутри серии меняется только память. STM32F103C8T6 и
STM32F103CBT6 — оба на 48 выводов в корпусе LQFP, Flash 64 и 128 КБ
(2.2). Заголовок у них один: оба относятся к классу средней плотности
STM32F10X_MD. Классы F1 по заголовку:
| Класс | Макрос | Flash |
|---|---|---|
| малая плотность | STM32F10X_LD |
16–32 КБ |
| средняя плотность | STM32F10X_MD |
64–128 КБ |
| высокая плотность | STM32F10X_HD |
256–512 КБ |
| XL | STM32F10X_XL |
768–1024 КБ |
| линия связи F105/F107 | STM32F10X_CL |
64–256 КБ |
| экономичная линия F100 | STM32F10X_LD_VL, _MD_VL, _HD_VL |
16–512 КБ |
Прошивка переносится между камнями одного класса без правок, если помещается в память. Отсюда обычная стратегия: прототип на старшем камне, в серию — младший в том же корпусе, когда карта памяти покажет настоящий размер прошивки (раздел 11).
Между сериями совпадают выводы, но не код. ST раскладывает выводы так, что камни разных серий в одном корпусе встают на одну плату: питание, кварц и основные интерфейсы оказываются на тех же местах (2.1). Но внутри это другой камень:
| F103 | F401 | |
|---|---|---|
| адрес GPIOA | 0x40010800, шина APB2 |
0x40020000, шина AHB1 |
| регистры порта | CRL, CRH, IDR, ODR, BSRR, BRR, LCKR |
MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, LCKR, AFR |
смещение ODR |
0x0C |
0x14 |
| такт порта | RCC->APB2ENR, бит IOPAEN |
RCC->AHB1ENR, бит GPIOAEN |
| таймеры на APB1 | 72 МГц, делитель на 1 мкс — 71 | 84 МГц, делитель — 83 |
| Flash и RAM | с 0x08000000 и 0x20000000 |
те же |
Даже регистры с одинаковыми именами лежат по другим смещениям. Одна и та же строка компилируется в разные адреса:
GPIOA->BSRR = 1u << 5; /* зажечь PA5 */
F103: movw r0, #2064 F401: movs r0, #24
movt r0, #16385 movt r0, #16386
movs r1, #32 movs r1, #32
str r1, [r0] ; 0x40010810 str r1, [r0] ; 0x40020018
Прошивку пересобирают под новый заголовок, а всё, что написано на регистрах, — порты, такты, таймеры — переписывают. HAL и LL эту работу сокращают, но не отменяют (5.6). Тактовые константы при этом тоже меняются (2.8).
Одинаковое число выводов — ещё не тот же корпус. На плате Black Pill
стоит STM32F401CCU6 или STM32F411CEU6. Выводов у них столько же, 48,
сколько у камня BluePill, но буква U означает корпус UFQFPN, а у
STM32F103C8T6 буква T — LQFP. На плату BluePill такой камень не
встанет: это замена платы, а не камня.
Как планировать замену:
- Кандидаты. CubeMX (и MCU Finder) по исходному камню показывает список замен с долей совместимости по периферии, памяти и выводам.
- Таблицы выводов. Их сверяют у обеих микросхем: питание, вывод
BOOT0, выводы стабилизатора ядра, кварц. «Почти совместимо» чаще всего ломается именно там. - Плата. Места под различия закладывают ещё при разводке.
- Прошивка. Настройку периферии держат в одном месте, чтобы при замене переписывать её, а не весь код.
2.10 Грабли
Взяли камень, совместимый по выводам, — плата та же, прошивка не работает. Совместимость выводов не означает совместимости кода: тактирование, GPIO и DMA у подсемейств разные (2.1).
DMA из буфера в CCM не идёт. CCM недоступна DMA, поток гаснет с флагом TEIFx — буферы обмена кладут в обычное ОЗУ (2.3).
Отладчик видит «не тот» идентификатор. На BluePill бывают клоны и перемаркированные кристаллы (2.6).
На F4 все частоты вдвое или втрое не те. HSI_VALUE по умолчанию 16 МГц, HSE_VALUE — 25 МГц, а на плате
кварц 8 МГц; задать -DHSE_VALUE=8000000 в проекте (2.8).
2.11 Итоги
- Портфель — больше двух тысяч камней в двух с лишним десятках подсемейств, разложенных на четыре группы по назначению: Mainstream, High Performance, Ultra Low Power, Wireless.
- Маркировка читается позиционно: подсемейство, число выводов, Flash, корпус,
температура.
STM32F401RET6= F401, 64 ноги, 512 КБ, LQFP, до +85 °C. - Совместимость по выводам позволяет менять камень на поздней стадии, но код при этом придётся править.
- F4 — первая серия STM32 с FPU и DSP. Access (F401/F410/F411/F412/F413) — дешёвый вход, Foundation (F405/F407/F446) — рабочая середина с Ethernet и CAN, Advanced (F427/F429/F469) — графика, SDRAM, максимум памяти.
- CCM-память у старших F4 быстрая, но недоступна для DMA.
- В реальном выборе технические характеристики часто уступают наличию на складе, возможностям производства и переиспользуемому заделу.
- У F4
HSI= 16 МГц иHSE_VALUEпо умолчанию 25 МГц — перепроверьте, прежде чем удивляться неверным задержкам. - Замена камня бывает двух видов. Внутри серии меняется только память: C8 и CB — один класс MD. Между сериями совпадают выводы, но не код: у F401 порт на другом адресе, другие регистры и частоты. Одинаковое число выводов — ещё не тот же корпус.
Дальше: раздел 2а «Клоны и подделки STM32: как отличить» — что делать, если на плате написано STM32, а внутри может быть другой камень.