Stm32cubemx linux mint cube ide download какую версию лучше

Обновлено: 06.07.2024

Готовим «взрослую» среду разработки под STM32 в Linux

Ранее мы выяснили, как разрабатывать под микроконтроллеры STM32 с использованием знакомой и понятной многим Arduino IDE. Этот подход, впрочем, не лишен недостатков. В частности, он (1) вводит лишние слои абстракции, что не позволяет писать максимально эффективный и компактный код, (2) работает с весьма ограниченным множеством микроконтроллеров и плат, а также (3) привязан к конкретной среде разработки, и не самой лучшей. Поэтому сегодня мы научимся разрабатывать под STM32 по-взрослому.

Важно! Порог вхождения в мир STM32 довольно высокий. Если вы никогда раньше не работали с микроконтроллерами, я бы рекомендовал начинать с плат Arduino и микроконтроллеров AVR.

Необходимый софт

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

yaourt -S arm-none-eabi-gcc arm-none-eabi-gdb \
arm-none-eabi-newlib stlink stm32cubemx openocd

Здесь приведены названия пакетов для Arch Linux, но я довольно уверен, что в других дистрибутивах Linux они называются так же, или как-то похоже. Если вам не удастся найти готовый пакет с STM32CubeMX, программу можно скачать отсюда (потребуется регистрация). Для работы приложению требуется виртуальная машина Java. Несмотря на то, что программа имеет расширение .exe, она превосходно запускается в Linux через java -jar file.exe .

Необходимое железо

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

Компания STMicroelectronics производит собственные отладочные платы серий Discovery и Nucleo. Последние являются более новыми, поэтому сосредоточим свое внимание на них. Платы STM32 Nucleo имеют встроенный отладчик STLink v2.1, что избавляет нас от лишних проводов. Они до определенной степени совместимы с Arduino-шилдами, что может пригодиться. Цены на платы Nucleo в России начинаются от 19$ за плату Nucleo-F030R8, притом купить ее можно в любом Чип-и-Дипе хоть сегодня.

Плата STM32 Nucleo-F411RE

Принимая во внимание разнообразие плат Nucleo, выбор первой платы может быть непростым делом для начинающих. Следует учитывать множество факторов, включая количество Flash-, SRAM- и EEPROM-памяти, максимальную рабочую частоту, используемое ядро Cortex-M, количество аппаратных реализаций SPI/I2C/I2S/UART/CAN-интерфейсов, наличие/отсутствие DAC, ADC и модуля FSMC, энергопотребление, стоимость отладочной платы и ее наличие в ближайших магазинах, и, конечно же, стоимость и доступность самого микроконтроллера. Так как сейчас я не работаю над каким-то конкретным проектом, а просто изучаю микроконтроллеры STM32, я выбрал плату Nucleo-F411RE из-за неплохого соотношения цены и качества. Также меня привлек тот факт, что в микроконтроллере STM32F411RET6, на котором основана эта плата, используется довольно мощное ядро Cortex-M4F со встроенным FPU.

Fun fact! Существуют платы Xnucleo от компании Waveshare, совместимые с платами Nucleo. Платы Xnucleo легко узнать по характерному сине-желтому дизайну. На вид они более продуманы, чем Nucleo, так как используют более общепринятый в наше время разъем micro USB вместо mini USB, лишены дизайнерских «линий надреза» (см предыдущее фото), делающих плату более хрупкой, и имеют впаянный HSE кварцевый резонатор. Также компания Waveshare является производителем множества шилдов для плат Nucleo и Xnucleo.

Создание каркаса проекта в STM32CubeMX

Имеется большое количество отладочных плат и микроконтроллеров, под каждый из которых может требоваться немного измененные версии заголовочных файлов и стандартной библиотеки. Это количество помножим на число всевозможных конфигураций этих микроконтроллеров, например, какие пины для чего используются, какая из внутренних шин на какой частоте работает, и так далее. В плане подобных настроек STM32 является очень гибкой платформой. Получается довольно сложно. Для борьбы с этой сложностью создание каркаса пустого проекта (так называемый scaffolding) для заданной платы или микроконтроллера осуществляется при помощи специальной GUI-программы, STM32CubeMX.

Запускаем программу, жмем New Project. Во вкладке Board Selector находим вашу плату и делаем по ней двойной клик. Если у вас еще нет платы Nucleo, но есть плата Blue Pill и программатор STLink v2, на этом шаге вы можете выбрать микроконтроллер STM32F103C8Tx во вкладке MCU Selector.

Появится интерфейс с несколькими вкладками, из которых наиболее интересной для нас сейчас является вкладка Pinout:

Вкладка Pinout в STM32CubeMX

Важно! Если вы используете Blue Pill, в STM32CubeMX обязательно требуется включить SWD. По умолчанию для микроконтроллера STM32F103C8T6 он выключен. В связи с этим, плату вы без труда прошьете в первый раз, но прошить ее во второй будет довольно непросто (хотя возможно). Более подробное описание этой тонкости ищите в заметке Используем STM32 безо всяких отладочных плат.

На двух других вкладках с названиями Clock Configuration и Configuration в этот раз нам ничего менять не придется. На вкладке Power Consumtion Calculator можно оценить энергопотребление микроконтроллера и время его работы в зависимости от выбранного аккумулятора и рабочего напряжения. Надо сказать, довольно любопытная и полезная возможность.

На этом с настройкой покончено. Говорим Project → Generate Code. Во вкладке Project вводим имя проекта (Project Name), выбираем родительский каталог для этого проекта (Prоject Location), в выпадающем списке Toolchain / IDE выбираем вариант «Makefile». Во вкладке Code Generator стоит выбрать опцию «Add necessary library files as reference in the toolchain project configuration file». Иначе в ваш проект будут скопированы все библиотечные файлы, а это более 160 Мб. Затем жмем ОК. Проект STM32CubeMX автоматически сохранится в каталоге с исходным кодом (файл с расширением .ioc), поэтому отдельно сохранять его не требуется.

В противном случае не будут найдены исполняемые файлы компилятора.

Во-вторых, стоит найти переменную OPT и дописать в нее флаг -Wall :

В-третьих, если после этого шага сказать make , вы можете получить ошибки вроде следующих:

main.c:507: multiple definition of `_Error_Handler'
main.c:507: first defined here

На момент написания этих строк в STM32CubeMX был баг, заключавшийся в том, что он несколько раз включал одни и те же файлы в список C_SOURCES . Нужно найти этот список в Makefile и убрать из него все повторы.

В-четвертых, Makefile умеет компилировать проект, но не содержит таргетов для прошивания платы, ее очистки, а также подключения по UART. Стоит дописать:

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

На этом подготовку шаблона/каркаса можно считать завершенной! Чтобы не проделывать описанные выше шаги при создании каждого нового проекта, шаблон стоит сохранить где-нибудь в надежном месте. Дабы не приходилось при повторном использовании этого шаблона редактировать имя проекта, стоит также отредактировать значение переменной TARGET на какое-нибудь абстрактное main .

Пишем код!

Если вы откроете файл Src/main.c, то найдете в нем множество отметок вроде:

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

Управление микроконтроллером осуществляется через библиотеку под названием HAL, Hardware Abstraction Layer. Как видите, что касается обычного чтения кнопок и мигания светодиодами, здесь все не намного сложнее, чем в случае с той же Arduino.

Важно! Иногда микроконтроллер не запускается с новой прошивкой без нажатия черной кнопки Reset. По идее, обновление прошивки программатора с помощью утилиты STLinkUpgrade и использование утилиты st-flash с флагом --reset , как в нашем Makefile, исправляет эту проблему. Но так как она воспроизводится нерегулярно, полной уверенности нет.

Заключение

Как видите, все не так уж и сложно. Полученных знаний уже вполне достаточно, например, для того, чтобы написать программу, выводящую что-то на ЖК-экранчик или декодирующую сигнал от джойстика Sega. Можно даже пообщаться с какими-то сторонними модулями по SPI или I2C, хотя и не слишком эффективно, если вспомнить о наличии в микроконтроллере аппаратной поддержки этих протоколов. Однако эти темы, ровно как и ШИМ, чтение аналогового сигнала, работа с прерываниями или отладка кода, увы, выходят за рамки этой и без того уже довольно длинной статьи.

Кстати, к вопросу о выходящем за рамки. Хотя приведенных выше сведений будет вполне достаточно тем, кто пишет в Vim, как в данное время суток это делаю я, или каком-нибудь Sublime Text, кто-то из читателей может предпочитать работать в IDE. Настройка Eclipse для разработки под STM32 подробно расписана в книге Mastering STM32 за авторством Carmine Noviello. Если же вы предпочитаете CLion, его настройку подробно описал Илья Моторный в статье JetBrains CLion для микроконтроллеров.

Полную версию исходников к этому посту, как обычно, вы найдете на GitHub.


он весьма тормознутый, поэтому на всякий случай перезалил в облако:

1) Распаковываем файл st-stm32cubeide_1.50.sh из архива, двойное нажатие по нему приведет к созданию папки с таким же именем.


2) Открываем папку, она будет содержать различные файлы (может придется подождать десяток сек):


3) Запускаем терминал ( Ctrl + Alt + T) и пишем путь к создавшейся папке (можно скопировать из строки сверху):


4) Теперь меняем права (это может и не понадобится) и вводим пароль, который запросит:

sudo chmod a+x install.sh


5) Далее непосредственно запускаем файлик установки:


6) Появляется лицензионное соглашение, жмём Ввод (Enter), пока оно не закончится. Принимаем его (прописав игрек в командной строке):


6)Указываем путь установки (папку создавать не нужно):


7) Ждём, пока установится. Высветится окно для ввода пароля, вводим.


8) Откроется окошко с установкой SEGGER J-Link и спросит продолжать ли (Do you wish to continue?). Пишем:


9) Теперь листаем долгий текст (Enter) и соглашаемся со всем (Do you agree with the terms of this license?):


10) Скорее всего таким же образом будет установка двух программ: ST-Link и ST-Link Server.


На этом всё, можно использовать бесплатную среду разработки для программирования микроконтроллеров STM32 на бесплатной операционной системе Linux.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №1

Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core

Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core

По факту получается, что базовая плата Blue Pill с чипом STM32F103C8T6 может быть приобретена менее чем за 2$ у друзей из поднебесной. К этому комплекту еще необходим программатор ST-Link V2, и как и для всего остального на него существует максимально дешевая китайская копия. Программатор понадобиться в первую очередь для записи программ и внутрисхемной отладки по интерфейсу JTAG с поддержкой, разработанного ARM протокола SWD (Serial Wire Debug).

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №3

Кроме использования ST-Link существует возможность записывать программы через выводы A9, A10 платы (ножки 30, 31 USART1 микроконтроллера), для этого понадобиться преобразователь USB-UART типа FTDI FT232RL или подобный.

Схема подключения Blue Pill к переходнику USB-UART

Подсоединение платы Blue Pill к программатору ST-Link

Подсоединение платы Blue Pill к программатору ST-Link

Прежде чем начать предметно разбирать Cube IDE я приведу составленную мной таблицу сравнения характеристик микроконтроллеров от различных базовых плат Arduino c STM32F103C8.

Таблица сравнения некоторых базовых МК AVR с STM32F103

Таблица сравнения некоторых базовых МК AVR с STM32F103

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

Итак, для успешного начала работы нам необходимо скачать установочный файл с официальной страницы CubeIDE на сайте ST. Для скачивания доступно несколько вариантов под Linux, macOS и Windows. Конкретно я загружал и устанавливал под форточку, но полагаю интерфейсы программы аналогичны для всех операционных систем.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №7

На момент написания статьи доступна версия программы 1.3.0, что может нам говорить о том, что некоторые детские болезни ПО уже удалось преодолеть. Это к тому, что CubeIDE сравнительно новая программа, анонсированная в 2019 г., и поэтому у сообщества STM-щиков, естественно, есть настороженность по поводу наличия в ней багов и недоработок.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №8

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

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №9

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №10

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

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №11

После нажатия на Next появиться окно с возможностью присвоить название, выбрать рабочий путь проекта, а так же выбрать опции проекта. Для первых шагов пункты опций можно оставить по умолчанию.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №12

Далее IDE может спросить нас об открытии кодогенератора STM32CubeMX, возражать не имеет смысла, он в последствии будет нашим лучшим помощником.

И после этого будет создан наш первый проект, окно будет выглядеть примерно так, и главную площадь будет занимать собственно наш программируемый чип. Графическое представление именно то, что мне особенно понравилось в программировании STM-ок через эту среду.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №13

Первым делом, нам нужно объяснить МК откуда им будет получено тактирование во время работы. На платах Blue Pill установлен кварцевый резонатор с частотой 8 MHz, он уже подключен к выводам PD0, PD1. Чтобы обозначить это для IDE, в разделе System Core заходим в RCC (Reset and clock conrol) выбираем высокоскоростное тактирование (HSE) и далее кварцевый резонатор. После этого соответствующие ноги МК будут подсвечены зеленым с указанием их назначения.

Настройка регистра RCC на внешний кварцевый резонатор.

Настройка регистра RCC на внешний кварцевый резонатор.

В микроконтроллере STM32F103 есть блок фазовой автоподстройки частоты (PLL) он служит для создания основной частоты работы микропроцессора путем умножения частоты внешнего или внутреннего источника тактирования на программно определяемый множитель.

Настройка ФАПЧ и частот внутренних модулей

Для завершения настройки нам необходимо проверить во вкладке Clock Configuration, что частота HSE установлена в 8 MHz, а частота работы МК составляет 72 MHz.

Для первого нашего проекта мы по классике помигаем установленным на плате светодиодом. Он подключен к выводу PC13. Для его настройки правой кнопкой по выводу выберем GPIO_Output (вывод общего назначения_выход). В разделе настройки GPIO присвоим пользовательское название вывода (User Label) как LED13. В таблице конфигурации GPIO проверяем внесенные изменения.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №16

Теперь дадим команду кодогенератору сформировать файлы проекта на основании тех настроек, что мы сделали.

Инструмент генерирования кода проекта

После этого мы уже можем писать свою программу в файле main.c. Там будут вставлены функции для настройки выводов и тактирования:

Код проекта, сгенерированный CubeMX

Теперь в файле main.c находим функцию main(void) и бесконечный цикл в ней while(1). Это и есть место для нашей первой программы.

Структура файла main.c

Ее код может, например, выглядеть так:

Мигание светодиодом PC13 с периодом 400мс

HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_RESET);

Это оказалось возможно благодаря тому, что библиотека HAL имеет в своем составе функцию задержки Delay с заданием аргумента миллисекундах.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №21

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

Для этого первым делом нужно установить перемычки на плате в положение программирования flash памяти.

Перемычки в режиме программирования STM32

После этого нажимаем зеленую кнопку Run main.c и наш скомпилированный код отправится через ST-Link в память МК.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №23

Естественно, при этом программатор должен быть подключен в разъем USB. Если все прошло удачно, то ST-Link помигает своим светодиодом и IDE доложит о успешной загрузке/проверке, и в т.ч. выведет информацию о подключенном программаторе.

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №24

Записанный код сразу начнет работать, и мы увидим мигание LED каждые 200мс. После этого перемычки можно привести в положение загрузки из внутренней Flash, и тогда после перезагрузки светодиод опять будет мигает, иначе МК будет ожидать новой загрузки.

Перемычки в положении чтение из Flash STM32

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

В дополнение расскажу пару полезных моментов для общего развития:

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №26

2. Для точного понимания куда чего подключено на Blue Pill лучше всего воспользоваться схемой:

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги», изображение №27

3. Для определения возможных функций выводов МК удобно пользоваться картой выводов:

STM32CubeMX

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

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

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

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

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

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

STM32CubeMX pinout.

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

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

Настройки ST-Link.

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

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

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

Читайте также: