Top.Mail.Ru

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

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

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

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

Собственно, устанавливаем STM32CubeMx, запускаем и создаем новый проект:

Создание нового проекта в STM32CubeMx

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

Выбор микроконтроллера

В результате будет открыто окно для работы с созданным проектом:

Основное окно STM32CubeMx

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

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

Если мы зайдем во вкладку Project Manager, то сможем последовательно настроить (перечисляю основное):

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

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

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

Готово, теперь нажимаем на кнопку "Generate Code" в правом верхнем углу, и CubeMx предложит нам скачать необходимые библиотеки (в случае их отсутствия). Не препятствуем данному процессу, ждем.

После окончания генерации открываем папку с нашим проектом и видим, что там появились новые файлы. В папке 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 */

	/* Infinite loop */
	/* USER CODE BEGIN WHILE */
	while (1)
	{
		/* USER CODE END WHILE */

		/* USER CODE BEGIN 3 */
	}
	/* USER CODE END 3 */
}


/***************************************************************************************/

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

Свой собственный код нужно добавлять внутри секций вида:

/* USER CODE BEGIN 2 */
// Здесь пользовательская программа
/* USER CODE END 2 */

Тогда при изменении проекта в CubeMx пользовательская часть программы будет автоматически перенесена и в заново сгенерированные файлы 👍

Резюмируем - таким вот образом мы получаем инструмент, который позволяет через интуитивно понятный интерфейс выполнить настройку любых модулей микроконтроллера. В результате генерации кода мы, в свою очередь, получаем готовый проект, в котором уже настроено, все что было ранее выбрано в CubeMx. И мы можем дополнять этот проект своим функционалом, используя уже сконфигурированные автоматически периферийные модули.

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

Подписаться
Уведомить о
guest

53 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
10 лет назад

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

wapster
wapster
10 лет назад

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

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

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

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

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

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

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

Rod
Rod
9 лет назад

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

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

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

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

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

Пытаюсь освоить 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
9 лет назад

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

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

Мне кажется инструмент скачивания библиотек не отличается от версий. Я имел ввиду, что 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

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

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

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

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

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

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

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

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

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

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

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

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

optik
optik
Ответ на комментарий  Адлан
4 лет назад

Я тоже на эти грабли наступил - забыл выставить во вкладке SYS режим отладки. По умолчанию в Cube стоит NO DEBUG, а надо ставить Serial Wire

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

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

sasha_1973
sasha_1973
8 лет назад

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

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

sasha_1973
sasha_1973
8 лет назад

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

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

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

Адлан
Адлан
Ответ на комментарий  Адлан
7 лет назад

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

Almaz
7 лет назад

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

Almaz
Ответ на комментарий  Aveal
7 лет назад

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

Almaz
Ответ на комментарий  Almaz
7 лет назад

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

Almaz
7 лет назад

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

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

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

Михаил
Михаил
Ответ на комментарий  Aveal
7 лет назад

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

Михаил
Михаил
Ответ на комментарий  Михаил
7 лет назад

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

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

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

Егор
Егор
Ответ на комментарий  Егор
7 лет назад

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

Егор
Егор
Ответ на комментарий  Aveal
7 лет назад

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

alexandergb
alexandergb
3 лет назад

О чем эта статья? Автор задавал себе этот вопрос перед тем, как давать ей название? Это и есть старт?
Мы потыкали на кнопочки и получили картинки (если картинки и кнопочки точно такие же, как у автора), не поняв толком ничего.
Если продукт сложный, тогда не нужно лгать и обольщать "быстрым стартом".
Если быстрый старт возможен, и ты о нем заявил, то будь добр - покажи как человеку создать более-менее осмысленный проект и довести его до логического конца - до получения рабочей модели или макета.
А мы получили огромную кучу исходников на С.
Что дальше? Где хотя бы компиляция?

53
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x