STM32. Быстрый старт с STM32CubeMx.

STM32CubeMX

Всем нам известная фирма ST Microelectronics выпустила и активно развивает абсолютно новый продукт под названием 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. И для начала устанавливаем программу. А потом и запускаем:

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

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

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

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

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

STM32CubeMX pinout.

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

  • кроме того, если планируется использовать отладчик, необходимо в пункте SYS выбрать отладочный интерфейс. Например, для отладчика ST-Link настройки будут выглядеть так:
Настройки ST-Link.

Готово! теперь нажимаем на кнопку 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. Как видите, все работает!

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

Поделиться!

Подписаться
Уведомление о
guest
50 Комментарий
старее
новее большинство голосов
Inline Feedbacks
View all comments
Алексей
Алексей
5 лет назад

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

wapster
wapster
5 лет назад

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

Максим
Максим
5 лет назад

А можно ли этот код использовать, в MicroC, например?

Максим
Максим
5 лет назад

Ясно. А где его скачать можно?

Максим
Максим
5 лет назад

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

Rod
Rod
5 лет назад

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

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

Женя
5 лет назад

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

Андрей
Андрей
5 лет назад

Пытаюсь освоить 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 то там свои. Можно настроить так чтобы оба инструмента пользовали одни библиотеки или я что-то путаю?

Ann
Ann
4 лет назад

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

Андрей
Андрей
4 лет назад

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

Дмитрий
Дмитрий
4 лет назад

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

Дмитрий
Дмитрий
4 лет назад

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

Дмитрий
Дмитрий
4 лет назад

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

Евгений
Евгений
4 лет назад

Настройки проекта->Debug->Settings (St-link)->Connect->Under Reset

Адлан
Адлан
4 лет назад

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

Адлан
Адлан
4 лет назад

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

Адлан
Адлан
4 лет назад

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

Печалька
Печалька
3 лет назад

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

sasha_1973
sasha_1973
3 лет назад

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

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

sasha_1973
sasha_1973
3 лет назад

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

Адлан
Адлан
3 лет назад

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

Адлан
Адлан
Reply to  Адлан
3 лет назад

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

Almaz
3 лет назад

IAR 7.5, последний куб, китайская сторублевая плата на F103C8T6, в общем всё работает, только надо в свойствах проекта указать тип девайса STM32F103x8, а то он пустой.
Проблема в другом. Я с Ардуино перешел на IAR и вообще STM32 чтобы получить настоящий нормальный отладчик. И вот на отладке простейшего проекта мигалки, который работает и мигает, так вот при пошаговой отладке на строке HAL_Init() отладчик тихо уходит курить и непонятно что происходит, остается только прервать. Кто в курсе, что может быть не так?

Almaz
Reply to  Aveal
3 лет назад

Зависает, кнопочки сереют, кроме “прервать отладку”. Перепрыгнуть этот HAL_Init не получается, выполнить до курсора тоже. Долго и нудно погружался пошагово в исходники и понятно только что проблема в сгенерированных этим инструментом настройках прерываний.

Almaz
Reply to  Almaz
3 лет назад

Причем прерывания я никак не использовал – тупо только один пин назначил выходом и настроил тактирование от кварца.

Almaz
3 лет назад

Я уже нашел ответ в комментариях к другой вашей статье. Как пишут, прикол в том что CubeMx по умолчанию генерирует код, отключающий отладку, вечером попробую это решение. Понятно что это стандартная ловушка для всех начинающих, наверно следовало бы упомянуть про это в вводной статье по кубу.

Михаил
Михаил
3 лет назад

Скачал CubeMX 4.20.1. Работает, но очень медленно, между кликом мышки и реакцией программы не менее минуты задержка.
У кого-нибудь такое случалось? Танцы с бубном (убрал кирилицу, установка программы на голую ОС) результата не дают.

Михаил
Михаил
Reply to  Aveal
3 лет назад

Window 7. У меня запасной HDD есть, поставил на нем XP – работает нормально Cube Mx. Вот я сейчас штудирую ваши статьи, и то на ХР, то на W7 переключаюсь – Keil 5 8.11 отказывается работать с ХР

Михаил
Михаил
Reply to  Михаил
3 лет назад

Дефрагментировал Windows 7 и Cube Mx заработал!!! Чудеса.

Егор
Егор
2 лет назад

Здравствуйте! Использовал в проектк HAL_SPI_Transmit, отпралял 4 байта. Отправка заняла 4100 тактов!!! Как с этим бороться?

Егор
Егор
Reply to  Егор
2 лет назад

Сам виноват, понизил скорость SPI шины, на максимальной получилось 380 тактов, уже терпимо.

Егор
Егор
Reply to  Aveal
2 лет назад

А как это примерно делается?

Присоединяйтесь!

Profile Profile Profile Profile Profile
Vkontakte
Twitter

Язык сайта

Июль 2020
Пн Вт Ср Чт Пт Сб Вс
« Июн    
 12345
6789101112
13141516171819
20212223242526
2728293031  

© 2013-2020 MicroTechnics.ru