Использование экосистемы STMicroelectronics: подключение датчиков к STM32G4
2 ноября 2020
Святослав Зубарев (г. Смоленск)
В статье описаны основные составляющие экосистемы STMicroelectronics для работы с микроконтроллерами STM32, а также приведен пример ее практического применения: создание проекта на базе STM32G4 с подключением датчиков и использованием отладочной платы NUCLEO-G474RE и платы расширения X-NUCLEO-IKS01A2.
Основные разделы статьи:
Когда речь идет о компании STMicroelectronics, первое, что приходит на ум – это 32-битные микроконтроллеры STM32.
Однако STM – это не только микроконтроллеры и электронные компоненты, но и целая экосистема, включающая в себя все необходимые инструменты для полноценной разработки приложений (рисунок 1):
- Отладочные платы и платы расширения,
- Фирменные библиотеки HAL, LL, SPL, middleware и практические примеры их использования,
- Программаторы ST-LINK,
- Комплекты документации и примеры программного кода,
- Вспомогательное ПО,
- Интегрированная среда разработки (IDE) STM32CubeMX.
Данная статья посвящена практическому применению экосистемы в проекте на базе нового семейства микроконтроллеров общего назначения – STM32G4.

Рис. 1. Экосистема STMicroelectronics
Выбор МК и отладочной платы
Прошло более 8 лет с момента выпуска на рынок STM32F3 – первого на тот момент семейства микроконтроллеров со смешанными сигналами на базе ядра Cortex-M4. За это время произошли значительные изменения как в технологии, так и в методах изготовления компонентов. Сейчас STMicroelectronics выпускает различные по специализации семейства микроконтроллеров STM32 (рисунок 2).
При создании каждого нового семейства используются наиболее удачные решения и функции из предыдущих, а также осваиваются новые техпроцессы. При этом производство старых семейств не останавливается, что гарантирует поддержку уже созданных на их базе изделий. Так, в январе 2020 компания STMicroelectronics еще на 10 лет продлила гарантию выпуска микроконтроллеров STM32F3, начав при этом параллельное производство и выпуск нового, более совершенного семейства микроконтроллеров общего назначения – STM32G4.
Микроконтроллеры STM32G4
Микроконтроллеры семейства STM32G4 построены на базе процессорного ядра ARM Cortex-M4 и способны работать на частоте до 170 МГц, обеспечивая при этом производительность на уровне до 213 DMIPS и 550 CoreMark, что более в чем два раза превышает аналогичные параметры предшествующего семейства STM32F3 с производительностью на уровне 90 DMIPS и 245 CoreMark соответственно. Столь существенный прирост во многом достигается благодаря увеличению частоты работы, что, в свою очередь, стало возможным благодаря применению более совершенного 90 нм техпроцесса. Также стоит отметить степень влияния встроенного аппаратного ускорителя ART, который позволяет пропорционально увеличить производительность при выполнении кода из Flash-памяти.
К другим преимуществам STM32G4 перед STM32F3 можно отнести:
- Уменьшенное потребление (160 мкA/МГц), что примерно в 2,7 раза ниже, чем в семействе F3,
- CCM SRAM,
- 1% RC точность в температурном диапазоне -5…90°C, 2% для всего диапазона,
- Обновленный ОУ, ЦАП, компаратор,
- Новый функционал HR-таймера (184 пс),
- USB type C с функцией Power Delivery, CAN-FD,
- Два банка Flash,
- HW криптография AES,
- Проверка четности SRAM,
- Новые 128- и 80-выводные корпуса (LQFP).
На сегодняшний день в семейство STM32G4 входят три линейки микроконтроллеров (рисунок 3):
- STM32G4x1 Access line – стартовая линейка с базовым набором периферии;
- STM32G4x3 Performance line – линейка с расширенным набором аналоговой и цифровой периферии;
- STM32G4x4 Hi-resolution line – аналогично предыдущему плюс таймер повышенного разрешения HRTIM.

Рис. 3. Модели микроконтроллеров STM32G4
После того как мы определились с семейством микроконтроллеров, наиболее простым средством подбора конкретной модели и отладочных наборов для знакомства с ее возможностями или создания опытного образца устройства является приложение ST MCU Finder.
ST MCU Finder
ST MCU Finder представляет собой простую мультиплатформенную утилиту, позволяющую подобрать оптимальный контроллер или отладочную плату по заданным критериям. Программа, доступная в виде мобильного приложения в Google Play (ST-MCU-FINDER) в Google Play, а также на сайте STMicroelectronics (ST-MCU-FINDER-PC), оснащена простыми в использовании инструментами для выбора наименований, автоматически обновляющейся документацией и ссылками на профильные сообщества и форумы в сети.
ST-MCU-FINDER позволяет не только подобрать микроконтроллер по заданным параметрам, но и найти все доступные для него отладочные комплекты и расширительные платы. Скажем, для семейства STM32G4 доступны следующие решения (рисунок 4):
- Отладочные платы STM32G4:
- Платы расширения:
Отдельно стоит отметить функцию Close selector, позволяющую подобрать аналог микроконтроллера (рисунок 5). Например, для микроконтроллера STM32G431C6Tx ближайшими аналогами являются сосед по семейству STM32G431C6Ux (совпадение 98%) или представитель другого семейства STM32L552CCUx (совпадение 93%).
Доступен и подбор аналогов среди компонентов STM для решений от других производителей: Infineon, Microchip, NXP и так далее. Результаты поиска можно сохранять и загружать из файла или копировать в буфер обмена для вставки в сторонние программные пакеты: как таблицу – в документ Word.
Вернемся к отладочным платам. Если разработчик имеет дело с МК STM32G4, он может выбирать из трех типов фирменных отладочных плат: DISCOVERY, EVAL и NUCLEO, а также из комплекта плат расширения X-NUCLEO.
NUCLEO
Отладочные наборы NUCLEO относятся к типу наиболее простых в использовании и бюджетных у STMicroelectronics. Платы из данных наборов прекрасно подойдут для начального ознакомления с семейством STM32G4 и тестирования его возможностей. Для быстрого старта компания предоставила свободный доступ ко множеству примеров кода, которые поставляются вместе с библиотеками. Такой доступ можно получить напрямую через ссылку на библиотеку или через программу кодогенератора STM32CubeMX. На текущий момент для работы с STM32G4 доступны три набора плат данного типа: NUCLEO-G431KB, NUCLEO-G431RB и NUCLEO-G474RE. Основные характеристики данных решений приведены в таблице 1.
Таблица 1. Характеристики наборов NUCLEO на базе микроконтроллеров STM32G4
Наименование | Микроконтроллер | Функционал |
---|---|---|
NUCLEO-G431KB | STM32G431 | • Поддержка ARDUINO Nano V3 • Программатор/отладчик STLINK-V3E • Один светодиод пользователя • Одна кнопка сброса • 24 МГц кварцевый генератор (HSE) |
NUCLEO-G431RB | STM32G431RB | • Поддержка ARDUINO Uno V3 • ST разъемы расширения Morpho • Встроенный программатор/отладчик ST-LINK/V2-1 • Один светодиод пользователя, общий с Arduino • Одна кнопка пользователя и одна кнопка сброса • Кварцевый генератор 32,768 кГц |
NUCLEO-G474RE | STM32G474RE | • Один светодиод пользователя • Одна кнопка пользователя и одна кнопка сброса • Кварцевый генератор 32768 кГц LSE, • Встроенный на плату генератор 24 МГц HSE • Поддержка ARDUINO Uno V3 • Встроенный программатор/ отладчик STLINK-V3E |
Discovery
Платы Discovery предназначены для простого ознакомления разработчика с работой и устройством микроконтроллера при минимуме затрат времени. Каждая из них – законченное устройство, полностью готовое к началу работы и обладающее всей необходимой для этого периферией: кнопками, светодиодами, штыревыми колодками и так далее, а также инфраструктурой для демонстрации отличительных характеристик устройств.
Помимо прочего, платы серии Discovery содержат разъемы расширения, которые позволяют взаимодействовать с большинством выводов контроллера и расширять функциональные возможности путем подключения сторонних плат. Если речь идет о STM32G4, разработчику доступны две платы Discovery: B-G474E-DPOW1 и B-G431B-ESC1 (таблица 2).
Таблица 2. Характеристики плат Discovery на базе микроконтроллеров STM32G4
Наименование | Микроконтроллер | Функционал |
---|---|---|
B-G474E-DPOW1 | STM32G474RET6 | • USB Type-C с USB0 FS интерфейсом, совместимым с USB PD3.0 • Мощный RGB-светодиод для яркого освещения • Мощный цифровой buck-boost-конвертер со встроенными резистивными нагрузками • Возможности аудиоусилителя класса D • Четыре светодиода пользователя • Три светодиода для питания и ST-LINK коммуникаций • Джойстик: четыре направления и кнопка выбора • Кнопка сброса • Встроенный программатор/отладчик STLINK-V3E |
B-G431B-ESC1 | STM32G431CB | • Встроенный программатор/отладчик ST-LINK/V2-1 • Электронный регулятор скорости (ESC), предназначенный для привода одиночного трехфазного бесщеточного двигателя (BLDC/PMSM) • Потенциометр и кнопка пользователя |
Evaluation Boards
Отладочные комплекты серии Evaluation Boards предназначены для полного и глубокого ознакомления с работой и особенностями различных линеек контроллеров STM32. Если сравнить Discovery и Evaluation Boards, становится ясно, насколько последние превосходят предыдущую серию в разнообразии периферии: если платы Discovery имели в своем составе только стартовый набор, необходимый для начального ознакомления и отладки работы микроконтроллера, то платы Evaluation Boards обладают большим перечнем дополнительных компонентов, в число которых входят дисплеи, построенные по технологиям TFT, E-Ink и ЖКИ; интерфейсы CAN, USB, Ethernet и так далее; различные разъемы для подключения дополнительной периферии; светодиоды; датчики и многое другое. Для линейки STM32G4 доступны две платы семейства Evaluation: STM32G474E-EVAL, STM32G484E-EVAL (таблица 3).
Таблица 3. Характеристики плат Evaluation Boards на базе микроконтроллеров STM32G4
Наименование | Микроконтроллер | Функционал |
---|---|---|
STM32G474E-EVAL1 | STM32G474 | • Цветной TFT LCD с разрешением 240х320 • 16-гигабайтная карта microSD в комплекте • Встроенная схема измерения тока • SAI-аудиокодек • Датчик температуры • 8-мегабитная SRAM • Две микросхемы 512-мегабит Quad-SPI NOR Flash памяти • Четыре светодиода пользователя • Один светодиод высокой яркости • Кнопки сброса и пробуждения • Джойстик: четыре направления и кнопка выбора • Фоторезистор (LDR) • Потенциометр |
STM32G484E-EVAL | STM32G484QE | • 240×320 TFT цветной LCD • Карта microSD 16 Гбайт в комплекте • Встроенная схема токоизмерения • Аудиокодек SAI • Датчик температуры • 8-Мбит (512 К x 16 бит) SRAM • Два 512-Мбит Quad-SPI NOR Flash-памяти • Четыре цветных светодиода пользователя • Один светодиод высокой яркости • Кнопки сброса и пробуждения • Джойстик: четыре направления и кнопка выбора • Фоторезистор (LDR) • Потенциометр |
Платы расширения X-Nucleo
Функционал отладочных плат Nucleo на базе STM32G4 во многом определяется модулями расширения. Компания STMicroelectronics предлагает широкий перечень таких плат (таблица 4).
Таблица 4. Платы расширения X-Nucleo для комплектов отладки Nucleo на базе STM32G4
Наименование | Описание | Ключевые компоненты |
---|---|---|
X-NUCLEO-GNSS1A1 | Плата расширения с модулем навигации GNSS | Teseo-LIV3F |
X-NUCLEO-IKS01A3 | Оценочная плата на основе MEMS-датчиков: • трехосевой акселерометр + трехосевой гироскоп, • трехосевой магнитометр, • трехосевой линейный акселерометр, • датчик относительной влажности и температуры, • датчик абсолютного давления, • цифровой датчик температуры. |
LSM6DSO, LIS2MDL, LIS2DW12, LPS22HH, HTS221, STTS751 |
X-NUCLEO-IKS01A2 |
Плата расширения для семейства на основе MEMS-датчиков движения и датчиков состояния окружающей среды: |
LSM6DSL, LSM303AGR, LPS22HB, HTS221 |
X-NUCLEO-IKS02A1 |
Плата расширения для семейства на основе MEMS-датчиков: |
ISM330DHCX, IIS2MDC, IIS2DLPC, IMP34DT05 |
X-NUCLEO-NFC04A1 | Плата расширения для работы с метками NFC/RFID | ST25DV04K |
X-NUCLEO-S2868A1 | Плата расширения для работы с радиосигналами на частоте 868 МГц | S2-LP |
X-NUCLEO-S2868A2 | Плата расширения для работы с радиосигналами на частоте 868 МГц | S2-LP |
X-NUCLEO-S2915A1 | Плата расширения для работы с радиосигналами на частоте 915 МГц | S2-LP |
Arduino+ Nucleo
Функционал плат Nucleo можно расширить не только за счет использования фирменных XNucleo-решений, но и путем применения Arduino Shield, что стало возможным благодаря поддержке платами Nucleo модулей Arduino: Nucleo-32 совместимы с Arduino nano, Nucleo-64 и Nucleo-144 способны взаимодействовать с Arduino UnoV3.
Платы Arduino Shield, в свою очередь, можно также разделить на несколько категорий:
Arduino Sensor Shield – платы расширения, позволяющие организовать подключение внешних датчиков. Например, подключение платы, изображенной на рисунке 6, позволяет подключить различные комбинации таких внешних устройств, как датчики, реле, кнопки, потенциометры и так далее.

Рис. 6. Пример платы расширения Arduino Sensor Shield
Arduino Motor Shield дает возможность разработчику подключать к плате обычный двигатель и серводвигатель. Основная задача данного типа плат – обеспечение управления устройствами, потребляющими достаточно высокий для обычной платы Arduino ток. Плата Arduino Motor Shield, в качестве которой выступает Motor Shield L293D, показана на рисунке 7.

Рис. 7. Пример платы расширения Arduino Motor Shield
Arduino Ethernet Shield – платы расширения для организации работы с сетью. На рисунке 8 показан пример такой платы – Ethernet Shield W5100. Данная плата позволяет организовать сеть со скоростью передачи данных до 100 Мбит/с.

Рис. 8. Пример платы расширения Arduino Ethernet Shield
Платы расширения для прототипирования. Данный тип плат служит главным образом для подключения дополнительных дискретных компонентов и имеет простую конструкцию: на платах расположены контактные площадки для монтажа элементов, выведена кнопка сброса и есть возможность подключения внешнего источника питания (рисунок 9).

Рис. 9. Пример платы расширения Arduino для прототипирования
Arduino LCD shield и TFT shield. Данный тип плат служит для упрощения процесса настройки и работы с LCD-экранами (рисунок 10).

Рис. 10. Пример Arduino LCD shield
Arduino Data Logger Shield. Данные платы служат для сохранения данных, полученных с датчиков, с привязкой по времени (рисунок 11).

Рис. 11. Пример платы расширения Arduino Data Logger Shield
Если в проекте STM32 было принято решение об использовании плат Arduino, следует учитывать, что для связки Nucleo и Arduino необходимо наличие специальных библиотек. С этой целью на GitHub был запущен проект STM32duino, который представляет собой набор библиотек. Для этого на GitHub был запущен проект STM32duino, который представляет собой набор библиотек, выполняющих интеграцию процессоров STM32 в Arduino. В настоящий момент в состав STM32duino входят библиотеки и утилиты, которые можно условно разделить на три группы: ядро, библиотеки плат расширения X-NUCLEO и библиотеки датчиков от STMicroelectronics. Подробнее о работе STM32 совместно с Arduino можно прочитать в статье «Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino».
Конфигурация микроконтроллера и отладочной платы
STM32CubeMX
С целью упрощения процесса разработки/конфигурации проекта компания STMicroelectronics разработала специальную графическую среду STM32CubeMX (рисунок 12). STM32CubeMX служит для генерации проектов на базе микроконтроллеров STM32 и позволяет автоматически создавать код на языке С и основу программы посредством использования визуальных утилит. Использование STM32CubeMX значительно упрощает и ускоряет процесс написания функций инициализации, однако главный алгоритм работы пользователю по-прежнему необходимо прописывать самостоятельно.

Рис. 12. Структура программной платформы STM32Cube
STM32CubeMX распространяется бесплатно и поддерживает все существующие модели микроконтроллеров STM32, в том числе STM32G4. STM32CubeMX позволяет настраивать порты ввода-вывода и периферию микроконтроллеров, конфигурировать дерево тактирования, рассчитывать потребление и генерировать проекты с кодом конфигурации для Keil, IAR, STM32CubeIDE, TrueStudio, а также SW4STM32.
Работа с STM32CubeMX состоит из нескольких этапов:
- Выбор микроконтроллера или отладочной платы,
- Настройка выводов, конфигурация системной и общей периферии,
- Настройка дерева тактирования, расчет потребления (если требуется), определение параметров проекта,
- Генерация кода проекта.
Первое, что необходимо сделать при создании нового проекта в STM32CubeMX – это выбрать микроконтроллер или отладочную плату для начала работы. Выбор осуществляется при помощи виджетов MCU Selector или Board Selector. Возможно начать работу уже с готовым примером (рисунок 13).
Если проект создается на базе микроконтроллера (без отладочной платы), подбор конкретной модели в STM32CubeMX можно осуществить при помощи фильтров с указанием желаемых параметров, таких как ядро процессора, корпус, семейство, линейка, доступная периферия и так далее (рисунок 14).
После выбора подходящей модели микроконтроллера разработчику необходимо определить назначение выводов и конфигурацию контроллера на соответствующей вкладке Pinout&Configuration (рисунок 15). При этом выводы могут настраиваться как индивидуально с помощью специальной диаграммы, так и с помощью окна периферии.
Кроме стандартных блоков периферии, можно добавить в проект дополнительные библиотеки для работы со сторонними устройствами и платами расширения. Например – подключить файловую систему FATFS, операционную систему FreeRTOS и так далее (рисунок 16).
Настройка системы тактирования производится с помощью соответствующей вкладки Clock Configuration, при переходе на которою пользователю становится доступно визуализированное дерево тактирования (рисунок 17).
Организация настройки тактирования посредством работы с визуализированным деревом позволяет всего за несколько кликов мыши выбрать источник тактового сигнала системы, источники тактирования периферии, а также задать значение коэффициентов делителей и умножителей, причем последние имеют функцию автоматической подстройки при изменении других параметров, например значения HCLK.
После настройки выводов и конфигурации контроллера, настройки периферии и тактирования можно переходить непосредственно к разделу генерации кода (Project Manager), в котором необходимо задать имя проекта, его путь расположения, а также IDE, в котором данный код будет обрабатываться далее: EWARM (IAR), MDK-ARM (Keil), SW4STM32, TrueSTUDIO, STM32CubeIDE – или сгенерировать Makefile или GPDSC (рисунок 18).
По завершению генерации STM32CubeMX создает С-проект для выбранной IDE. Проект уже содержит весь необходимый код для инициализации выбранной периферии и портов микроконтроллера и готов к дальнейшей работе.
Библиотеки HAL и LL
Выпуск каждого нового семейства микроконтроллеров STMicroelectronics сопровождается поддержкой серии документов и библиотек для работы с ним:
- STM32Snippets – набор высокооптимизированных примеров кода с использованием CMSIS-совместимых регистровых обращений, позволяющих максимизировать производительность микроконтроллеров STM32 в различных приложениях.
- SPL (Standard Peripherals Library) – попытка выпустить одну общую библиотеку для объединения всех процессоров и упрощения переноса кода. Данные библиотеки устарели и не поддерживаются большинством современных микроконтроллеров.
- HAL-драйверы (HAL Drivers) – представляют собой высокоуровневые драйверы, ориентированные главным образом на функциональные возможности периферии. Данные драйверы значительно облегчают работу с периферийными устройствами, упрощая вид их структуры. Немаловажной функцией HAL-драйверов является обеспечение переносимости программного кода между различными линейками микроконтроллеров STM32.
- LL – драйверы низкого уровня, ориентированные на регистры. Их функции точно отражают структуру периферийных устройств на уровне регистров. Использование LL-драйверов требует глубокого знания периферии. Стоит отметить, что LL-драйверы не поддерживают сложные интерфейсы, такие как USB или Ethernet – в случае необходимости их реализации придется прибегнуть к совместному использованию с HAL.
В таблице 5 приведены преимущества использования того или иного типа библиотек.
Таблица 5. Плюсы и минусы использования библиотек для микроконтроллеров STM32
Библиотеки | Переносимость кода | Оптимизация (память и производительность) | Простота в использовании и освоении | Поддержка периферии и интерфейсов |
---|---|---|---|---|
STM32Snippets | +++ | + | ||
Standard Peripherals Library | ++ | ++ | + | +++ |
STM32Cube HAL | +++ | + | ++ | +++ |
STM32Cube LL | + | +++ | + | ++ |
Библиотеки Middleware
Отдельно следует отметить библиотеки Middleware, которые представляют собой ПО среднего уровня, такое как ОС FreeRTOS, FatFS, USB Device, USBPD:
- FreeRTOS – многозадачная операционная система реального времени для встраиваемых систем. FreeRTOS позволяет реализовать установку приоритетов для различных задач, вытесняющую многозадачность, невытесняющую многозадачность, семафоры и очереди. С 2017 года FreeRTOS распространяется под лицензией MIT.
- FatFs – простая файловая система, совместимая с FatFs реализует поддержку файловых систем FAT и exFAT. Библиотека написана на ANSI C и имеет BSD-подобную лицензию. FatFs работает через uSD, RAMDisk, USBDisk.
- USB Device – библиотека для работы с USB
- USBPD – библиотека для работы с USB Power Delivery. В USBPD реализованы:
- Управление политиками устройств: cоглашение по питанию,
- Механика политик: согласование параметров питания, обработка ошибок и их сброс,
- Уровень протокола: формирование и разбор сообщений PD, обработка тайм-аутов и перезапросов.
Разработка ПО
Несмотря на то, что STMicroelectronics предоставляет пользователям специальный софт STM32CubeMX для генерации кода инициализации, основной код программы по-прежнему необходимо прописывать самостоятельно. Здесь на помощь пользователю приходят специальные среды разработки (IDE), такие как: KEIL, IAR, Atollic, Arduino IDE (когда речь идет об использовании плат Arduino), а также STM32CubeIDE. Рассмотрим данные среды более подробно.
Keil MDK
Keil является наиболее комплексной средой разработки для приложений на базе микроконтроллеров ARM. Keil MDK содержит ARM C/C++ компилятор, операционную систему CMSIS-RTOS RTX и среду разработки uVision с отладчиком. Среда распространяется платно, но существует бесплатная ограниченная версия, которую можно скачать с официального сайта после предварительной регистрации (рисунок 19).

Рис. 19. Окно проекта в среде разработки Keil MDK
IAR Workbench
IAR Workbench – многофункциональная среда разработки приложений на языках C, C++ и Assembler . Главные преимущества данной IDE – это достаточно высокая оптимизация генерируемого кода. Пакет IAR включает в себя C/C++ компилятор с поддержкой ANSI, транслятор Assembler, компоновщик, текстовый редактор, настроенный на синтаксис языка Си, симулятор и отладчик в Си и Assembler, менеджер проектов, а также различные дополнительные виджеты. Кроме того, в IAR Embedded Workbench присутствует функция для самостоятельной настройки и оптимизации отдельных модулей проекта, что значительно упрощает процесс отладки, а также позволяет ускорить выполнение программы или уменьшить ее размер (рисунок 20).
Atolic TrueStudio
Не так давно STMicroelectronics заключила сделку по покупке компании Atolic, занимавшейся разработкой IDE TrueStudio, предназначенной для разработки программного обеспечения микроконтроллеров STM32 (рисунок 21). Интерфейс среды TrueStudio достаточно сильно схож с другой IDE – AC6 System Workbench, созданной единолично STMicroelectronics. Это обусловлено тем, что при разработке обеих IDE использовалась платформа Eclipse.
TrueStudio предназначена для работы исключительно с микроконтроллерами STM32 и поддерживает все существующие на данный момент линейки. Также TrueStudio поддерживает работу с большинством отладочных плат производства STMicroelectronics. Преимуществом среды является то, что разработчик может открыть готовые демонстрационные проекты сразу же после установки без скачивания каких-либо дополнительных файлов.
Алгоритмы Atolic TrueStudio были широко использованы в другой IDE компании STMicroelectronics – STM32CubeIDE.
В таблице 6 приведены основные особенности TrueStudio и других популярных сред разработки (Keil MDK, IAR Workbench и STM32CubeIDE).
Таблица 6. Основные особенности Keil MDK, IAR Workbench и Atolic TrueStudio
Производитель | Среда разработки | С/С++ компилятор | Ограничение на бесплатную версию | Программатор- отладчик | Сайт компании |
---|---|---|---|---|---|
Keil | uVision4 (MDK-ARM) |
ARM RealView C/C++ | 32 Кб по компилируемому коду | ULINK-ME ST-LINK | http://www.keil.com/ |
IAR | Embedded Workbench | IAR С/C++ | 32 Кб и полная версия на 30 дней | J-LINK ST-LINK | http://www.iar.com/ |
Atollic | TrueSTUDIO | Eclipse GNU C/C++ | Ограничение по функционалу | ST-LINK | http://www.atollic.com/ |
STMicroelectronics | STM32CubeIDE | GNU C/C++ | – | ST-LINK | https://www.st.com |
Arduino IDE
Отладочные платы Nucleo-64 и Nucleo-144 могут работать совместно с модулями Arduino, в том числе с платами расширения Arduino Sheild.
При написании программ для Arduino используется бесплатная среда Arduino IDE, которую можно скачать на официальном сайте компании. Кроме того, у пользователей есть возможность работы с онлайн-версией данной среды без необходимости установки на персональный компьютер. Arduino IDE легко устанавливается, имеет простой и удобный интерфейс. Внешний вид стартового окна Arduino IDE представлен на рисунке 22.

Рис. 22. Внешний вид стартового окна Arduino IDE
К основным преимуществам использования Arduino IDE стоит отнести следующие:
- Arduino IDE устанавливается с набором примеров, наглядно показывающих принцип написания кода практически для любых сценариев;
- Код программы пишется не на ассемблере или Си, а на упрощенном варианте С++, содержащем в своем составе всего три крупных раздела: функции, структуры, переменные и константы. При включении в проект новые библиотеки также добавляют в него новые функции;
- Упрощенная структура программ. Начальный шаблон проекта состоит всего из двух функций: void setup(), в которой пользователю необходимо провести инициализацию входов/выходов и настроить необходимые интерфейсы, и void loop(), где прописывается основной алгоритм и тело программы;
- Нет необходимости настраивать периферию, задавать тактирование, формировать стек и так далее.
- Возможность свободного скачивания нужных библиотек. Если пользователь пытается использовать функцию, которая отсутствует в проекте, Arduino IDE сообщит ему название недостающей библиотеки.
Однако, несмотря на приведенные плюсы, главным минусом Arduino IDE является довольно ограниченный функционал, связанный, в первую очередь, с низкой производительностью данной платформы в целом.
STM32CubeIDE
Наиболее предпочтительной средой разработки программного кода для микроконтроллеров STM32 является фирменная среда STM32CubeIDE. STM32CubeIDE создана на основе IDE Atollic TrueStudio и STM32CubeMX и сочетает в себе их сильные стороны, а именно – мощный практический функционал первой среды и возможности графической настройки и генерации кода инициализации второй (рисунок 23). STM32CubeIDE дает возможность разработчику сконфигурировать проект, настроить необходимую периферию и задать тактирование микроконтроллера, после чего сгенерировать код инициализации, отредактировать его должным образом, например, добавив несколько функций, и провести компиляцию. Кроме того, среда STM32CubeIDE обладает достаточно продвинутым набором инструментов для отладки и распространяется бесплатно без каких-либо ограничений на использование (в отличии от других IDE, таких как Keil или IAR).
Ключевые особенности STM32CubeIDE:
- Интегрированный STM32CubeMX, который, как описывалось ранее, позволяет осуществить выбор микроконтроллера по параметрам, настроить тактирование, периферию или дополнительное программное обеспечение, создать проект и сгенерировать код инициализации,
- Разработана на базе платформы ECLIPSE/CDT и включает в себя поддержку соответствующих дополнений ECLIPSE, а также компилятор GNU C/C++ и GDB-отладчик,
- Дополнительные возможности для отладки: просмотр регистров периферии, ядра и памяти, системный анализ и отслеживание в реальном времени (SWV), функции, дающие возможность производить анализ ошибок процессора,
- Присутствует поддержка ST-LINK и J-Link,
- Возможность импортирования проектов из Atollic TrueStudio и AC6 System Workbench STM32,
- Возможность работы на операционных системах Windows, Linux и macOS.
Создание проекта в STM32CubeIDE является несложной задачей, особенно если учесть тот факт, что его первоначальная настройка (генерация кода инициализации) полностью аналогична настройке в среде STM32CubeMX. Кроме того, созданный в STM32CubeMX код можно загрузить напрямую в STM32CubeIDE (конечно, если при создании проекта была выбрана соответствующая IDE).
После создания проекта пользователь может отредактировать его файлы, задав функционал работы микроконтроллера, а также выполнить загрузку и отладку кода, не выходя из среды (рисунок 24). Более подробно работа с STM32CubeIDE будет описана в практическом разделе данной статьи.
STM32CubeIDE представляет собой универсальный инструмент для создания и разработки кода проектов на базе микроконтроллеров STM32 и позволяет значительно повысить эффективность рабочего процесса как для начинающих разработчиков, так и для профессиональных инженеров.
Прошивка микроконтроллера
Аппаратная часть
Для загрузки программного кода на микроконтроллер, а также отладки в режиме реального времени не обойтись без специализированного программатора. Программатор может поставляться отдельно или быть встроенным в отладочную плату. На сегодняшний день доступны три типа программаторов от компании STMicroelectronics: STLINK-V3MINI, STLINK-V3SET и ST-LINK/V2. Рассмотрим их более подробно.
ST-LINK/V2 – внутрисхемный программатор/отладчик для микроконтроллеров серии STM8 и STM32 производства фирмы STMicroelectronics (рисунок 25). Работа ST-LINK/V2 с микроконтроллерами основана на интерфейсах JTAG/SWD или SWIM (актуально только для семейства STM8). Программаторы данного типа встраиваются в некоторые отладочные платы, что позволяет загружать код на микроконтроллер платы без необходимости приобретения дополнительных устройств.

Рис. 25. Внешний вид программатора ST-LINK/V2
STLINK-V3SET поддерживает интерфейсы SWIM и JTAG/SWD, а также виртуальный COM порт, который позволяет организовать обмен данными между ПК и целевым микроконтроллером через UART (рисунок 26). Мостовые интерфейсы SPI, I2C, CAN или GPIO можно использовать для программирования устройства с помощью системного загрузчика. Главными преимуществами STLINK-V3SET перед предыдущей версией ST-LINK-V2 являются наличие мультимоста USB к разным интерфейсам и модульная архитектура, дающая возможность расширить базовый функционал. К тому же STLINK-V3SET работает в несколько раз быстрее своего предшественника.

Рис. 26. Внешний вид программатора STLINK-V3SET
STLINK-V3MINI – компактный автономный внутрисхемный программатор/ отладчик для микроконтроллеров STM32 (рисунок 27). STLINK-V3MINI строится на базе микроконтроллера STM32F723 в корпусе UFBGA-176, имеет небольшой форм-фактор и обеспечивает высокую производительность. STLINK-V3MINI поддерживает интерфейсы JTAG/ SWD. Кроме того, отладчик предоставляет интерфейс виртуального COM-порта, который позволяет персональному компьютеру взаимодействовать с целевым микроконтроллером через UART.

Рис. 27. Внешний вид программатора STLINK-V3MINI
Программная часть
Для загрузки и считывания кода с микроконтроллера компания STMicroelectronics предлагает своим клиентам следующие программные пакеты: STM32 ST-LINK Utility и STM32CubeProgrammer.
STM32 ST-LINK Utility – программная среда, представляющая собой полнофункциональный интерфейс для программирования микроконтроллеров STM32. STM32 ST-LINK Utility позволяет производить чтение, запись и верификацию кода микроконтроллера и имеет простой и понятный интерфейс (рисунок 28).

Рис. 28. Внешний вид STM32 ST-LINK Utility
STM32 ST-LINK Utility предлагает разработчику широкий набор возможностей для программирования внутренней памяти STM32 (Flash, RAM, OTP), а также внешней памяти, для проверки программного содержимого (контрольная сумма, верификация во время и после процесса программирования, сравнение кода микроконтроллера с кодом, хранящемся в отдельном файле) и для автоматизации программирования STM32.
К ключевым особенностям STM32 ST-LINK Utility можно отнести:
- Бесплатное распространение,
- Поддержку Motorola S19 и Intel HEX,
- Загрузку, редактирование и сохранение исполняемых файлов и файлов данных, созданных компиляторами Assembler/Linker или C,
- Удаление, программирование, просмотр и проверку содержимого Flash -памяти устройства,
- Программирование, стирание и верификацию внешних запоминающих устройств с примерами внешних Flash-загрузчиков,
- Возможность работы через интерфейс командной строки,
- Поддержку просмотра состояния памяти и ядра в режиме Live-update.
STM32CubeProgrammer – программная среда, представляющая собой универсальный инструмент программирования для микроконтроллеров STM32. STM32CubeProgrammer предлагает разработчику широкий спектр функций для программирования внутренней памяти микроконтроллеров STM32, а также внешней памяти. Кроме того, STM32CubeProgrammer позволяет задавать параметры загрузки, производить верификацию содержимого памяти и автоматизировать программирование микроконтроллеров с помощью специальных сценариев (рисунок 29).

Рис. 29. Внешний вид STM32CubeProgrammer
Ключевые особенности STM32CubeProgrammer:
- Возможность стирания, программирования, просмотра и верификации содержимого Flash -памяти устройства,
- Поддержка Motorola S19 и Intel HEX, ELF,
- Поддержка ST-LINK (JTAG / SWD) и загрузчика: UART и USB DFU,
- Возможность стирания, программирования, просмотра и верификации внешней памяти. Содержит примеры внешних Flash-загрузчиков,
- Автоматическое программирование STM32 (стирание, верификация, программирование, настройка байтов),
- Возможность OTP-программирования,
- Выполнение сценариев посредством скриптов через интерфейс командной строки,
- Обновление прошивки ST-LINK,
- Безопасное создание прошивки с использованием STM32 Trusted Package Creator tool.
Способы прошивки
После компиляции и генерации файла машинного кода прошивку необходимо записать в память микроконтроллера. Существует по меньшей мере три способа это сделать:
- Использовать SWD – технологию отладки при использовании последовательного подключения,
- Задействовать ST-LINK Mass Storage Feature,
- Выполнить загрузку через Memory Bootloader.
Рассмотрим данные способы более подробно на примере прошивки микроконтроллера на отладочной плате Nucleo.
SWD
- Запустите STM32CubeProgrammer и подключитесь к ST-LINK (рисунок 30).
- Выполните прошивку микроконтроллера, следуя шагам, показанным на рисунке 31.
Если запись прошла успешно, вы должны увидеть следующие диалоговые окна (рисунок 32).

Рис. 32. Запись кода прошла успешно
- Выполните отключение программатора (рисунок 33).
- Выполните перезагрузку устройства для начала работы загруженного кода прошивки.
ST-LINK Mass Storage Feature
Данный способ является, пожалуй, самым простым, когда речь идет только о загрузке программного кода, однако его недостатком является немедленный старт программы после записи файла.
- Подготовьте копию файла прошивки для записи его на накопитель отладочной платы, выполните подключение платы к компьютеру (рисунок 34).
- Перетащите файл прошивки на накопитель отладочной платы (рисунок 35).
Загружаемый код будет запущен сразу после того, как будет завершен процесс копирования.
Memory Bootloader
- Выполните подключение к ST-LINK при помощи STM32CubeProgrammer (рисунок 36).
- Измените опционный байт для загрузки из системной памяти (рисунок 37).
- Отключитесь от ST-LINK и перезагрузите отладочную плату (рисунок 38).
- После перезагрузки платы отсоедините и снова подключите USB-кабель отладочной платы к компьютеру.
- С помощью STM32 Cube Programmer подключитесь к системной памяти через UART (рисунок 39).

Рис. 39. Подключение к System Memory через UART
- Выполните запись программного кода аналогично шагам, указанным в первом методе (рисунок 40).
- Снова выполните подключение и восстановите байты опций для загрузки из внутренней Flash-памяти (рисунки 41, 42)
- Отключитесь от ST-LINK и перезагрузите плату (рисунок 43).
Мониторинг в STM32CubeMonitor
STM32CubeMonitor – программная утилита для удобного отображения данных, получаемых с микроконтроллеров семейства STM32. Для работы с STM32CubeMonitor не требуется какого-либо дополнительного оборудования кроме платы с контроллером и программатора. Данная утилита позволяет чрезвычайно быстро и просто выводить данные с контроллера в реальном времени в виде графика, а также осуществлять их постобработку (присутствуют наборы основных математических и тригонометрических функций).
STM32CubeMonitor позволяет точно настраивать и диагностировать приложения STM32 непосредственно во время их выполнения, считывая и визуализируя данные в реальном времени. В дополнение к специализированным версиям (power, RF, USB-PD) STM32CubeMonitor предоставляет графический редактор на основе потоков для простого создания пользовательских панелей мониторинга и быстрого добавления виджетов, таких как датчики, гистограммы и графики (рисунок 44).

Рис. 44. Построение программы мониторинга в STM32CubeMonitor
После создания программы для мониторинга пользователю достаточно лишь нажать кнопку START для начала приема данных с микроконтроллера и построения графика в режиме реального времени (рисунок 56).

Рис. 45. Построение графика в STM32CubeMonitor на основе данных микроконтроллера
К ключевым особенностям STM32CubeMonitor можно отнести:
- Графический потоковый редактор, позволяющий задать алгоритм мониторинга без необходимости написания программного кода,
- Возможность подключения к любому устройству STM32 через ST-LINK (протоколы SWD или JTAG),
- Чтение из и запись данных в ОЗУ в режиме реального времени во время работы целевого приложения,
- Режим прямого захвата или режим моментального снимка,
- Триггер, позволяющий сосредоточиться на интересующем поведении приложения,
- Возможность записывать данные в файл и воспроизводить их для исчерпывающего анализа,
- Поддержка нескольких датчиков для одновременного мониторинга,
- Удаленный мониторинг с встроенной поддержкой мультиформатных дисплеев (ПК, планшеты, мобильные телефоны),
- Прямая поддержка сообщества Node-RED.
Пример создания проекта с подключением датчиков на STM32G4
После того как мы подробно разобрали теоретическую часть, касающуюся экосистемы STM, пришло время испробовать ее преимущества на примере создания реального тестового проекта.
Для демонстрации возможностей экосистемы STM создадим тестовый проект на основе отладочной платы NUCLEO-G474RE (базируется на микроконтроллере STM32G474RET6) и платы расширения X-NUCLEO-IKS01A2 – платы на основе MEMS-датчиков движения (гироскоп, акселерометр), магнитометра и датчиков параметров окружающей среды (атмосферное давление, температура, влажность), а также организуем передачу данных с платы расширения на терминал персонального компьютера по интерфейсу UART. Взаимосвязь NUCLEO-G474RE и NUCLEO-IKS01A2 будет организована по I2C.
Первым шагом является создание нового проекта в STM32CubeIDE и выбор отладочной платы. Нужную плату достаточно легко найти, воспользовавшись строкой поиска (рисунок 46).
Далее нам необходимо выбрать путь сохранения проекта и задать его имя (рисунок 47).

Рис. 47. Выбор пути расположения и имени проекта в STM32CubeIDE
После создания проекта нам необходимо задействовать необходимые интерфейсы (UART2 и I2C1) и выбрать соответствующие выводы GPIO микроконтроллера: UART2 повесим на PA2, PA3; I2C1 – на PB8, PB9 (рисунок 48).
Так как мы используем плату расширения, то нам необходимо установить в проект соответствующую библиотеку. Для этого перейдем во вкладку Software Packs и выберем раздел Select Components (рисунок 49).
В данном разделе вобьем в поиск IKS01A2 – модель используемой платы X-NNUCLEO – и подключим соответствующие библиотеки, отображенные в правой части окна. В разделе Application выберем IKS01A2_DataLogTerminal (рисунок 50).
После установки библиотек вернемся в проект и в разделе Software Packs проекта подключим данные библиотеки, а также зададим параметры платформы: IKS01A2 BUS IO driver – I2C1, BSP BUTTON – PC13 [B1 [blue push button]], BSP USART – USART2, BSP LED – PA5 [LED2 [green led]] (рисунок 51).
Сохраним файлы проекта и выполним его построение. Если все было сделано верно, построение выполнится без ошибок (рисунок 52).
Теперь нам необходимо выполнить прошивку микроконтроллера. Для этого выберем один из трех способов, описанных в предыдущих разделах, а именно – простое копирование файла прошивки средствами Windows. Для этого откроем папку расположения проекта и найдем сгенерированный двоичный файл (рисунок 53).

Рис. 53. Расположение файлов проекта STM32CubeIDE
Подключим нашу отладочную плату к компьютеру и выполним копирование сгенерированного файла прошивки. После успешного копирования загорится зеленый светодиод LED1 и начнется работа заданного в коде прошивке алгоритма (рисунок 54).

Рис. 54. Прошивка отладочной платы NUCLEO-G474RE
После прошивки платы нам необходимо получить данные, с этой целью, в том числе, мы активировали передачу по UART. Для работы с UART воспользуемся программой-терминалом Tera Term. Tera Term является открытым проектом и распространяется бесплатно, скачать ее можно на официальном сайте www.teraterm.org.
Выполним запуск программы и выберем подключение по серийному порту. В качестве порта выберем тот, на котором висит наша отладочная плата, в данном случае – COM13 (рисунок 55).

Рис. 55. Выбор COM-порта в Tera Term
Далее зайдем в настройки порта и зададим скорость передачи (рисунок 56).

Рис. 56. Настройки порта в Tera Term
После этого по UART начнут поступать данные с платы расширения. Данные содержат информацию о текущем положении платы в пространстве, температуре, атмосферном давлении и влажности (рисунок 57).

Рис. 57. Данные с платы расширения X-NUCLEO-IKS01A2
В качестве теста можно попробовать изменить положение платы в пространстве и, например, подышать на нее для изменения показателей температуры и влажности (рисунок 58).

Рис. 58. Обновленные данные с платы расширения X-NUCLEO-IKS01A2
Как видно из рисунка 58, после воздействия на плату данные, приходящие с акселерометров и гироскопа, претерпели изменения, также изменились замеры влажности и температуры. В то же время такой параметр, как атмосферное давление, остался на прежнем уровне (данный параметр не так просто поддается корректировке).
Использование плат расширения X-Nucleo позволяет создавать компактные готовые решения без необходимости трассировки плат и подключения датчиков на аппаратном уровне. В то же время использование среды STM32CubeIDE значительно упрощает создание проекта, давая возможность пользователю разрабатывать несложные приложения, не написав при этом ни одной строки кода.
Заключение
STM32 – это не только микроконтроллеры, но и экосистема, разработанная STMicroelectronics для упрощения создания приложений на всех этапах их разработки: начиная от поиска и выбора компонентов в MCUFinder и заканчивая созданием готовых проектов без необходимости написания кода в STM32CubeIDE. Выпуск нового микроконтроллера STM всегда сопровождается обновлением библиотек во всех программных продуктах компании, а также выходом отладочных плат для возможности ознакомления с функционалом и построения прототипов будущих приложений. Так произошло и с новым семейством контроллеров общего назначения STM32G4, которое является обновленной и улучшенной версией STM32F3 и может по праву считаться одним из лучших представителей серии 32-битных микроконтроллеров общего назначения STMicroelectronics.
Литература
- STM32G4 Online Training
- RM Reference manual. STM32G4 advanced Arm®-based 32-bit MCUs. (Rev.4 2020).
- STM32G4 mainstream series mixed signal MCU.
- Разбор новых уникальных модулей FMAC и CORDIC в микроконтроллерах общего назначения STM32G4 (материалы вебинара)
- Системная архитектура и режимы питания
- STM32G4 – следующий этап развития семейства STM32F3
Наши информационные каналы