Stm32 + Cmsis + Stm32Cubeide

Здесь я расскажу, как создать минимальный проект на CMSIS, используя «родную» IDE для микроконтроллеров STM — STM32CubeIDE. STM32CubeIDE может иметь ряд недостатков, но, на мой взгляд, у него есть несколько преимуществ — например, проприетарность и бесплатность, из-за чего, как минимум, стоит обратить внимание на эту среду разработки, если вы не сделали этого раньше.



STM32 + CMSIS + STM32CubeIDE

В качестве объекта прошивки был выбран не очень распространенный микроконтроллер STM32F072 с ядром ARM Cortex-M0; для более привычного STM32F103 на ARM Cortex-M3 с поправкой на ядро процесс идентичен.

Все необходимые ресурсы можно скачать с сайта.

st.com , и вот что вам нужно:

  • Сама IDE , я использую версию для Windows, но также доступны версии для Mac и Linux.

    STM32 + CMSIS + STM32CubeIDE

  • Библиотека CMSIS для ARM Cortex-M0 , он находится в архиве STM32CubeFx, разделенном по версиям ядра.

    Сам архив, помимо CMSIS, содержит великое множество других ресурсов, начиная от примеров работы с периферией и заканчивая драйверами USB; собственно, именно этот архив используется, если вы создаете проект с помощью STM32Cube

    STM32 + CMSIS + STM32CubeIDE

  • Не предотвратить Технический паспорт и справочное руководство

    STM32 + CMSIS + STM32CubeIDE



    STM32 + CMSIS + STM32CubeIDE

После того как вы установили, запустили и выбрали папку Workspace, вы можете приступить к созданию проекта.

Текущая версия STM32CubeIDE 1.1.0, поэтому расположение различных настроек должно основываться на ней.

Создание нового проекта - Файл/Новый/STM32Project .

После недолгих раздумий появляется окно выбора микроконтроллера, в моем случае это STM32F072RB в корпусе LQFP64, выбираю нужную строку и нажимаю далее.

Далее вам будет предложено выбрать имя проекта, местоположение, язык программирования C/C++, исполняемый файл/статическую библиотеку и будет ли проект генерироваться с помощью CubeMX или с самим усиком.

Генерация по кубу в этом случае не нужна, поэтому тип проекта Пустой - заканчивать.



STM32 + CMSIS + STM32CubeIDE



STM32 + CMSIS + STM32CubeIDE



STM32 + CMSIS + STM32CubeIDE

Слева, в окне Обозреватель проектов , появилось дерево проекта, хоть и не совсем Пустой как приказано.

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

файл с расширением .

ld - он пригодится.



STM32 + CMSIS + STM32CubeIDE



STM32 + CMSIS + STM32CubeIDE

Все манипуляции с папками и файлами можно проводить как в Проводнике, так и внутри IDE, щелкнув правой кнопкой мыши по названию проекта, например: правая кнопка -> создать -> папка .

Если структура проекта была изменена вне IDE, то вам просто необходимо обновить проект: правая кнопка -> Обновить .

Моя версия структуры проекта выглядит так:

  • Запускать — здесь будет храниться скрипт компоновщика, тот самый, который остался от сгенерированного проекта, а также файл запуска, взятый из CMSIS
  • CMSIS\источник И CMSIS\inc — здесь будут исходники, файлы с расширением .

    c в папке скр и заголовочные файлы с расширением .

    h в папке Inc. соответственно, относящиеся к библиотеке CMSIS

  • Ядро\источник И Ядро\вкл.

    — здесь будет находиться сам проект, сначала его следует поместить туда main.c И main.h



STM32 + CMSIS + STM32CubeIDE

Теперь вам необходимо перенести в проект файлы библиотеки CMSIS. Библиотека состоит из основных файлов и периферийных файлов.

Файлы ядра начинаются с основной_ или cmsis_ они общие для всех микроконтроллеров, использующих это ядро.

Периферийные файлы содержат в названии имя микроконтроллера stm32 и специфичны для конкретного производителя, в данном случае STM. При распаковке архив содержит папку STM32Cube_FW_F0_V1.11.0 , все пути указаны относительно этой папки.

Всего вам нужно скопировать: В CMSIS\inc :

  • Drivers\CMSIS\Include\cmsis_compiler.h
  • Drivers\CMSIS\Include\cmsis_gcc.h
  • Drivers\CMSIS\Include\cmsis_version.h
  • Drivers\CMSIS\Include\core_cm0.h
  • Драйверы\CMSIS\Device\ST\STM32F0xx\Include\stmf0xx.h
  • Драйверы\CMSIS\Устройство\ST\STM32F0xx\Include\stm32f072xb.h
  • Drivers\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h
В CMSIS\источник :
  • Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c
В автозагрузке:
  • Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\gcc\startup_stm32f072xb.s
Вот так выглядит реализованный проект.

STM32 + CMSIS + STM32CubeIDE

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

Правая кнопка на имени проекта -> Свойства -> Сборка C/C++ -> Настройки -> Настройки инструмента -> MCU GCC Linker -> Общие — здесь нужно указать новое расположение скрипта компоновщика с помощью кнопки Просматривать…

STM32 + CMSIS + STM32CubeIDE

Также необходимо указать пути к файлам проекта Свойства -> Общие сведения о C/C++ -> Включает Свойства -> Общие сведения о C/C++ -> Расположение источника В Включает пути к папкам Inc. , И в Исходное местоположение логично было бы зайти в папки источник , но если вы это сделаете, то эти папки будут добавлены отдельно в дерево проекта.

Чтобы визуально не загромождать дерево, в Исходное местоположение вы можете указать корневые папки Основной , КМСИС И Запускать .



STM32 + CMSIS + STM32CubeIDE



STM32 + CMSIS + STM32CubeIDE

Чтобы проект скомпилировался, нужно раскомментировать файл stm32f0xx.h строка с названием микроконтроллера и конечно же в main.c добавить функцию main.

STM32 + CMSIS + STM32CubeIDE



STM32 + CMSIS + STM32CubeIDE

Вот и все.

Безошибочная компиляция и сразу целых полтора килобайта оперативной памяти, она же RAM, куда-то пропали, и сразу вспоминается стек и куча, они нигде не упоминались при создании проекта.

Размер стека и кучи указывается в файле сценария компоновщика, том, который имеет расширение .

ld; их можно и нужно изменять в соответствии с требованиями проекта.

Эти значения расположены в начале файла в виде меток _Min_Heap_Size/_Min_Stack_Size с указанием размера в шестнадцатеричном формате.



STM32 + CMSIS + STM32CubeIDE

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

На макетной плате STM32F072B-DISCO, тактируемой от внутреннего генератора HSI48 48 МГц, будет мигать светодиод, а в качестве источника задержки будет использоваться таймер SysTick, генерирующий прерывания с периодом 1 мс, с помощью которых устанавливается точная задержка.

время засчитывается.

Светодиод подключен к контакту 6 порта C, настроенному на двухтактный выход. Надеюсь, кому-то эта информация будет полезна, потому что.

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

Теги: #Программирование микроконтроллеров #stm32 #C++ #stm32cubeide #cmsis

Вместе с данным постом часто просматривают: