STM32Cube. Создание проекта.

Всем нам известная фирма ST Microelectronics выпустила и активно развивает абсолютно новый продукт под названием STM32CubeMx, и я не мог обойти это вниманием 😉 Сегодня разберемся, что это вообще такое и для чего это нужно.

STM32CubeMX

Итак…

STM32CubeMx — абсолютно новый программный продукт, позволяющий легко и непринужденно при помощи достаточно понятного графического интерфейса произвести настройку любой имеющейся на борту микроконтроллера периферии. Предыстория создания CubeMx такова — ST имеют очень разнообразную линейку микроконтроллеров, тут вам и Cortex-M0, и Cortex-M0+, и Cortex-M3, и Cortex-M4. Соответственно, встает вопрос о каком-то едином наборе библиотек и едином инструменте для настройки и конфигурирования всего этого многообразия. Вот для решения этих целей и был выпущен STM32CubeMx.

В общих чертах работает все это так — создаем проект, выбираем микроконтроллер и нам сразу же предлагается большая схема со всеми выводами выбранного нами контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы — можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны (в крупных проектах — более чем полезная фишка). Как все это работает мы еще увидим на примере, а пока обсудим в общих чертах )

Итак, мы выбрали все нужные нам выводы, ввели все настройки периферии (например, частоты тактирования, режимы работы таймеров….), и STM32CubeMx дает нам возможность сгенерировать соответствующий код. То есть в итоге мы получаем готовый проект, с уже прописанными настройками, с подключенными библиотеками и с готовой инициализацией всей выбранной периферии. Базой для всего этого являются библиотеки CMSIS и HAL. С CMSIS мы уже давно знакомы, а вот вторая библиотека — это что-то новое.

Библиотека STM32 HAL Driver пришла (пока еще не окончательно) на смену всем хорошо известной библиотеке Standard Peripheral Library (SPL). В принципе, и структура и функции этих библиотек очень схожи, но HAL более заточена под принцип «вызвал функцию и сразу заработало». Для тех, кому не особо хочется возиться с какими-то низкоуровневыми настройками периферии — то что надо 😉 Естественно, на данный момент библиотека еще «сыровата», есть некоторые недоработки, но с каждым новым релизом ситуация все лучше и лучше.

Перейдем к практике. И тут я решил остановить свой выбор на семействе STM32F4, хотя это не имеет особого значения, поскольку мы всего лишь хотим ознакомиться  с функционалом и принципом работы STM32CubeMx. Итак ST предлагают нам во-первых, собственно, сам STM32CubeMx (в скачанном архиве будет .exe файл для установки программы), а также набор библиотек STM32Cube FirmWare F4. Несмотря на почти одинаковые названия архивов на сайте ST — это абсолютно разные вещи. CubeMx — готовый софт для конфигурирования периферии, Cube FW — набор множества библиотек.

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

STM32Cube

Идем в папку Drivers — и там находим следующие библиотеки:

BSP — папка с драйверами для конкретных отладочных плат на базе STM32F4. Например, для STM32F4Discovery там можно найти файлы с уже готовой реализацией обмена данными с акселерометром. Само собой светодиодами там тоже можно помигать )

Кроме того, в папке Drivers лежит библиотека CMSIS и STM32F4xx_HAL_Driver, которую мы уже обсудили 😉

Папка Middlewares содержит содержит вещи посерьезней — библиотеки для работы с аудио, USB, а также библиотеки FatFs, FreeRTOS и другие, адаптированные под использование совместно с STM32F4xx HAL Driver.

В папке Projects — огромное количество готовых примеров на любой случай жизни и для всех основных отладочных плат.

В общем практически все, что может понадобиться, собрано в одном месте.

Переходим к STM32CubeMx. И для начала устанавливаем программу. А потом и запускаем )

Установка и запуск STM32Cube

Выбираем новый проект. Сразу же открывается окно с огромным количеством настроек, в котором нам необходимо выбрать микроконтроллер, который мы собираемся использовать в нашем проекте. Я выбрал STM32F407VGTx. Появляется новое окно:

STM32CubeMx

И тут мы уже видим в правой части изображение нашего контроллера со всеми выводами, а слева список всей доступной периферии. Также в левой части окна можно выбрать будет ли использоваться, например, FreeRTOS в нашем проекте.

Если мы зайдем сверху в меню Project и выберем там Settings, то Cube предложит нам выбрать для какой IDE произвести генерацию кода. Я оставлю без изменений — IAR v6.70.Также в этом окне надо ввести название проекта и выбрать путь для его сохранения.

Давайте для примера выберем что-нибудь. Пусть будет задействован первый канал АЦП и три вывода, работающих в режиме выхода.STM32CubeMX

Готово! теперь нажимаем на кнопку Generate Source Code, и Cube предложит нам скачать необходимые библиотеки (как раз те, которые мы обсудили в начале проекта). Пусть скачиваются, просто ждем.

После окончания генерации открываем папку с нашим проектом и видим, что там появились новые файлы и папки. В папке Drivers содержатся все необходимые библиотеки, а в папках src и inc, соответственно, сами файлы с кодом нашей инициализации. Откроем, например, файл main.c:

int main(void)
{
 
  /* USER CODE BEGIN 1 */
 
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* System interrupt init*/
  /* Sets the priority grouping field */
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
 
  /* USER CODE BEGIN 2 */
 
  /* USER CODE END 2 */
 
  /* USER CODE BEGIN 3 */
  /* Infinite loop */
  while (1)
  {
 
  }
  /* USER CODE END 3 */
 
}

В функции main() вызываются MX_GPIO_Init() и MX_ADC1_Init(), которые определены в этом же файле — main.c. Собственно, в этих функциях и содержится инициализация и настройка всей периферии, которую мы выбрали при создании проекта в STM32CubeMx. Как видите, все работает 😉

Но тут сразу же расскажу про одну проблему CubeMx — на некоторых ПК папка Project остается пустой. Несмотря на наличие установленных IAR’а и Keil’а, файлы проекта не генерируются. Тут видимо кому как повезет 😉

В общем, пожалуй, на сегодня это все) Разобрались в общих чертах с новыми библиотеками и с созданием тестового проекта при помощи STM32CubeMx, так что до скорых встреч на нашем сайте!

Понравилась статья? Поделись с друзьями!

STM32Cube. Создание проекта.: 34 комментария
  1. проблема с генерацией файлов на CubeMx, решается путём исключения кириллицы из пути к проекту.

    • Пути все без кириллицы, файлы с кодом генерируются отлично — не генерируются только файлы проекта.

  2. А как дело обстоит с быстродействием? Я имею в виду много ли лишнего кода генерирует эта библиотека?

  3. Сейчас опробовал эту библиотеку. Могу сказать, что код получается не хуже чем с spl, где-то даже и лучше. Куча готовых решений, типа стека usb и tcp, делают эту штуку офигенно крутой. Еще бы сохранили совместимость со старым spl, чтобы старые библиотеки не пришлось переписывать, было бы круто. Если ребята будут и дальше развивать эту штуку, вообще цены ей не будет.

  4. А вы пробовали что-нибудь серьезнее мигания светодиодами сделать?

    У меня например не работает ни один из примеров с UART для STM32F4-Discovery.

    • Был огромный проект в целом на Cube сделанный, но я не знаю много ли там исправлялось вручную. Я лично принципиально им не пользовался, поэтому сказать точно не могу. А так в том проекте и RTOS была и USB и куча всего в общем.

  5. Балуюсь с STM32F429discovery, и пока что всё из примеров в комплекте запускается с полоборота. Среди запущеного — довольно громоздкие проекты, если сравнивать с морганием светодиодами. Как то: дефолтный firmware, идущий в комплекте с отладочной платой, только тут он последней версии от 29 декабря 2014 со всякими анимациями и обоями, графредактор а-ля Paint. Свой проект не собирал ещё с нуля, потому что только вчера начал. Сама идея Cube офигенна, по-моему. Это будущее.

  6. Пытаюсь освоить STM32F4. Первый раз вижу и Keıl MDK и CubeMX. Тяжко после AVR конечно, но светодиодики уже моргают ))). Вопрос про единство библиотек HAL: MDK5 PackInstaller на сайте Keıl.com качает свою библиотеку версии 2.5.0., а CubeMx4.8.0 качает с сайта st.com качает свою сборку версии 1.6.0. Т.е. когда CubeMx собирает проект под MDK он копирует свои библиотеки HAL, а когда проект сам делаешь в MDK то там свои. Можно настроить так чтобы оба инструмента пользовали одни библиотеки или я что-то путаю?

  7. Та же проблема. Добавление прав локального администратора на рабочем компьютере эффекта не дало.
    Так же не получается подключить библиотеки с локального диска(скаченные с официального сайта), а не качая их через Cube MX. Судя по размеру файлов, Cube MX требует файлы на пару Кбайт меньше, чем с официального сайта.

  8. Мне кажется инструмент скачивания библиотек не отличается от версий. Я имел ввиду, что KEIL и CUBE скачивает библиотеки с разных мест и мне как новичку тяжко уследить взаимосвязи )

  9. Проект для Keil 4.54, созданный кубом, не компилируется, выдает вот это (ddd — имя проекта)
    Rebuild target ‘ddd Configuration’
    error — can’t create command input file ‘ddd configuration/system_stm32f4xx.__i’
    Target not created

  10. Заборол. Надо, ничего не меняя в сгенерированном проекте,
    зайти в кейле в Options/Output и нажать defaults

  11. Уважаемые знатоки Keil. У меня такая проблема, данная IDE постоянно выносит мне мозг своими непонятками. Создаю проект в CubeMX, вроде все нормально. Открываю, билдится, заливаю, выдает Internal command error. При этом это вылазит не в каждом созданном проекте. У меня перед глазами два одинаково настроенных проекта, но один с ошибкой а другой без. Абсолючно не понимаю, от чего зависит наличие данной ошибки. Подскажите пожалуйста

  12. Установил Cube версии 4.15.0 (файл en.stm32cubemx.zip). Firmware Package V1.4.0. Создал проект для stm32f103c8t6 в EWARM. При компиляции выдает больше сотни ошибок — даже если проект совершенно пустой. Что может быть? Также, в ранних версиях иногда проскакивал переключатель, позволяющий выбрать не самый последний пакет (описания МК?) — теперь его нет. Можно ли как-то отказаться от использования пакета 1.4.0?

    • Добрый день!

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

  13. Все оказалось банально: сохранял в МоиДокументы. Но есть другая проблема. Простенький проект — мигание светодиодом на PC13 (китайская плата с STM32F103C8T6). Загружаю — и программатор перестает видеть МК. Что это может быть, можно ли «вылечить» уже записанные?

  14. Как вылечить, нашел на Ютюбе. Вроде, получилось. А вот, что я сделал не так — пока не вижу

  15. А у меня не хочет качать файл с библиотеками. Доводит скачивание до конца и выдарт ошибку. Типа проблема с загрузкой… Где-то нашел решение, что нужно поставить последнюю версию, но тоже не помогает…

    • У меня тоже самое. Можно скачивать архив библиотек напрямую (без Cube), затем распаковывать в репозиторий Куба и он подхватит.

  16. Доброго Здоровья!

    У кого «STM32CubeMX» не становится, Setup появляется в процессах на 2 секунды и пропадает ?
    Windows 7 x32; x64 — никакие танцы, пляски с бубнами, оркестрами не помогают.
    Windows — только установленные + все обновления + java последняя с сайта + STM32CubeMX последняя с сайта — результат нулевой !
    ПОЖАЛУЙСТА ПОМОГИТЕ его поставить !?

  17. Решение найдено (на полном серьёзе, приснилось), категорически не любит кириллицу в путях к установочному файлу «SetupSTM32CubeMX-4.16.1.exe».

  18. Новая напасть..
    Установил IAR EWARM 7.50, cube 4.18.0 — кириллицы в путях нет, даже репозитарий перенес на корень диска — в пустом проекте при компиляции вылезают ошибки.
    На другом компьютере с теми же версиями программ компилируется…

    • Все, как всегда, просто. Оказываетcя, в настройках EWARM надо было указать, что программа для Cortex M3 — в моем случае

      • Это глюк очередной Cube — иногда после генерации слетают все настройки в проекте, несмотря на то, что в Cube контроллер выбран.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *