Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2754
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Инструмент STM32CubeMX

109

Для каждой стадии работы пользователь может выбрать VBUS в качестве возможного источника питания вместо батареи. Это повлияет на оценку срока службы батареи. Если есть возможность применения разных уровней напряжения, CubeMX также предложит выбрать их различные значения.

Рисунок 11: Представление Power Consumption Calculator в CubeMX

Представление PCC будет проанализировано в Главе 19.

4.2. Генерация проекта

После того, как конфигурация микроконтроллера, его периферии и промежуточного программного обеспечения завершена, мы можем использовать CubeMX для создания «скелета» проекта Си. В данном параграфе мы увидим все необходимые шаги для:

Создания нового «универсального» проекта Eclipse, готового принять автоматически сгенерированный CubeMX код Cи.

Импортирования сгенерированных CubeMX файлов в проект Eclipse.

Настройки проекта, если это необходимо.

Окончательным результатом данной главы будет еще одно приложение с мигающим светодиодом, но на этот раз мы создадим его, используя полученную из новейшей среды STCube большую часть кода. Это также даст нам возможность начать понимать фунда-

ментальные блоки уровня аппаратной абстракции STCube (Hardware Abstraction Layer, HAL). Как только мы поймем шаги, описанные здесь, мы будем полностью независимы при настройке любого проекта для платформы STM32.

4.2.1. Генерация проекта Си при помощи CubeMX

Первым шагом является генерация кода Си, содержащего код инициализации HAL, с использованием инструмента CubeMX. Если вы провели эксперименты в предыдущем параграфе, лучше запустить совершенно новый проект, выбрав свою плату Nucleo из инструмента Board Selector, как было показано выше.

Инструмент STM32CubeMX

110

Рисунок 128: Диалоговое окно Project Settings

Как только CubeMX создаст новый проект, перейдите в меню Project → Settings…. Появится диалоговое окно Project Settings, как показано на рисунке 12.

В поле Project Name впишите понравившееся вам название для проекта. Для поля Project Location лучше всего создать вложенную папку внутри папки /STM32Toolchain9 (C:\STM32Toolchain для пользователей Windows). Хорошим именем папки может быть/STM32Toolchain/cubemx-out. В выпадающем списке Toolchain/IDE выберите пункт SW4STM32. Оставьте все остальные поля по умолчанию.

Рисунок 13. Раздел Code Generator в диалоговом окне Project Settings

8В данной главе также восстановлена нарушенная нумерация рисунков и таблиц (прим. переводчика)

9Еще раз, вы совершенно свободно можете выбрать предпочитаемый путь для вашего рабочего пространства. Здесь, чтобы упростить инструкции, все пути предполагаются относительно /STM32Toolchain.

Инструмент STM32CubeMX

111

Теперь перейдите во вкладку Code Generator и выберите параметры, показанные на рисунке 13. Нажмите кнопку OK.

Теперь мы готовы сгенерировать код инициализации Си для нашей Nucleo. Перейдите в меню Project → Generate Code. CubeMX может попросить вас загрузить последнюю версию HAL платформы STCube для вашей Nucleo (например, если у вас есть NucleoF401RE, он попросит вас загрузить HAL STCube-F4). Если это так, нажмите кнопку Yes и дождитесь завершения. Через некоторое время вы найдете код Си внутри каталога

/STM32Toolchain/cubemx-out/<название-проекта>.

4.2.1.1.Изучение сгенерированного кода

Прежде чем мы продолжим, создавая проект Eclipse, полезно взглянуть на код, сгенерированный CubeMX.

Рисунок 14: Сравнение сгенерированного кода с архитектурным представлением CMSIS

Открыв папку /STM32Toolchain/cubemx-out/<название-проекта>, вы найдете в ней

несколько вложенных папок. Рисунок 14 сравнивает сгенерированную структуру проекта с программной архитектурой CMSIS10. Как мы видели в Главе 1, CMSIS состоит из нескольких компонентов. Здесь нас интересует CMSIS-CORE.

CMSIS-CORE реализует базовую систему поддержки исполнения программ (run-time system) для устройства Cortex-M и предоставляет пользователю доступ к ядру процессора

ипериферии устройства. Если подробнее, он определяет:

HAL для регистров процессора Cortex-M со стандартизованными определениями для регистров SysTick, регистров NVIC, регистров блока управления системой (SCB), регистров MPU, регистров FPU и функций доступа к ядру.

Имена системных исключений для взаимодействия с системными исключениями без проблем с совместимостью.

10 Вы также найдете вложенную папку SW4STM32. Она содержит файл проекта для IDE ACS6, который мы не можем импортировать в наш инструментарий. Так что просто игнорируйте ее.

Инструмент STM32CubeMX

112

Методы организации заголовочных файлов, облегчающие изучение новых микроконтроллеров Cortex-M и улучшающие переносимость программного обеспечения. Они включают в себя соглашения об именах для прерываний, специфичных для устройства.

Методы инициализации системы, которые будут использоваться каждым производителем микроконтроллеров. Например, стандартизированная функция

SystemInit() необходима для конфигурации системы тактирования при запуске устройства.

Встроенные функции, используемые для генерации инструкций ЦПУ, которые не поддерживаются стандартными функциями Си.

Глобальную переменную с именем SystemCoreClock, позволяющую легко определять частоту системного тактового сигнала.

Пакет CMSIS-CORE подразделяется на несколько файлов в проекте, сгенерированном с помощью CubeMX, как показано на рисунке 14:

Папка Include содержит несколько файлов core_<цпу>.h (где <цпу> заменяется на cm0, cm3 и т. д.). Данные файлы определяют основные периферийные устройства и предоставляют вспомогательные функции, которые обращаются к основным регистрам (SysTick, NVIC, ITM, DWT и т. д.). Эти файлы являются общими для всех микроконтроллеров на базе Cortex-M.

Папка Device содержит специфическую информацию об устройстве для всех микроконтроллеров STM32F/L (например, STM32F4), такую как номера запросов прерываний (IRQn) для всех исключений и прерываний устройства, определения для периферийного доступа (Peripheral Access) ко всей периферии устройства (все структуры данных и отображение адресов для периферийных устройств конкретного устройства) – файл system_<устройство>.h. Она также содержит дополнительные вспомогательные функции для упрощения программирования периферийных устройств. Кроме того, существует также несколько ассемблерных startupфайлов startup_<устройство>.s: они содержат код начального запуска и код конфигурации системы (обработчик сброса, который выполняется после сброса ЦПУ, векторы исключений процессора Cortex-M, векторы прерываний, которые являются специфичными для каждого устройства).

Наконец, папки Inc и Src в корневом каталоге проекта содержат заголовочные файлы и файлы с исходным кодом «скелета» приложения, сгенерированного CubeMX, а папка STM32xxxx_HAL_Driver, находящаяся внутри папки Drivers, является всем HAL от ST для используемой серии микроконтроллеров.

Замечание о плагине Eclipse CubeMX

Для полноты картины нужно сказать, что ST распространяет выпуск CubeMX в качестве плагина Eclipse. Его можно скачать с официального сайта ST (https://www.st.com/en/development-tools/stsw-stm32095.html). Плагин, как таковой,

работает довольно хорошо, и его можно использовать в трех операционных системах, которые мы рассматриваем в данной книге. Тем не менее, он совершенно бесполезен для нашего инструментария, так как его сгенерированные проекты просто не могут быть использованы с плагином Eclipse GNU MCU. Поэтому мы рассматриваем в данной книге только самостоятельный выпуск CubeMX.