Zavod.devсоздан инженерами для инженеров
Тренды

STM32: с чего начать — ST-Link, CubeMX и HAL без каши в терминологии

«Программирование STM32» (1 616), «STM32 HAL» (1 096), «STM32 Cube» (1 625), «ST-Link» (суммарно ~3 400) — новичок тонет в трёх разных инструментах с похожими названиями, не понимая, что каждый делает. Разбираем по ролям.

Инженеры Zavod.dev · 2026-07-26 · по материалам 1 источников

Три разные вещи, которые путают чаще всего

**ST-Link** — не софт, а физический программатор/отладчик (встроен на платах Nucleo/Discovery или отдельным модулем). Передаёт прошивку с компьютера на чип через SWD и позволяет ставить breakpoints во время выполнения — без него залить код на «голый» STM32 нельзя, в отличие от Arduino со встроенным UART-загрузчиком. **STM32CubeMX** — графический конфигуратор периферии: кликами настраивают тактирование, пины, таймеры, UART/SPI/I2C, и генерирует стартовый C-проект под выбранную IDE. Это не среда разработки, а генератор шаблона. **HAL (Hardware Abstraction Layer)** — библиотека, которую генерирует CubeMX: единый API (`HAL_UART_Transmit()`, `HAL_GPIO_WritePin()`) поверх разных серий STM32, чтобы код не переписывать при смене чипа. Есть более низкоуровневая альтернатива LL (Low Layer) — быстрее, но без кроссплатформенности между сериями.

Минимальный путь от чипа до мигающего светодиода

1) Подключить ST-Link к SWD-выводам платы (SWDIO, SWCLK, GND, при необходимости 3.3V/NRST). 2) В CubeMX выбрать конкретный чип, не серию — периферия отличается даже внутри одной линейки. 3) Настроить тактирование (Clock Configuration) — частая ошибка новичков: не включить нужный источник тактирования для конкретного периферийного блока, тогда он молча не работает. 4) Сгенерировать проект под STM32CubeIDE (бесплатная, Eclipse-based редактор + отладчик + сам CubeMX). 5) Прошить через встроенный в CubeIDE интерфейс ST-Link — отдельный загрузчик не нужен.

Частые причины «не работает» на старте

Забыт `HAL_Init()` или он вызван после переинициализации тактирования — часть периферии зависит от порядка вызовов, которые CubeMX генерирует автоматически, но ломаются при ручной правке `main.c` вне user-code-секций. Правки кода вне `/* USER CODE BEGIN */.../* USER CODE END */` — при повторной генерации из CubeMX всё вне этих меток перезатирается. NRST не подтянут — на самодельных платах без готового модуля забывают подтягивающий резистор на выводе сброса, чип не выходит из reset.

Подборки в каталоге

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

HAL медленнее и тяжелее по флеш-памяти из-за универсальности между сериями. Переходить на LL стоит, когда критична скорость реакции (плотные ISR, высокочастотный ШИМ) или память чипа мала (младшие линии STM32F0/G0).