Микроконтроллеры STM32F7. Часть 4. Экосистема
27 мая 2019
Данная серия публикаций основана на материалах цикла STM32F7 Online Training от компании STMicroelectronics. В статьях представлено описание функциональных блоков и инструментов разработки для семейства микроконтроллеров STM32F7. Логически материал разбит на 4 главы, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы. Главы не связаны между собой, и читатель может ознакомиться с ними в произвольном порядке.
Подписаться на получение уведомлений о публикациях по микроконтроллерам ARM.
STM32CubeMX
STM32CubeMX – программная платформа с графическим интерфейсом, которая максимально упрощает построение программных проектов для микроконтроллеров STM32. STM32CubeMX позволяет работать не только с семейством STM32F7, но и со всеми существующими семействами микроконтроллеров STM32 (рисунок 118).

Рис. 118. Структура программной платформы STM32Cube
STM32CubeMX позволяет выполнять следующие операции (рисунок 119):
- выбирать оптимальный микроконтроллер или отладочную плату с учетом особенностей конкретного приложения. Фильтрация производится по различным полям, таким как серия, корпус, объем памяти и так далее;
- конфигурировать выводы микроконтроллера с помощью утилиты Pin Wizard;
- настраивать частоты глобальных тактовых сигналов и тактовых сигналов периферийных устройств с помощью утилиты Clock Wizard;
- настраивать параметры ПО промежуточного уровня, такие как файловая система, стеки протоколов, операционные системы и прочее, а также периферийные блоки с помощью утилиты Perepherial and middleware Wizard;
- оценивать уровень потребления и срока службы аккумулятора при заданных настройках микроконтроллера с помощью утилиты Power consumption Wizard;
- Создавать и редактировать проекты для микроконтроллеров STM32 с последующей генерацией С-кода для конкретных IDE (IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и AC6 System Workbench (SW4STM32)). При этом для генерации С-кода могут использоваться различные библиотеки нижнего уровня от ST: HAL или LL.
STM32CubeMX доступен для бесплатного скачивания на сайте www.st.com. После установки программы пользователь должен скачать библиотеки для требуемого семейства STM32, в нашем случае речь идет о программном пакете FW.F7.x.x.x. Скачивание можно производить непосредственно из STM32CubeMX. Для этого на заглавной странице, появляющейся сразу после запуска, нужно перейти на вкладку INSTALL/REMOVE (рисунок 120). Очень часто на сайте компании появляются обновления как самой программы STM32CubeMX, так и отдельных библиотек. Пользователям рекомендуется периодически проверять обновления (есть функция автообновления). Для этого необходимо заходить на вкладку CHECK FOR UPDATES (рисунок 120).
Рассмотрим процесс создания проекта в STM32CubeMX, который представляет собой последовательность из нескольких шагов.
Для создания нового проекта пользователь должен выбрать подходящий микроконтроллер или отладочную плату. В этом ему помогут утилиты MCU Selector или Board Selector (рисунок 121).
Если пользователь начинает проект с нуля без отладочной платы, то STM32CubeMX предложит выбрать контроллер по заданным параметрам с помощью фильтров. Основными фильтрами являются: процессорное ядро, семейство, линейка, корпус, периферия, встроенный графический контроллер и другие (рисунок 122).
После выбора подходящего контроллера разработчику предлагается определить назначение выводов с помощью утилиты Pin Wizard (рисунок 123). При этом выводы могут настраиваться индивидуально с помощью удобной диаграммы либо с помощью окна периферии. В последнем случае пользователь выбирает активные периферийные блоки, а программа автоматически подсвечивает занимаемые выводы. При этом стоит отметить удобную систему подсветки:
- выводы питания окрашены желтым цветом;
- неиспользуемые выводы окрашены серым цветом;
- используемые выводы окрашены зеленым цветом;
- используемые выводы окрашиваются оранжевым, если работа выбранного периферийного блока не разрешена.
Аналогичным образом подсвечиваются названия периферийных блоков в окне периферии. Настройка периферии выполняется в специальном окне, как показано на рисунке 123.
Кроме периферийных блоков, пользователь может выбрать и настроить дополнительные библиотеки, в частности – файловую систему FATFS, операционную систему FreeRTOS и другие (рисунок 124).
Настройка системы тактирования производится с помощью вкладки Clock Configuration (утилита Clock Wizard), при этом пользователь работает с визуализированным деревом тактирования (рисунок 125). Clock Wizard позволяет за несколько кликов мыши выбрать источник системного тактового сигнала, значения делителей и умножителей, а также источники тактирования периферийных блоков. При этом если какой-либо тактовый сигнал выходит за границы допустимых значений, программа сразу же сообщает об ошибке.
После того как все выводы и периферия настроены, а также сконфигурировано дерево тактирования, можно переходить к генерации кода. Это выполняется на вкладке Project Manager (рисунок 126). Здесь пользователь может настроить параметры проекта (название и путь), а также определить тип создаваемого проекта, который определяется выбором целевой IDE. В настоящий момент STM32CubeMX поддерживает следующие IDE:
- EWARM (версии 7 и 8);
- MDK-ARM (версии 4 и 5);
- TrueStudio;
- SW4STM32;
- кроме того, кодогенератор может создавать makefile.
Далее на вкладке Code Generator следует определиться с составом копируемых в директорию проекта библиотек, настройками обработки пользовательского кода при регенерации (например, сохранять или удалять), настройками использования HAL. Стоит отметить важную особенность: если при настройке выводов в разделе HAL Settings поставить галочку напротив пункта «set all free pins as analog», и если при этом в Pin Wizard интерфейсы SWD/JTAG не были определены, то дальнейшая отладка микроконтроллеров с помощью этих интерфейсов будет невозможна.
Для более детальной настройки кодогенератора следует перейти на вкладку Advanced Settings. Главной особенностью С-генератора в STM32CubeMX является возможность использования как HAL, так и LL-драйверов. В рамках одного и того же проекта на STM32CubeMX можно одновременно использовать как HAL, так и LL, но для разных периферийных блоков. Подробнее об этих драйверах рассказывается в следующем разделе.
После нажатия на кнопку «GENERATE CODE» STM32CubeMX создает С-проект для выбранной IDE. Проект уже содержит весь код необходимый для конфигурации тактирования, выводов и периферии, выбранной пользователем. Чтобы в дальнейшем без проблем повторно генерировать код конфигурации без стирания пользовательского кода, разработчик должен помещать свой код в специальные секции (User code).
Еще одной полезной утилитой в составе STM32CubeMX является Power Consumption Calculator (рисунок 127). Этот калькулятор позволяет не просто рассчитать потребление микроконтроллера в различных режимах, но и определить срок службы различных элементов питания.
STM32CubeF7
Как было сказано выше, программа STM32CubeMX работает с отдельными подгружающимися библиотеками (рисунок 118). Отдельный программный пакет STM32CubeF7 предназначен специально для работы с микроконтроллерами семейства STM32F7. Стоит понимать, что STM32CubeF7 содержит только открытые и бесплатные библиотеки и драйверы от ST. Полный перечень всех существующих на рынке библиотек и утилит, которые можно использовать совместно с STM32F7, оказывается чрезвычайно обширным и не рассматривается в данной публикации.
STM32CubeF7 состоит из нескольких уровней (рисунок 128):

Рис. 128. Структура STM32CubeF7
- низкоуровневые драйверы HAL и LL с библиотеками и примерами;
- ПО промежуточного уровня с библиотеками и примерами (middleware);
- ПО прикладного уровня в виде демонстрационных примеров для отладочных плат;
- CMSIS и утилиты.
Рассмотрим составляющие STM32CubeF7 подробнее.
Hardware abstraction Layer (HAL) – набор абстрактных драйверов, обеспечивающих максимальную кроссплатформенность среди контроллеров STM32. При этом некоторые драйверы являются абсолютно универсальными (подходят ко всем контроллерам STM32), а часть применима только к отдельным линейкам с соответствующими периферийными блоками, например, блоками шифрования. Главными достоинствами HAL являются:
- максимальная кроссплатформенность;
- функциональная ориентированность: эти драйверы ориентированы не на работу с отдельными блоками контроллера, а на выполнение конкретных задач. Это дает возможность работать не с регистрами, а с осмысленными функциями;
- простота использования, так как от пользователя не требуется глубокого знания архитектуры микроконтроллера.
Вместе с тем, у HAL есть и недостатки: значительный объем кода, неоптимальность выполнения задач, недостаточно высокое быстродействие. Если эти недостатки являются критичными, то следует использовать LL-драйверы.
Low Layer APIs (LL) – аппаратно зависимые драйверы, позволяющие напрямую работать с периферией контроллера, в том числе – использовать inline-функции и выполнять атомарный доступ к регистрам. Такой подход не требует значительных затрат памяти, функции получаются максимально короткими и эффективными по скорости. Очевидными недостатками LL-драйверов являются снижение совместимости кода при переходе от одного контроллера к другому и необходимость знания особенностей архитектуры контроллера.
STM32CubeF7 содержит обширный набор ПО промежуточного уровня (таблица 18). Для каждой из библиотек существует подробная документация, которая позволяет максимально упростить использование ПО. Для получения подробной информации по библиотекам, входящим в состав STM32CubeF7, следует обратиться к следующим документам:
- UM1905 Description of STM32F7 HAL and Low-layer drivers;
- UM1722 Developing Applications on STM32Cube with RTOS;
- UM1713 Developing applications on STM32Cube with LwIP TCP/IP stack;
- UM1721 Developing applications on STM32Cube™ with FatFs;
- UM1891 Getting started with STM32CubeF7 MCU Package for STM32F7 Series;
- UM1709 STM32Cube Ethernet IAP example;
- UM2372 STM32Cube PDM2PCM software library for the STM32F4/F7/H7 Series;
- UM1723 STM32Cube PolarSSL example;
- UM1720 STM32Cube USB host library;
- UM1906 STM32CubeF7 demonstration platform;
- UM1734 STM32Cube™ USB device library.
Таблица 18. ПО промежуточного уровня STM32CubeF7
Библиотека | Владелец | Лицензия |
---|---|---|
FreeRTOS™ | Real Time Engineers Ltd. | Modified GNU GPL |
LwIP | Swedish Institute of Computer Science | BSD 3-Clause |
mbedTLS | Arm® | Apache License Version 2.0 |
STemWin | Segger | SLA0047 (скомпилированная библиотека) |
PDM2PCM Library | STMicroelectronics | SLA0047 (скомпилированная библиотека) |
USB Host library | STMicroelectronics | SLA0044 (исходный код) |
USB Device library | STMicroelectronics | SLA0044 (исходный код) |
TouchGFX | STMicroelectronics | SLA0044 (скомпилированная библиотека) |
FatFS | Portions ST | SLA0044 (исходный код) |
Portion ChaN | FatFS License | |
LibJPEG | Portions STMicroelectronics | BSD 3-Clause |
Thomas G. Lane, Guido Vollbeding | Independent JPEG Group License |
Для каждой из своих фирменных отладочных плат компания ST предлагает широкий выбор примеров и готовых проектов (рисунок 129). При этом у разработчиков есть возможность их настройки и модификации с помощью STM32CubeMX.
В STM32Cube примеры классифицированы в соответствии с уровнем ПО:
- Examples – группа примеров, в которых используются только драйверы HAL и BSP, а ПО промежуточного уровня не используется. Целью этих примеров является демонстрация работы того или иного периферийного блока. Некоторые примеры достаточно просты и касаются только одного периферийного блока, другие могут демонстрировать совместную работу нескольких блоков, например, АЦП и DMA.
- Examples_LL – группа примеров, в которых используются только драйверы LL, а HAL и ПО промежуточного уровня не используется. Эти примеры являются наименее ресурсоемкими и максимально простыми. Как правило, в них используется только один периферийный блок. Стоит отметить, что эти примеры предназначены исключительно для работы с платами Nucleo.
- Examples_MIX – группа примеров, в которых используются драйверы HAL, LL и BSP, а ПО промежуточного уровня не используется. Главной задачей этих примеров становится демонстрация оптимального совместного использования HAL и LL, с учетом их достоинств. Примеры предназначены исключительно для работы с платами Nucleo.
- Applications – группа примеров, предназначенных для демонстрации особенностей работы с ПО промежуточного уровня.
- Demonstrations – примеры, использующие широкий набор периферии и ПО промежуточного уровня для демонстрации особенностей и производительности микроконтроллеров.
- Template project – шаблоны проектов для IDE, предназначенные для быстрого создания проектов на базе отладочных плат.
Примеры находятся в директории STM32Cube_FW_STM32CubeF7_VX.Y.Z\Projects\. Они все имеют одинаковую структуру:
- папка \Inc содержит заголовочные файлы;
- папка \Src содержит с-файлы программ;
- папки \EWARM, \MDK-ARM и \SW4STM32 содержат проекты для соответствующих IDE;
- файл readme.txt описывает особенности каждого конкретного примера.
Пользователю достаточно открыть готовые проекты в соответствующей IDE, скомпилировать и загрузить в отладочную плату.
Оценочные платы Discovery для STM32F7
Наиболее подходящим выбором для первого знакомства с возможностями микроконтроллеров STM32F7 являются платы Discovery. С одной стороны, они достаточно просты в освоении и представляют собой законченное решение, с другой – их стоимость невысока.
В настоящий момент существует пять плат Discovery для STM32F7:
- 32F723EDISCOVERY и STM32F7308-DK для микроконтроллеров STM32F723IE и STM32F730I8 соответственно (рисунок 130);

Рис. 130. Внешний вид оценочных плат 32F723EDISCOVERY (а); и STM32F7308-DK (б)
- 32F746GDISCOVERY и STM32F7508-DK для микроконтроллеров STM32F746NG и STM32F750N8 соответственно (рисунок 131);

Рис. 131. Внешний вид оценочных наборов 32F746GDISCOVERY (а); и STM32F7508-DK (б)
- 32F769IDISCOVERY с микроконтроллером STM32F769NI (рисунок 132).

Рис. 132. Внешний вид оценочного набора 32F769IDISCOVERY
В качестве примера рассмотрим состав набора 32F746GDISCOVERY:
- контроллер STM32F746NGH6 в корпусе BGA216, 1 Мбайт Flash и 340 кбайт SRAM;
- отладчик ST-LINK/V2-1;
- 4,3” TFT-дисплей с разрешением 480×272 и емкостным сенсорным экраном;
- разъемы USBдля создания виртуального COM-порта, отладки или устройства хранения данных;
- разъем для подключения камеры;
- SAI-аудиокодек;
- разъемы jack для аудиовхода и аудиовыхода;
- два MEMS-микрофона;
- разъем SPDIF RCA;
- 128-Мбит Quad-SPI Flash;
- 128-Мбит SDRAM (доступно для работы 64 Мбит);
- разъем для подключения microSD;
- разъем для плат расширения RF-EEPROM;
- клавиши сброса и пробуждения;
- разъемы для подключения Ethernet;
- разъем Arduino Uno V3;
- разъемы USBMicro-AB для USBOTGHS и USBOTGFS.
Питание 32F746GDISCOVERY может производиться от различных источников: от ST LINK/V2-1, USB FS, USB HS, от питания плат расширения Arduino, от внешнего блока питания 5 В.
Оценочные платы Nucleo для STM32F7
В настоящий момент STMicroelectronics выпускает платы Nucleo трех основных типов: Nucleo-32, Nucleo-64 и Nucleo-144. Платы Nucleo предназначены, в первую очередь, не для автономной работы, а для совместного использования с различными платами расширения в популярных стеках. Например, Nucleo-32 совместимы со стеком Arduino™ nano, Nucleo-64 и Nucleo-144 работают с Arduino™ Uno V3.
Для работы с STM32F7 предлагается четыре платы Nucleo-144, которые отличаются используемым типом микроконтроллера (рисунок 133):

Рис. 133. Внешний вид плат NUCLEO 144
- NUCLEO-F722ZE с микроконтроллером STM32F722ZE;
- NUCLEO-F746ZG с микроконтроллером STM32F746ZG;
- NUCLEO-F756ZG с микроконтроллером STM32F756ZG;
- NUCLEO-F767ZI с микроконтроллером STM32F767ZI.
Оценочные платы Evaluation Boards для STM32F7
Отладочные платы Evaluation Boards предназначены для максимально полного ознакомления с особенностями различных микроконтроллеров STM32F7. На этих платах можно найти широкий спектр дополнительной периферии, отладчик ST-LINK, дисплеи, приемопередатчики (CAN, USB, Ethernet и прочие), разъемы, светодиоды, датчики и так далее. Сейчас к услугам разработчиков предлагается четыре отладочных платы для работы с STM32F7 (рисунок 134):

Рис. 134. Внешний вид отладочных наборов STM32746G-EVAL (аналогично STM32756G-EVAL) и STM32F769I-EVAL (аналогично STM32F779I-EVAL)
- STM32746G-EVAL с микроконтроллером STM32F746NG;
- STM32756G-EVAL с микроконтроллером STM32F756NG;
- STM32F769I-EVAL с микроконтроллером STM32F769NI;
- STM32F779I-EVAL с микроконтроллером STM32F779NI.
Между собой платы STM32756G-EVAL и STM32746G-EVAL отличаются только типом контроллера. Платы STM32F769I-EVAL и STM32F779I-EVAL также отличаются только контроллером.
Отладочные наборы Evaluation Boards позволяют оценить работу практически всех периферийных блоков. Рассмотрим особенности отладочных плат STM32756G-EVAL и STM32746G-EVAL:
- контроллер STM32F756NGH6 (на STM32756G-EVAL), STM32F746NGH6 (на STM32746G-EVA);
- отладчик ST-LINK/V2-1;
- 5,7” TFT-дисплей с разрешением 640×480 и емкостным сенсорным экраном;
- SAI-аудио ЦАП и стерео аудиоразъем Jack;
- стереофонический цифровой микрофон и разъем для подключения внешнего микрофона;
- модуль камеры;
- RF-EEPROM;
- IrDA приемопередатчик;
- внешняя память: 8 Мбит x 32-бит SDRAM, 1 Мбит x 16-бит SRAM, 8 Мбит x 16-бит Nor Flash, 512 Мбит QuadSPI Nor Flash;
- джойстик с селектором и четырьмя направлениями;
- потенциометр;
- клавиши сброса и пробуждения;
- 4 светодиода;
- разъемы: microSD, RS-232, JTAG/SWD, Ethernet, три разъема Micro-AB для USB OTG HS и FS CAN 2.0A/B, разъем для управления двигателем.
Питание плат осуществляется от ST LINK/V2-1, USB FS1, USB FS2, USB HS, от плат расширения и от внешнего блока питания 5 В.
Наши информационные каналы