Embedded HandbookПриложения
Все разделы › I. Основы
STM32F103, STM32F407, STM32F401, STM32F411 · уровень базовый · 18 мин чтения
Открыть в интерактивном справочнике

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 Сводная таблица серии STM32F4

Общее для всех F4:

Три линии внутри 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:

Что такое 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 Как выбирать микроконтроллер под задачу

Идеальный порядок: сначала оценить нужную вычислительную мощность, затем требования к связи, затем питание.

Но в жизни решают другие вопросы:

  1. Массовое изделие или штучное? В мелкой серии разница в цене камня несущественна — берите с запасом и не тратьте недели на оптимизацию. В массовом производстве экономия на кристалле окупает вложения в оптимизацию кода.
  2. Каков бюджет всей платы? Следствие из первого пункта.
  3. Ограничения по месту. Корпус диктует и число выводов, и возможности.
  4. Что умеет ваше производство? LQFP паяется где угодно. BGA и WLCSP требуют рентгеновского контроля — это может закрыть вопрос выбора само по себе.
  5. Критичен ли срок выхода? Если прошивка нужна вчера, берите камень с запасом мощности: оптимизировать будет некогда.
  6. Можно ли переиспользовать наработки? Свои библиотеки и знакомые микросхемы экономят месяцы. Переход на другую архитектуру обнуляет этот задел.
  7. А он вообще есть в продаже? Вопрос, ставший главным после дефицита полупроводников. сроки поставки доходили до двух лет, а дистрибьюторы вводили ограничения на число отладочных плат в одни руки. Доходило до того, что разработчики скупали Nucleo и Discovery, чтобы выпаивать из них микроконтроллеры под собственные изделия. Правило простое: сначала купите камни и положите на склад, потом открывайте IDE.
  8. Надо ли беречь прошивку? Для коммерческого изделия это вопрос выбора камня, а не программы. У 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.

Карта выводов BluePill: два ряда по 20 контактов, альтернативные функции и ограничения по напряжению

Читать карту так: цвет метки — тип вывода, справа от имени перечислены альтернативные функции. Красная пометка «3,3 В» означает, что вывод не терпит 5 В на входе — это все линии АЦП (PA0–PA7, PB0, PB1), выводы резервного домена PC13–PC15 и единственный такой в порту B — PB5.

Три вывода требуют отдельного внимания:

⚠️ На рынке много BluePill с перемаркированными или поддельными кристаллами: вместо STM32F103C8 ставят клоны CS32/CKS или камни с меньшей Flash. Признак — Keil или ST-Link видит не тот идентификатор устройства. На работу примеров это чаще всего не влияет, но знать полезно.

NR Blue Kit

Учебная плата на том же STM32F103 с готовой обвязкой: светодиоды, кнопки, дисплей, датчик температуры, потенциометры. Удобна тем, что примеры запускаются без макетирования и навесных проводов.

Nucleo — линейка ST

Плата Nucleo Плата Nucleo

Появились в 2015 году, три группы по типу корпуса камня: Nucleo-32 (LQFP-32), Nucleo-64 (LQFP-64), Nucleo-144 (LQFP-144). Линейка Nucleo-64 самая полная — обычно под словом «Nucleo» имеют в виду именно её.

Устройство платы:

Цена 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, отдельный программатор не нужен — он уже на плате.

Кроме программатора для практики понадобятся:

Настройка 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 или определением в настройках проекта.

Два следствия:

  1. Внутренний генератор у F4 вдвое быстрее. Все расчёты множителей PLL, перенесённые с F1 без правки, дадут вдвое завышенную частоту.
  2. Значение внешнего кварца по умолчанию — 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 такой камень не встанет: это замена платы, а не камня.

Как планировать замену:


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 Итоги

Дальше: раздел 2а «Клоны и подделки STM32: как отличить» — что делать, если на плате написано STM32, а внутри может быть другой камень.

Открыть в интерактивном справочнике