Перейти к содержанию

ESP32 или STM32: что выбрать для проекта

ESP32 берут, когда устройству нужен Wi-Fi или Bluetooth в самом чипе и много памяти. STM32 — когда важнее 5-вольтовые входы, сон в десятки микроампер с сохранением ОЗУ, точный АЦП и скромное питание. Ниже — четыре популярных чипа рядом, по таблицам Espressif и ST, и порядок вопросов, который приводит к выбору.

Обновлено Редакция GAW

ESP32 и STM32 — не два конкурирующих чипа, а два семейства с разной задачей. Espressif делает систему на кристалле с радио: процессор, Wi-Fi, Bluetooth и сотни килобайт ОЗУ, программа — во внешней флеш-памяти. ST делает микроконтроллеры Arm Cortex-M с флеш-памятью в кристалле и богатой аналоговой и силовой периферией, радио — только в отдельных линейках. Поэтому вопрос «что лучше» имеет смысл только для конкретной задачи. Короткий ответ на вопрос «чем они отличаются» для пары STM32F103C8 и ESP32 — на странице «Чем отличается STM32 от ESP32?»; здесь — сравнение по критериям и правила выбора.

Коротко

Радио
Wi-Fi и Bluetooth есть только у ESP32
5 В на входе
STM32: выводы FT до 5,5 В; ESP32 — до VDD + 0,3 В
Сон с ОЗУ
STM32F103 Stop 14 мкА, ESP32 Light-sleep 0,8 мА
АЦП
STM32 ±4…5 LSB, ESP32 после калибровки ±5…60 мВ
ОЗУ
ESP32 520 КБ, ESP32-S3 512 КБ, STM32F411 128 КБ
Передача Wi-Fi
ESP32 240 мА тип., ESP32-S3 340 мА пик

Четыре чипа рядом

Сравниваем чипы, которые чаще всего стоят на любительских платах: классический ESP32 (платы вроде ESP32-DevKitC), ESP32-S3, STM32F103C8 с Blue Pill и STM32F411CE с Black Pill (в атласе у STM32F411CC и STM32F411CE в корпусе UFQFPN48 одна общая страница: они различаются только объёмом флеш-памяти, 256 и 512 КБ). Все числа — из даташитов (номера таблиц — в источниках). Токи — типовые при 25 °C; напряжение питания указано в строке: у ESP32 и STM32F103 это 3,3 В, а у STM32F411 ST приводит таблицы при 1,7 и 3,6 В, и мы берём 3,6 В как ближайшее к рабочему.

ESP32ESP32-S3STM32F103C8STM32F411CE
Ядро, частотаXtensa LX6, 1 или 2 ядра, до 240 МГцXtensa LX7, 2 ядра, до 240 МГцCortex-M3, до 72 МГцCortex-M4 с FPU, до 100 МГц
ОЗУ520 КБ (+ PSRAM в корпусе у ESP32-D0WDRH2-V3)512 КБ (+ PSRAM в части версий)20 КБ128 КБ
Флеш-память для программывнешняя микросхема (у ESP32-U4WDH — 4 МБ в корпусе), через кэшвнешняя или в корпусе, через кэш64 КБ в кристалле512 КБ в кристалле
GPIO34, из них 6 только вход4537 (LQFP48)36 (UFQFPN48)
Питание2,3 или 3,0–3,6 В, источник от 0,5 А3,0–3,6 В, источник от 0,5 А2,0–3,6 В1,7–3,6 В
Вход 5 Внет: до VDD + 0,3 Внет: до VDD + 0,3 Ввыводы FT до 5,5 Ввыводы FT до 5,5 В
РадиоWi-Fi b/g/n, Bluetooth 4.2 BR/EDR и LEWi-Fi b/g/n, Bluetooth 5 LEнетнет
USBнетOTG Full Speed + USB Serial/JTAGустройство Full SpeedOTG Full Speed
CANTWAI, CAN 2.0TWAI, CAN 2.0CAN 2.0Bнет
АЦП12 бит, до 18 каналов, INL ±12 LSB12 бит, до 20 каналов, INL ±8 LSB2 × 12 бит, 10 каналов, TUE ±5 LSB макс.12 бит, 10 каналов, TUE ±4 LSB макс.
ЦАП2 × 8 битнетнетнет
Ток в работе30–68 мА (240 МГц, 2 ядра, радио выкл.)66,2 / 81,3 мА (240 МГц, 2 ядра, периферия выкл. / вкл.)27 / 36 мА (72 МГц, периферия выкл. / вкл.), 3,3 В11,6 / 20,7 мА (100 МГц, периферия выкл. / вкл.), 3,6 В
Ток при передаче Wi-Fi 802.11b, 3,3 В, 25 °C240 мА типовой при заполнении 50 % (+19,5 дБм)340 мА пиковый при заполнении 100 % (21 дБм)——
Сон с сохранением ОЗУLight-sleep 0,8 мАLight-sleep 240 мкАStop 14 мкАStop 10–43 мкА, 3,6 В
Глубокий сон с таймеромDeep-sleep 10 мкАDeep-sleep 7–8 мкАStandby 3,2 мкА (LSI вкл., IWDG выкл.) или 3,4 мкА (LSI и IWDG вкл.), без тока RTCStandby 2,8 мкА (LSE и RTC), 3,6 В
Температура окружающей среды−40…+125 °C (без памяти в корпусе)−40…+105 °C (без памяти в корпусе)−40…+85 или +105 °C−40…+85, +105 или +125 °C

Как читать строки тока. У ESP32 режим Modem-sleep — процессор работает, радио выключено; это ближайший аналог режима Run у STM32, но тестовые программы у Espressif и ST разные, поэтому сравнивайте порядок величин, а не проценты. У STM32F411 в режиме Stop ток зависит от того, усыплена ли флеш-память: с малопотребляющим стабилизатором это 43,1 мкА, если она в режиме Stop, и 14 мкА, если в Deep power down; ещё меньше — 10 мкА — со стабилизатором пониженного напряжения (Low power low voltage) при флеш-памяти в Deep power down (табл. 28 DS10314).

Как выбрать между ESP32 и STM32: порядок вопросовШесть вопросов по порядку. Нужен Wi-Fi или Bluetooth Classic — ESP32. Иначе: сигналы 5 В прямо на выводы — STM32 с выводами FT. Иначе: батарея и сон с сохранением ОЗУ — STM32 в режиме Stop: 14 мкА у STM32F103, 10–43 мкА у STM32F411. Иначе: точный АЦП во всём диапазоне до 3,3 В — STM32. Иначе: нужно больше 128 КБ ОЗУ — ESP32-S3. Иначе: слабый источник питания, например CR2032 или токовая петля, — STM32, потому что ESP32 нужен источник от 0,5 А. Если ни одно условие не выполнено, подходят оба, решает периферия по таблице.Нужен Wi-Fi или Bluetooth Classicв самом чипе?ESP32(Classic — только ESP32)данетСигналы 5 В подаютсяпрямо на выводы?STM32выводы FT до 5,5 ВданетБатарея и сон с сохранением ОЗУи регистров?STM32: StopF103 14 мкА, F411 10–43 мкАданетАЦП с ошибкой в единицы мВво всём диапазоне 0–3,3 В?STM32TUE ±4…5 LSBданетНужно больше 128 КБ ОЗУ:буферы, дисплей, звук?ESP32-S3512 КБ SRAMданетСлабый источник питания:CR2032, токовая петля?STM32ESP32 нужно от 0,5 АданетПодходят оба:решает периферия по таблице
Порядок вопросов при выборе: первое «да» даёт ответ

Радио: главный водораздел

У STM32F103 и STM32F411 радио нет: связь — по проводам или через внешний модуль. У ESP32 Wi-Fi и Bluetooth в кристалле, и стек протоколов Espressif даёт вместе с фреймворком ESP-IDF. Классический ESP32 поддерживает Bluetooth 4.2 BR/EDR — то есть Classic, с голосовыми каналами SCO/eSCO и аудиокодеками CVSD и SBC (раздел Features даташита); у ESP32-S3 только Bluetooth LE. Если нужен Bluetooth Classic, выбор однозначен — классический ESP32.

Если же устройству нужно только BLE или сеть 802.15.4, у ST есть беспроводные линейки, например STM32WB; их сравнение с чипами Espressif — тема отдельной статьи, а обзор радиотехнологий — в статье «Беспроводные технологии для микроконтроллеров».

5 В на выводах

У ESP32 и ESP32-S3 высокий уровень на входе — не выше VDD + 0,3 В (табл. 5-3 и 5-4 даташитов), то есть около 3,6 В при питании 3,3 В. Модуль с выходом 5 В — HC-SR04, старый ЖК-индикатор с питанием 5 В, выход Arduino — подключают через делитель или преобразователь уровней. У STM32F103 и STM32F411 большинство выводов имеет структуру FT и выдерживает до 5,5 В при питании от 2 до 3,6 В (табл. 9 DS5319, табл. 14 DS10314). Входы АЦП это не касается: на них нельзя подавать больше напряжения аналогового питания. Какие именно выводы FT, показано на страницах атласа и в статье «Толерантность к 5 В».

Питание и сон

Ток при передаче. При передаче Wi-Fi 802.11b ESP32 потребляет 240 мА — это типовое значение, измеренное при заполнении 50 % (табл. 5-4), а у ESP32-S3 Espressif даёт пиковое значение 340 мА при заполнении 100 % (табл. 5-7); условия разные, поэтому сравнивать эти числа напрямую нельзя. Espressif требует источник не меньше 0,5 А. Стабилизатор на 150 мА, батарейка CR2032 или токовая петля 4–20 мА такой бросок не выдержат. STM32F103 на 72 МГц со всей включённой периферией берёт 36 мА — его можно питать от линейного стабилизатора в SOT-23.

Сон с сохранением ОЗУ. Из этого режима устройство продолжает программу с того же места, а не начинает её заново. У STM32F103 это Stop — 14 мкА с малопотребляющим стабилизатором, у ESP32 — Light-sleep, 0,8 мА, то есть в 57 раз больше (наш расчёт: 800 / 14). У ESP32-S3 Light-sleep — 240 мкА, всё ещё в 17 раз больше Stop STM32F103.

Глубокий сон. В Deep-sleep ESP32 сохраняет только память RTC, а при пробуждении программа начинается заново: 10 мкА у ESP32 и 7–8 мкА у ESP32-S3. Standby STM32 тоже сбрасывает ядро; с часами на кварце 32 кГц STM32F411 потребляет 2,8 мкА (при 3,6 В). У STM32F103 таблица Standby (3,2 мкА с генератором LSI, 3,4 мкА — ещё и со сторожевым таймером IWDG) не включает часы: ток домена резервного питания с кварцем LSE и RTC ST даёт отдельно — 1,4 мкА при 3,3 В (табл. 16 DS5319). Для датчика, который раз в 10 минут меряет и отправляет данные по Wi-Fi, средний ток определяет не сон, а сеанс связи — посчитайте его в калькуляторе тока ESP32 во сне и времени работы от батареи.

АЦП

У STM32 АЦП — 12-разрядный SAR, ST нормирует его полную нескорректированную ошибку: у STM32F103 — не больше ±5 LSB (табл. 50 DS5319), STM32F411 — ±4 LSB при 18 МГц (табл. 66 DS10314). При опорном 3,3 В один LSB — 0,81 мВ, так что это ±4,0 и ±3,2 мВ во всём диапазоне от 0 до 3,3 В (наш расчёт).

У ESP32 нелинейность INL — до ±12 LSB, разброс между чипами без калибровки — ±6 %, а после калибровки по eFuse ошибка от ±23 мВ в диапазоне 100–950 мВ до ±60 мВ в диапазоне 150–2450 мВ (табл. 4-3 и 4-4). У ESP32-S3 лучше: ±5 мВ до 850 мВ и ±50 мВ до 2900 мВ (табл. 5-6). У обоих каналы ADC2 конфликтуют с Wi-Fi: у ESP32-S3 это прямо сказано в разд. 4.2.2.1 даташита, подробности для ESP32 — в статье «АЦП ESP32». Если нужна точность единиц милливольт во всём диапазоне — STM32 или внешний АЦП; про внутренний АЦП STM32 — в отдельной статье.

Память и вычисления

ОЗУ у ESP32 — 520 КБ, у ESP32-S3 — 512 КБ плюс PSRAM в части версий; у STM32F411 — 128 КБ, у STM32F103 — 20 КБ. Веб-сервер, TLS, буфер кадра дисплея, звук — задачи для ESP32-S3. Зато программа STM32 исполняется из флеш-памяти в кристалле, а у ESP32 — из флеш-памяти вне кристалла (внешней или, у ESP32-U4WDH, в корпусе) через кэш (разд. 4.1.3 даташита ESP32): код, который должен выполняться за предсказуемое время, например обработчик прерывания во время записи во флеш-память, приходится переносить в ОЗУ.

Производительность Espressif и ST указывают разными тестами: ESP32 на двух ядрах при 240 МГц — 1079,96 CoreMark, ESP32-S3 — 1329,92 CoreMark; STM32F103 — 1,25 DMIPS/МГц, STM32F411 — 125 DMIPS. Пересчитывать одно в другое нельзя, но порядок ясен: для вычислений ESP32-S3 быстрее, а STM32F411 с FPU — быстрее STM32F103.

Периферия для управления

STM32F103 и STM32F411 имеют таймер управления двигателем TIM1 с комплементарными выходами и мёртвым временем, у ESP32 и ESP32-S3 для этого есть блоки Motor PWM (MCPWM). CAN-контроллер — у STM32F103 (CAN 2.0B), ESP32 и ESP32-S3 (TWAI); у STM32F411 его нет. В любом случае к шине нужен трансивер, например TJA1050. USB-устройство — у STM32F103, STM32F411 и ESP32-S3, у классического ESP32 USB нет: прошивка и консоль — через мост USB–UART на плате. Ethernet MAC из четырёх чипов есть только у ESP32.

Среда разработки

Основной фреймворк Espressif — ESP-IDF, и он построен на операционной системе FreeRTOS: ESP-IDF сам запускает планировщик, а программа начинается с функции app_main, которая работает как задача. Версия ESP-IDF FreeRTOS основана на FreeRTOS v10.5.1 и поддерживает два ядра (раздел FreeRTOS Overview руководства ESP-IDF v6.1). У STM32 программу можно писать и без ОС — на регистрах, LL или HAL (сравнение — в статье «HAL, LL или регистры»), — и с любой RTOS. Оба семейства поддерживаются в Arduino и PlatformIO.

Правила выбора

  1. Нужен Wi-Fi или Bluetooth Classic — ESP32 (Classic — только классический ESP32). Если при этом нужны 5-вольтовые входы или точный АЦП, ставят ESP32 как радиомодуль рядом со STM32 и связывают их по UART или SPI.
  2. Сигналы 5 В идут прямо на выводы и преобразователи уровней ставить нельзя — STM32 с выводами FT.
  3. Батарея и частые пробуждения с сохранением ОЗУ — STM32 в режиме Stop: 14 мкА у STM32F103 и 10–43 мкА у STM32F411 против 240–800 мкА в Light-sleep у ESP32.
  4. АЦП с ошибкой в единицы милливольт во всём диапазоне — STM32.
  5. Нужно больше 128 КБ ОЗУ — буферы, дисплей, звук, TLS — ESP32-S3.
  6. Слабый источник питания — CR2032, токовая петля, маломощный стабилизатор — STM32: ESP32 требует источник от 0,5 А.
  7. Если ни одно условие не выполнено, подходят оба: сравните периферию по таблице и выберите то, для чего уже есть плата, отладчик и опыт.

Типичные ошибки

  • Сравнивать «ESP32» и «STM32» как два чипа. Внутри семейств разброс огромный: у STM32 есть линейки с радио, у ESP32 — без Bluetooth Classic. Сравнивайте конкретные номера.
  • Питать ESP32 от стабилизатора на 100–150 мА. При подключении к Wi-Fi напряжение просаживается, срабатывает сброс по питанию, и плата перезагружается по кругу.
  • Ждать от АЦП ESP32 точности STM32. Без калибровки разброс между чипами — ±6 %, а вблизи верхней границы диапазона ошибка растёт.
  • Подавать 5 В на вход АЦП STM32. Выводы FT выдерживают 5 В только в цифровом режиме; аналоговый вход ограничен питанием.
  • Считать, что Deep-sleep ESP32 — это пауза. Из Deep-sleep программа начинается сначала; сохранить состояние можно только в памяти RTC или во флеш-памяти.

Частые вопросы

Что лучше для умного дома с Wi-Fi: ESP32 или STM32?

Если устройство само подключается к роутеру, проще ESP32: Wi-Fi уже в чипе, а у STM32F103 и STM32F411 радио нет. STM32 оставляют там, где рядом с Wi-Fi нужны 5-вольтовые входы или CAN без лишних микросхем: тогда ESP32 ставят как радиомодуль, а STM32 управляет остальным.

Можно ли подключить датчик на 5 В к ESP32 напрямую?

Нет. По табл. 5-3 даташита ESP32 и табл. 5-4 даташита ESP32-S3 высокий уровень на входе не должен превышать VDD + 0,3 В, то есть около 3,6 В при питании 3,3 В. Нужен делитель или преобразователь уровней. У STM32F103 и STM32F411 выводы FT выдерживают до 5,5 В при питании от 2 до 3,6 В.

Кто меньше потребляет во сне: ESP32 или STM32?

Зависит от режима. С сохранением ОЗУ STM32 экономичнее: Stop у STM32F103 — 14 мкА при 3,3 В, а Light-sleep у ESP32 — 0,8 мА, у ESP32-S3 — 240 мкА. В самом глубоком сне с пробуждением по таймеру разница меньше: Standby STM32F411 с часами — 2,8 мкА, Deep-sleep ESP32-S3 — 7–8 мкА, ESP32 — 10 мкА.

У какого чипа АЦП точнее?

У STM32. По даташитам ST полная нескорректированная ошибка у STM32F103 — не больше ±5 LSB, у STM32F411 — не больше ±4 LSB, при опорном 3,3 В это около ±4 и ±3 мВ во всём диапазоне (наш расчёт). У ESP32 после калибровки ошибка от ±23 до ±60 мВ в зависимости от ослабления, у ESP32-S3 — от ±5 до ±50 мВ, и диапазон измерения заканчивается ниже питания.

Можно ли поставить ESP32 и STM32 в одно устройство?

Да, это обычная схема: STM32 опрашивает датчики, управляет двигателями и работает с 5-вольтовыми сигналами, а ESP32 подключается к сети и обменивается с ним по UART или SPI. Так каждая микросхема делает то, что у неё сильнее, а сбой сетевой части не останавливает управление.

Источники

  1. Espressif Systems. ESP32 Series Datasheet, version 5.3 — Features: одно или два ядра Xtensa LX6 до 240 МГц, 520 КБ SRAM; табл. 1-1 (ESP32 Series Comparison) — у ESP32-U4WDH флеш-память 4 МБ в корпусе, у ESP32-D0WDRH2-V3 — PSRAM в корпусе; 34 GPIO (шесть только на вход), АЦП 12 бит до 18 каналов, два ЦАП 8 бит, Ethernet MAC, TWAI (CAN 2.0), Motor PWM, Bluetooth 4.2 BR/EDR и LE; разд. 4.1.3 — внешняя флеш-память QSPI через кэш; табл. 4-2 — Modem-sleep 240 МГц, два ядра — 30–68 мА, Light-sleep 0,8 мА, Deep-sleep с таймером RTC и памятью RTC 10 мкА; табл. 4-3 — DNL ±7, INL ±12 LSB; табл. 4-4 — ошибка после калибровки ±23…±60 мВ; табл. 5-2 — питание 2,3 или 3,0–3,6 В, источник от 0,5 А, −40…+125 °C (у чипов без памяти в корпусе); табл. 5-3 (3,3 В, 25 °C) — VIH не выше VDD + 0,3 В; табл. 5-4 — передача 802.11b +19,5 дБм 240 мА
  2. Espressif Systems. ESP32-S3 Series Datasheet, version 2.2 — Features: два ядра Xtensa LX7 до 240 МГц, 512 КБ SRAM, 45 GPIO, USB OTG Full Speed и USB Serial/JTAG, TWAI, два MCPWM, АЦП 12 бит до 20 каналов, Bluetooth 5 (LE); табл. 1-1 — −40…+105 °C без памяти в корпусе; разд. 4.2.2.1 — каналы ADC2 нельзя использовать одновременно с Wi-Fi; табл. 5-2 — питание 3,0–3,6 В, источник от 0,5 А; табл. 5-4 — VIH не выше VDD + 0,3 В; табл. 5-5 — DNL ±4, INL ±8 LSB, 100 тыс. отсчётов/с; табл. 5-6 — ошибка после калибровки ±5…±50 мВ; табл. 5-7 — пик передачи 802.11b 21 дБм 340 мА при 3,3 В, 25 °C; табл. 5-9 — 240 МГц, два ядра, 32-разрядный код — 66,2 / 81,3 мА; табл. 5-10 — Light-sleep 240 мкА, Deep-sleep 7–8 мкА
  3. STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319 Rev 20, July 2025) — с. 1 — Cortex-M3 72 МГц, 64 или 128 КБ флеш-памяти, 20 КБ SRAM, два АЦП 12 бит по 1 мкс, USB 2.0 Full Speed, CAN 2.0B, таймер управления двигателем с мёртвым временем; табл. 2 — 37 GPIO и 10 каналов АЦП у STM32F103Cx, питание 2,0–3,6 В; табл. 9 — вход FT до 5,5 В при 2 В < VDD ≤ 3,6 В, −40…+85 °C (суффикс 6) или +105 °C (суффикс 7); табл. 16 — Stop 24 / 14 мкА (основной / малопотребляющий стабилизатор), Standby 2 мкА (всё выкл.), 3,2 мкА (LSI вкл.), 3,4 мкА (LSI и IWDG вкл.) при 3,3 В, домен резервного питания с LSE и RTC 1,4 мкА; табл. 17 — 72 МГц из флеш-памяти 36 / 27 мА (вся периферия включена / выключена), 25 °C, 3,3 В; табл. 50 — TUE ±2 тип., ±5 LSB макс.
  4. STMicroelectronics. STM32F411xC, STM32F411xE datasheet (DS10314 Rev 8, January 2024) — с. 1 — Cortex-M4 с FPU до 100 МГц, до 512 КБ флеш-памяти, 128 КБ SRAM, USB OTG Full Speed, АЦП 12 бит 2,4 млн отсчётов/с; табл. 2 — 36 GPIO и 10 каналов АЦП в 48-выводном корпусе, питание 1,7–3,6 В, −40…+85/105/125 °C; табл. 14 — вход FT до 5,5 В при 2 В ≤ VDD ≤ 3,6 В; табл. 23 — 100 МГц из флеш-памяти 20,7 / 11,6 мА (периферия включена / выключена), 3,6 В, 25 °C; табл. 28 — Stop с малопотребляющим стабилизатором 43,1 мкА (флеш-память в Stop) и 14 мкА (флеш-память в Deep power down), с малопотребляющим стабилизатором пониженного напряжения (Low power low voltage) — 10 мкА, 3,6 В, 25 °C; табл. 30 — Standby 2,1 мкА, с LSE и RTC 2,8 мкА; табл. 66 — TUE ±3 тип., ±4 LSB макс. при fADC = 18 МГц
  5. Espressif Systems. ESP-IDF Programming Guide v6.1: FreeRTOS Overview — ESP-IDF FreeRTOS — реализация на основе FreeRTOS v10.5.1 с поддержкой двух ядер (SMP), вариант по умолчанию; ESP-IDF запускает FreeRTOS сам, точка входа приложения — app_main в отдельной задаче

Нашли ошибку?