STM32C0: микроконтроллеры на Cortex-M0+, распиновки по корпусам
STM32C0 — самое простое семейство STM32: ядро Cortex-M0+ с частотой до 48 МГц, тактирование от встроенного генератора на 48 МГц, корпуса от восьмивыводного SO8N до LQFP64. Здесь — сравнение линеек и страницы с распиновкой и номерами альтернативных функций каждого микроконтроллера в каждом корпусе.
STM32C0 — семейство 32-битных микроконтроллеров STMicroelectronics на ядре Arm Cortex-M0+, которое ST предлагает вместо 8-битных микроконтроллеров: частота до 48 МГц от встроенного генератора, корпуса от восьмивыводного SO8N у STM32C011J до LQFP64. В разделе 84 страницы для 93 исполнений в 14 корпусах, 6 линеек: у каждого сочетания микроконтроллера и корпуса — своя страница со схемой выводов и номерами альтернативных функций.
Линейки STM32C0
Линейки отличаются набором периферии; в пределах линейки — объёмом памяти и корпусом. Значения в таблице собраны из записей базы ST; у STM32C051, C071, C091 и C092 база не указывает частоту — для всех STM32C0 она одна, до 48 МГц (RM0490, разд. 6.2.6).
| Линейка | Ядро, частота | Флеш-память | ОЗУ | Корпуса | Чем выделяется |
|---|---|---|---|---|---|
| STM32C011 | Cortex-M0+, до 48 МГц | 16 КБ – 32 КБ | 6 КБ | SO8N, TSSOP20, UFQFPN20, WLCSP12 | I²S |
| STM32C031 | Cortex-M0+, до 48 МГц | 16 КБ – 32 КБ | 12 КБ | LQFP32, LQFP48, TSSOP20, UFQFPN28, UFQFPN32, UFQFPN48 | I²S |
| STM32C051 | Cortex-M0+ | 32 КБ – 64 КБ | 12 КБ | LQFP32, LQFP48, TSSOP20, UFQFPN28, UFQFPN32, UFQFPN48, WLCSP15 | I²S |
| STM32C071 | Cortex-M0+ | 64 КБ – 128 КБ | 24 КБ | LQFP32, LQFP48, LQFP64, TSSOP20, UFBGA64, UFQFPN28, UFQFPN32, UFQFPN48, WLCSP19 | USB, I²S |
| STM32C091 | Cortex-M0+ | 128 КБ – 256 КБ | 36 КБ | LQFP32, LQFP48, LQFP64, TSSOP20, UFBGA64, UFQFPN28, UFQFPN32, UFQFPN48, WLCSP24 | I²S |
| STM32C092 | Cortex-M0+ | 128 КБ – 256 КБ | 30 КБ | LQFP32, LQFP48, LQFP64, TSSOP20, UFBGA64, UFQFPN28, UFQFPN32, UFQFPN48, WLCSP24 | FDCAN, I²S |
Все линейки описывает один reference manual — RM0490. Периферия добавляется ступенями (таблица 1 RM0490 и данные ST):
- STM32C011 и C031 — базовый набор: USART1 и USART2, SPI1 с I²S, I2C1, таймеры TIM1, TIM3, TIM14, TIM16, TIM17, АЦП;
- STM32C051 и старше — ещё SPI2, I2C2 и 32-битный таймер TIM2;
- STM32C071 — USB Full Speed без кварца: генератор HSIUSB48 и блок CRS, а также вывод VDDIO2 в части корпусов;
- STM32C091 и C092 — USART3, USART4 и TIM15, у C092 ещё контроллер FDCAN.
Тактирование
У STM32C0 нет PLL. Системную частоту SYSCLK дают генераторы LSI и LSE, кварцевый HSE, у STM32C071 — HSIUSB48, а чаще всего HSISYS — частота встроенного RC-генератора HSI48 на 48 МГц, поделённая на число от 1 до 128. Максимальная частота SYSCLK — 48 МГц; после сброса ядро тактируется от HSISYS (RM0490, разд. 6.2.2 и 6.2.6). Делители таймеров и скорость UART от этих частот считают калькулятор таймера и калькулятор UART.
Кварц HSE по умолчанию подключается к выводам PF0-OSC_IN и PF1-OSC_OUT, но если сбросить бит HSE_NOT_REMAPPED в байте опций, он переходит на PC14-OSCX_IN и PC15-OSCX_OUT — тогда HSE и LSE делят одни выводы и не могут работать одновременно. В корпусах меньше чем на 48 выводов этот перенос включён всегда (RM0490, описание FLASH_OPTR).
Выводы STM32C0: альтернативные функции, общие выводы и ремап
На каждой линии порта — мультиплексор альтернативных функций: режим задаёт GPIOx_MODER, номер функции — GPIOx_AFRL или GPIOx_AFRH. В отличие от STM32F0 и G0, у STM32C0 в данных ST заняты все шестнадцать номеров, AF0–AF15.
- Несколько линий на выводе. В маленьких корпусах к одному выводу подключено по нескольку линий портов — у STM32C011J в корпусе SO8N таких выводов большинство. Активную линию выбирает регистр SYSCFG_CFGR3 (RM0490, разд. 9.1.3); таблица выводов атласа показывает все линии каждого вывода.
- Ремап PA11 и PA12. Бит PA11_RMP регистра SYSCFG_CFGR1 заставляет вывод PA11 работать как PA9, бит PA12_RMP — вывод PA12 как PA10; исходные PA9 и PA10, если они есть в корпусе, переводятся в аналоговый режим.
- Вывод PF2-NRST полем NRST_MODE в байте опций переводится в обычную линию PF2.
- Загрузка. Режим загрузки задают вывод BOOT0 (совмещён с PA14) и биты nBOOT1, nBOOT_SEL и nBOOT0 в байте опций (RM0490, разд. 3.1).
STM32C071 выпускается в двух версиях разводки — GP и N: у версии N есть вывод VDDIO2, у версии GP на его месте линия порта (DS14693). У каждой версии в атласе своя страница со ссылкой на вторую и списком различающихся выводов.
Все STM32C0 по корпусам
STM32C011 — Cortex-M0+, до 48 МГц
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C011D6 | WLCSP12 | 32 КБ | 6 КБ | 20 |
| STM32C011F4, STM32C011F6 | TSSOP20 | 16 КБ / 32 КБ | 6 КБ | 20 |
| STM32C011F4, STM32C011F6 | UFQFPN20 | 16 КБ / 32 КБ | 6 КБ | 20 |
| STM32C011J4, STM32C011J6 | SO8N | 16 КБ / 32 КБ | 6 КБ | 15 |
STM32C031 — Cortex-M0+, до 48 МГц
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C031C4, STM32C031C6 | LQFP48 | 16 КБ / 32 КБ | 12 КБ | 45 |
| STM32C031C4, STM32C031C6 | UFQFPN48 | 16 КБ / 32 КБ | 12 КБ | 45 |
| STM32C031F4, STM32C031F6 | TSSOP20 | 16 КБ / 32 КБ | 12 КБ | 20 |
| STM32C031G4, STM32C031G6 | UFQFPN28 | 16 КБ / 32 КБ | 12 КБ | 28 |
| STM32C031K4, STM32C031K6 | LQFP32 | 16 КБ / 32 КБ | 12 КБ | 30 |
| STM32C031K4, STM32C031K6 | UFQFPN32 | 16 КБ / 32 КБ | 12 КБ | 30 |
STM32C051 — Cortex-M0+
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C051C6 | LQFP48 | 32 КБ | 12 КБ | 45 |
| STM32C051C6 | UFQFPN48 | 32 КБ | 12 КБ | 45 |
| STM32C051C8 | LQFP48 | 64 КБ | 12 КБ | 45 |
| STM32C051C8 | UFQFPN48 | 64 КБ | 12 КБ | 45 |
| STM32C051D8 | WLCSP15 | 64 КБ | 12 КБ | 25 |
| STM32C051F6 | TSSOP20 | 32 КБ | 12 КБ | 25 |
| STM32C051F8 | TSSOP20 | 64 КБ | 12 КБ | 25 |
| STM32C051G6 | UFQFPN28 | 32 КБ | 12 КБ | 28 |
| STM32C051G8 | UFQFPN28 | 64 КБ | 12 КБ | 28 |
| STM32C051K6 | LQFP32 | 32 КБ | 12 КБ | 30 |
| STM32C051K6 | UFQFPN32 | 32 КБ | 12 КБ | 30 |
| STM32C051K8 | LQFP32 | 64 КБ | 12 КБ | 30 |
STM32C071 — Cortex-M0+
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C071C8 | LQFP48 (версия GP) | 64 КБ | 24 КБ | 45 |
| STM32C071C8 | LQFP48 (версия N) | 64 КБ | 24 КБ | 43 |
| STM32C071C8 | UFQFPN48 (версия GP) | 64 КБ | 24 КБ | 45 |
| STM32C071C8 | UFQFPN48 (версия N) | 64 КБ | 24 КБ | 43 |
| STM32C071CB | LQFP48 (версия GP) | 128 КБ | 24 КБ | 45 |
| STM32C071CB | LQFP48 (версия N) | 128 КБ | 24 КБ | 43 |
| STM32C071CB | UFQFPN48 (версия GP) | 128 КБ | 24 КБ | 45 |
| STM32C071CB | UFQFPN48 (версия N) | 128 КБ | 24 КБ | 43 |
| STM32C071F8 | TSSOP20 (версия GP) | 64 КБ | 24 КБ | 25 |
| STM32C071F8 | TSSOP20 (версия N) | 64 КБ | 24 КБ | 24 |
| STM32C071FB | TSSOP20 (версия GP) | 128 КБ | 24 КБ | 25 |
| STM32C071FB | TSSOP20 (версия N) | 128 КБ | 24 КБ | 24 |
| STM32C071FB | WLCSP19 (версия GP) | 128 КБ | 24 КБ | 25 |
| STM32C071G8 | UFQFPN28 (версия GP) | 64 КБ | 24 КБ | 28 |
| STM32C071G8 | UFQFPN28 (версия N) | 64 КБ | 24 КБ | 27 |
| STM32C071GB | UFQFPN28 (версия GP) | 128 КБ | 24 КБ | 28 |
| STM32C071GB | UFQFPN28 (версия N) | 128 КБ | 24 КБ | 27 |
| STM32C071K8 | LQFP32 (версия GP) | 64 КБ | 24 КБ | 30 |
| STM32C071K8 | LQFP32 (версия N) | 64 КБ | 24 КБ | 29 |
| STM32C071K8 | UFQFPN32 (версия GP) | 64 КБ | 24 КБ | 30 |
| STM32C071K8 | UFQFPN32 (версия N) | 64 КБ | 24 КБ | 29 |
| STM32C071KB | LQFP32 (версия GP) | 128 КБ | 24 КБ | 30 |
| STM32C071KB | LQFP32 (версия N) | 128 КБ | 24 КБ | 29 |
| STM32C071KB | UFQFPN32 (версия GP) | 128 КБ | 24 КБ | 30 |
| STM32C071KB | UFQFPN32 (версия N) | 128 КБ | 24 КБ | 29 |
| STM32C071R8 | LQFP64 (версия GP) | 64 КБ | 24 КБ | 61 |
| STM32C071R8 | LQFP64 (версия N) | 64 КБ | 24 КБ | 59 |
| STM32C071RB | UFBGA64 (версия N) | 128 КБ | 24 КБ | 59 |
| STM32C071RB | LQFP64 (версия GP) | 128 КБ | 24 КБ | 61 |
| STM32C071RB | LQFP64 (версия N) | 128 КБ | 24 КБ | 59 |
STM32C091 — Cortex-M0+
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C091CB | LQFP48 | 128 КБ | 36 КБ | 45 |
| STM32C091CB | UFQFPN48 | 128 КБ | 36 КБ | 45 |
| STM32C091CC | LQFP48 | 256 КБ | 36 КБ | 45 |
| STM32C091CC | UFQFPN48 | 256 КБ | 36 КБ | 45 |
| STM32C091EC | WLCSP24 | 256 КБ | 36 КБ | 28 |
| STM32C091FB | TSSOP20 | 128 КБ | 36 КБ | 28 |
| STM32C091FC | TSSOP20 | 256 КБ | 36 КБ | 28 |
| STM32C091GB | UFQFPN28 | 128 КБ | 36 КБ | 28 |
| STM32C091GC | UFQFPN28 | 256 КБ | 36 КБ | 28 |
| STM32C091KB | LQFP32 | 128 КБ | 36 КБ | 30 |
| STM32C091KB | UFQFPN32 | 128 КБ | 36 КБ | 30 |
| STM32C091KC | LQFP32 | 256 КБ | 36 КБ | 30 |
| STM32C091KC | UFQFPN32 | 256 КБ | 36 КБ | 30 |
| STM32C091RB | LQFP64 | 128 КБ | 36 КБ | 61 |
| STM32C091RC | UFBGA64 | 256 КБ | 36 КБ | 61 |
| STM32C091RC | LQFP64 | 256 КБ | 36 КБ | 61 |
STM32C092 — Cortex-M0+
| Микроконтроллер | Корпус | Флеш-память | ОЗУ | Линий ввода-вывода |
|---|---|---|---|---|
| STM32C092CB | LQFP48 | 128 КБ | 30 КБ | 45 |
| STM32C092CB | UFQFPN48 | 128 КБ | 30 КБ | 45 |
| STM32C092CC | LQFP48 | 256 КБ | 30 КБ | 45 |
| STM32C092CC | UFQFPN48 | 256 КБ | 30 КБ | 45 |
| STM32C092EC | WLCSP24 | 256 КБ | 30 КБ | 28 |
| STM32C092FB | TSSOP20 | 128 КБ | 30 КБ | 28 |
| STM32C092FC | TSSOP20 | 256 КБ | 30 КБ | 28 |
| STM32C092GB | UFQFPN28 | 128 КБ | 30 КБ | 28 |
| STM32C092GC | UFQFPN28 | 256 КБ | 30 КБ | 28 |
| STM32C092KB | LQFP32 | 128 КБ | 30 КБ | 30 |
| STM32C092KB | UFQFPN32 | 128 КБ | 30 КБ | 30 |
| STM32C092KC | LQFP32 | 256 КБ | 30 КБ | 30 |
| STM32C092KC | UFQFPN32 | 256 КБ | 30 КБ | 30 |
| STM32C092RB | LQFP64 | 128 КБ | 30 КБ | 61 |
| STM32C092RC | UFBGA64 | 256 КБ | 30 КБ | 61 |
| STM32C092RC | LQFP64 | 256 КБ | 30 КБ | 61 |
Перед разводкой платы сверяйте выводы с даташитом своего исполнения: в нём указаны допустимые напряжения на выводах, токи и номиналы внешних компонентов.
Частые вопросы
Чем отличаются STM32C011, C031, C051, C071, C091 и C092?
По таблице 1 RM0490 у старших линеек добавляется периферия: SPI2, I2C2 и 32-битный TIM2 — начиная с STM32C051; USB с генератором HSIUSB48 и блоком подстройки CRS — только у STM32C071; USART3, USART4 и TIM15 — у C091 и C092; контроллер FDCAN — только у STM32C092. Кроме того, растут объём памяти и число выводов в корпусах.
Почему у STM32C0 нет PLL?
Системную частоту у STM32C0 выбирают из LSI, LSE, HSE, HSIUSB48 (у C071) и HSISYS — частоты встроенного генератора HSI48 на 48 МГц, поделённой на 1…128 (RM0490, разд. 6.2.6). Максимум для ядра — 48 МГц, и его даёт сам HSI48, поэтому умножитель частоты не нужен. После сброса ядро работает от HSISYS.
Можно ли использовать вывод NRST у STM32C0 как порт?
Да: вывод называется PF2-NRST, и полем NRST_MODE в байте опций его переводят в режим GPIO. Новый режим включается после следующей загрузки байтов опций, а сброс тогда приходит только от внутренних источников (RM0490).
Как работают выводы, к которым подключено несколько линий порта?
В маленьких корпусах STM32C0 к одному выводу подключено по нескольку линий, например PB7 и PB8. Регистр SYSCFG_CFGR3 выбирает, какая из них работает: у C011, C031 и C071 остальные линии этого вывода принудительно становятся цифровыми входами, у C051, C091 и C092 у них отключается выходной буфер. Выбор действует, пока в байте опций установлен бит SECURE_MUXING_EN — по умолчанию он установлен (RM0490, разд. 9.1.3).
Что такое версии GP и N у STM32C071?
Это два варианта разводки STM32C071 в одном корпусе. По даташиту DS14693 у версии N есть вывод VDDIO2 — отдельное питание части линий ввода-вывода, — а у версии GP на его месте линия порта: например, в корпусе LQFP32 вывод 20 — это PC6 у версии GP и VDDIO2 у версии N. В базе ST обозначения версии N кончаются буквой N: STM32C071K8TxN.
Смотрите также
- STM32Распиновки по корпусам, альтернативные функции, похожие по выводам МК
- STM32G0Cortex-M0+, до 64 МГц: G030–G0B0 Value line, G031–G0C1 — линейки и распиновки
- STM32F0Cortex-M0, до 48 МГц: F030/F070, F031–F091, F042/F072, F0x8 — линейки и распиновки
- Таймер AVR и STM32Предделитель, OCRnA, PSC и ARR под частоту
- Скорость UARTUBRR, BRR, TH1 и ошибка скорости
- CAN FDКадр, BRS и фаза данных, DLC до 64 байт, CRC, ISO и non-ISO
- USBСкорости, распиновка Type-A, Micro-B и Type-C, питание, CC, USB PD