Всем нам известная фирма ST Microelectronics активно развивает свой продукт под названием STM32CubeMx, и я не мог обойти это вниманием, поэтому и решил сделать новую одноименную рубрику. И для начала разберемся, что это вообще такое, и для чего нужно. Итак...
STM32CubeMx - программный продукт, позволяющий легко и непринужденно при помощи достаточно понятного графического интерфейса произвести настройку любой имеющейся на борту микроконтроллера периферии. Предыстория создания CubeMx такова - ST имеют очень разнообразную линейку микроконтроллеров, тут и Cortex-M0, и Cortex-M0+, и Cortex-M3, и Cortex-M4. Соответственно, встает вопрос о каком-то едином наборе библиотек и едином инструменте для инициализации и конфигурирования всего этого многообразия. Вот для решения этих целей и был выпущен STM32CubeMx.
Суть концепции такова - создаем проект, выбираем микроконтроллер, и нам сразу же предлагается схема со всеми выводами выбранного контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы - можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны (в крупных проектах - более чем полезная функция). Давайте рассмотрим все вышеперечисленное на практическом примере.
Собственно, устанавливаем STM32CubeMx, запускаем и создаем новый проект:
Сразу же открывается окно с огромным количеством фильтров, в котором необходимо выбрать микроконтроллер, который мы собираемся использовать в проекте. Я выбрал STM32F407VG:
В результате будет открыто окно для работы с созданным проектом:
И тут мы уже видим в правой части изображение нашего контроллера со всеми выводами, а слева список всей доступной периферии. Соответственно, можно, кликая на выводы, задавать их режимы работы, либо в списке периферии активировать те или иные модули.
На вкладке Clock Configuration задаются все необходимые параметры тактирования, об этом пойдет речь в одной из следующих статей курса.
Если мы зайдем во вкладку Project Manager, то сможем последовательно настроить (перечисляю основное):
- имя проекта
- путь для сохранения проекта
- среду разработки, для которой будут сгенерированы файлы проекта
- версию библиотек, которые будут использованы для генерации исходного кода
Давайте для примера выберем что-нибудь. Пусть будет задействован первый канал АЦП (PA0) и три вывода, работающих в режиме выхода (PE4, PD13, PC0):
- кроме того, если планируется использовать отладчик, необходимо в пункте 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, так что до скорых встреч на нашем сайте! Если что-то остается не до конца понятным - не проблема, в следующих статьях будем разбирать поэтапно всю периферию, будет много примеров, которые все и прояснят окончательно.
проблема с генерацией файлов на CubeMx, решается путём исключения кириллицы из пути к проекту.
Пути все без кириллицы, файлы с кодом генерируются отлично - не генерируются только файлы проекта.
А как дело обстоит с быстродействием? Я имею в виду много ли лишнего кода генерирует эта библиотека?
В принципе довольно приемлимо, могло быть и хуже...
А можно ли этот код использовать, в MicroC, например?
Думаю можно, но лично мое мнение, что проще просто написать все "по старинке" )
Ясно. А где его скачать можно?
cube? На сайте ST Microelectronics - st.com.
Сейчас опробовал эту библиотеку. Могу сказать, что код получается не хуже чем с spl, где-то даже и лучше. Куча готовых решений, типа стека usb и tcp, делают эту штуку офигенно крутой. Еще бы сохранили совместимость со старым spl, чтобы старые библиотеки не пришлось переписывать, было бы круто. Если ребята будут и дальше развивать эту штуку, вообще цены ей не будет.
А вы пробовали что-нибудь серьезнее мигания светодиодами сделать?
У меня например не работает ни один из примеров с UART для STM32F4-Discovery.
Был огромный проект в целом на Cube сделанный, но я не знаю много ли там исправлялось вручную. Я лично принципиально им не пользовался, поэтому сказать точно не могу. А так в том проекте и RTOS была и USB и куча всего в общем.
Балуюсь с STM32F429discovery, и пока что всё из примеров в комплекте запускается с полоборота. Среди запущеного - довольно громоздкие проекты, если сравнивать с морганием светодиодами. Как то: дефолтный firmware, идущий в комплекте с отладочной платой, только тут он последней версии от 29 декабря 2014 со всякими анимациями и обоями, графредактор а-ля Paint. Свой проект не собирал ещё с нуля, потому что только вчера начал. Сама идея Cube офигенна, по-моему. Это будущее.
Пытаюсь освоить 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 то там свои. Можно настроить так чтобы оба инструмента пользовали одни библиотеки или я что-то путаю?
Я, честно говоря, 5 Кейл так и не стал пробовать...)
Та же проблема. Добавление прав локального администратора на рабочем компьютере эффекта не дало.
Так же не получается подключить библиотеки с локального диска(скаченные с официального сайта), а не качая их через Cube MX. Судя по размеру файлов, Cube MX требует файлы на пару Кбайт меньше, чем с официального сайта.
Мне кажется инструмент скачивания библиотек не отличается от версий. Я имел ввиду, что KEIL и CUBE скачивает библиотеки с разных мест и мне как новичку тяжко уследить взаимосвязи )
4 Кейл вообще ничего не скачивает, сам скачиваешь с сайта ST и добавляешь в проект.
Проект для Keil 4.54, созданный кубом, не компилируется, выдает вот это (ddd - имя проекта)
Rebuild target 'ddd Configuration'
error - can't create command input file 'ddd configuration/system_stm32f4xx.__i'
Target not created
Заборол. Надо, ничего не меняя в сгенерированном проекте,
зайти в кейле в Options/Output и нажать defaults
Уважаемые знатоки Keil. У меня такая проблема, данная IDE постоянно выносит мне мозг своими непонятками. Создаю проект в CubeMX, вроде все нормально. Открываю, билдится, заливаю, выдает Internal command error. При этом это вылазит не в каждом созданном проекте. У меня перед глазами два одинаково настроенных проекта, но один с ошибкой а другой без. Абсолючно не понимаю, от чего зависит наличие данной ошибки. Подскажите пожалуйста
Обычно такая ошибка возникала на проектах, в которых используется USB.
Настройки проекта->Debug->Settings (St-link)->Connect->Under Reset
Установил Cube версии 4.15.0 (файл en.stm32cubemx.zip). Firmware Package V1.4.0. Создал проект для stm32f103c8t6 в EWARM. При компиляции выдает больше сотни ошибок - даже если проект совершенно пустой. Что может быть? Также, в ранних версиях иногда проскакивал переключатель, позволяющий выбрать не самый последний пакет (описания МК?) - теперь его нет. Можно ли как-то отказаться от использования пакета 1.4.0?
Добрый день!
К сожалению, чаще всего Cube не дает изменить версию библиотек, и приходится выискивать нужные версии.
Все оказалось банально: сохранял в МоиДокументы. Но есть другая проблема. Простенький проект - мигание светодиодом на PC13 (китайская плата с STM32F103C8T6). Загружаю - и программатор перестает видеть МК. Что это может быть, можно ли "вылечить" уже записанные?
Как вылечить, нашел на Ютюбе. Вроде, получилось. А вот, что я сделал не так - пока не вижу
Я тоже на эти грабли наступил - забыл выставить во вкладке SYS режим отладки. По умолчанию в Cube стоит NO DEBUG, а надо ставить Serial Wire
А у меня не хочет качать файл с библиотеками. Доводит скачивание до конца и выдарт ошибку. Типа проблема с загрузкой... Где-то нашел решение, что нужно поставить последнюю версию, но тоже не помогает...
У меня тоже самое. Можно скачивать архив библиотек напрямую (без Cube), затем распаковывать в репозиторий Куба и он подхватит.
Доброго Здоровья!
У кого "STM32CubeMX" не становится, Setup появляется в процессах на 2 секунды и пропадает ?
Windows 7 x32; x64 - никакие танцы, пляски с бубнами, оркестрами не помогают.
Windows - только установленные + все обновления + java последняя с сайта + STM32CubeMX последняя с сайта - результат нулевой !
ПОЖАЛУЙСТА ПОМОГИТЕ его поставить !?
Решение найдено (на полном серьёзе, приснилось), категорически не любит кириллицу в путях к установочному файлу "SetupSTM32CubeMX-4.16.1.exe".
Во сне рождаются отличные идеи )
Новая напасть..
Установил IAR EWARM 7.50, cube 4.18.0 - кириллицы в путях нет, даже репозитарий перенес на корень диска - в пустом проекте при компиляции вылезают ошибки.
На другом компьютере с теми же версиями программ компилируется...
Все, как всегда, просто. Оказываетcя, в настройках EWARM надо было указать, что программа для Cortex M3 - в моем случае
Это глюк очередной Cube - иногда после генерации слетают все настройки в проекте, несмотря на то, что в Cube контроллер выбран.
IAR 7.5, последний куб, китайская сторублевая плата на F103C8T6, в общем всё работает, только надо в свойствах проекта указать тип девайса STM32F103x8, а то он пустой.
Проблема в другом. Я с Ардуино перешел на IAR и вообще STM32 чтобы получить настоящий нормальный отладчик. И вот на отладке простейшего проекта мигалки, который работает и мигает, так вот при пошаговой отладке на строке HAL_Init() отладчик тихо уходит курить и непонятно что происходит, остается только прервать. Кто в курсе, что может быть не так?
Что именно с отладчиком происходит?
Зависает, кнопочки сереют, кроме "прервать отладку". Перепрыгнуть этот HAL_Init не получается, выполнить до курсора тоже. Долго и нудно погружался пошагово в исходники и понятно только что проблема в сгенерированных этим инструментом настройках прерываний.
Причем прерывания я никак не использовал - тупо только один пин назначил выходом и настроил тактирование от кварца.
Я уже нашел ответ в комментариях к другой вашей статье. Как пишут, прикол в том что CubeMx по умолчанию генерирует код, отключающий отладку, вечером попробую это решение. Понятно что это стандартная ловушка для всех начинающих, наверно следовало бы упомянуть про это в вводной статье по кубу.
Просто на момент написания статьи такой проблемы в Кубе не было, она появилась намного позднее...
Скачал CubeMX 4.20.1. Работает, но очень медленно, между кликом мышки и реакцией программы не менее минуты задержка.
У кого-нибудь такое случалось? Танцы с бубном (убрал кирилицу, установка программы на голую ОС) результата не дают.
Не было такого никогда...А что за ОС?
Window 7. У меня запасной HDD есть, поставил на нем XP - работает нормально Cube Mx. Вот я сейчас штудирую ваши статьи, и то на ХР, то на W7 переключаюсь - Keil 5 8.11 отказывается работать с ХР
Дефрагментировал Windows 7 и Cube Mx заработал!!! Чудеса.
Да, магия какая-то)
Здравствуйте! Использовал в проектк HAL_SPI_Transmit, отпралял 4 байта. Отправка заняла 4100 тактов!!! Как с этим бороться?
Сам виноват, понизил скорость SPI шины, на максимальной получилось 380 тактов, уже терпимо.
Можно прерывания/дма задействовать.
А как это примерно делается?
Через функции
HAL_SPI_Transmit_DMA()
HAL_SPI_Transmit_IT()
передавать.
И аналогичные там для приема есть.
О чем эта статья? Автор задавал себе этот вопрос перед тем, как давать ей название? Это и есть старт?
Мы потыкали на кнопочки и получили картинки (если картинки и кнопочки точно такие же, как у автора), не поняв толком ничего.
Если продукт сложный, тогда не нужно лгать и обольщать "быстрым стартом".
Если быстрый старт возможен, и ты о нем заявил, то будь добр - покажи как человеку создать более-менее осмысленный проект и довести его до логического конца - до получения рабочей модели или макета.
А мы получили огромную кучу исходников на С.
Что дальше? Где хотя бы компиляция?
Добрый день!
В целом, идея концепции такая. Есть учебный курс по некой теме, в данном случае это STM32CubeMx:
Часть 1. "Быстрый старт" - обзор инструмента и, в принципе, задач, которые он может решать, процесса установки (если требуется), запуск, создание проекта с минимально необходимым функционалом.
Часть 2. GPIO, без сомнений, всегда все начинается с портов. Пример управления портом (классика - диод), пример опроса порта как входа. Подразумевается создание проекта по пунктам Части 1.
Часть 3...N. Проходка по различной периферии - АЦП, SPI, I2C, USART - все основные модули, тоже вполне логично и ожидаемо. Подразумевается знание процедур из Части 1 и Части 2.
По наблюдением на достаточно большой выборке из абсолютно разных людей (разных по возрасту, по уровню подготовки итд итп) данная последовательность дает наибольший отклик и результат. Собственно, и здесь мы используем именно такой процесс, поскольку он работает.