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, притом купить ее можно в любом Чип-и-Дипе хоть сегодня.
Принимая во внимание разнообразие плат 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:
Важно! Если вы используете 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.
По факту получается, что базовая плата Blue Pill с чипом STM32F103C8T6 может быть приобретена менее чем за 2$ у друзей из поднебесной. К этому комплекту еще необходим программатор ST-Link V2, и как и для всего остального на него существует максимально дешевая китайская копия. Программатор понадобиться в первую очередь для записи программ и внутрисхемной отладки по интерфейсу JTAG с поддержкой, разработанного ARM протокола SWD (Serial Wire Debug).
Кроме использования ST-Link существует возможность записывать программы через выводы A9, A10 платы (ножки 30, 31 USART1 микроконтроллера), для этого понадобиться преобразователь USB-UART типа FTDI FT232RL или подобный.
Прежде чем начать предметно разбирать Cube IDE я приведу составленную мной таблицу сравнения характеристик микроконтроллеров от различных базовых плат Arduino c STM32F103C8.
Во многом именно эти числа и побудили меня на изучение гораздо более производительной и функциональной платформы.
Итак, для успешного начала работы нам необходимо скачать установочный файл с официальной страницы CubeIDE на сайте ST. Для скачивания доступно несколько вариантов под Linux, macOS и Windows. Конкретно я загружал и устанавливал под форточку, но полагаю интерфейсы программы аналогичны для всех операционных систем.
На момент написания статьи доступна версия программы 1.3.0, что может нам говорить о том, что некоторые детские болезни ПО уже удалось преодолеть. Это к тому, что CubeIDE сравнительно новая программа, анонсированная в 2019 г., и поэтому у сообщества STM-щиков, естественно, есть настороженность по поводу наличия в ней багов и недоработок.
Кстати, после установки программа предложила себя обновить и после моего согласия версия получилась уже 1.3.1. И хотя я еще не дошел до чтения истории ревизий, могу предположить, что в данном случае это можно считать положительным моментом.
После этого мы попадем в меню выбора микроконтроллера и тут наиболее быстрый способ — это написать в строке поиска нужный нам чип, в данном случае STM32F103C8. После того как среда разработки найдет его, в окне появится краткое описание и некоторые параметры его производительности и наличие внутренних модулей.
После нажатия на Next появиться окно с возможностью присвоить название, выбрать рабочий путь проекта, а так же выбрать опции проекта. Для первых шагов пункты опций можно оставить по умолчанию.
Далее IDE может спросить нас об открытии кодогенератора STM32CubeMX, возражать не имеет смысла, он в последствии будет нашим лучшим помощником.
И после этого будет создан наш первый проект, окно будет выглядеть примерно так, и главную площадь будет занимать собственно наш программируемый чип. Графическое представление именно то, что мне особенно понравилось в программировании STM-ок через эту среду.
Первым делом, нам нужно объяснить МК откуда им будет получено тактирование во время работы. На платах Blue Pill установлен кварцевый резонатор с частотой 8 MHz, он уже подключен к выводам PD0, PD1. Чтобы обозначить это для IDE, в разделе System Core заходим в RCC (Reset and clock conrol) выбираем высокоскоростное тактирование (HSE) и далее кварцевый резонатор. После этого соответствующие ноги МК будут подсвечены зеленым с указанием их назначения.
В микроконтроллере STM32F103 есть блок фазовой автоподстройки частоты (PLL) он служит для создания основной частоты работы микропроцессора путем умножения частоты внешнего или внутреннего источника тактирования на программно определяемый множитель.
Для завершения настройки нам необходимо проверить во вкладке Clock Configuration, что частота HSE установлена в 8 MHz, а частота работы МК составляет 72 MHz.
Для первого нашего проекта мы по классике помигаем установленным на плате светодиодом. Он подключен к выводу PC13. Для его настройки правой кнопкой по выводу выберем GPIO_Output (вывод общего назначения_выход). В разделе настройки GPIO присвоим пользовательское название вывода (User Label) как LED13. В таблице конфигурации GPIO проверяем внесенные изменения.
Теперь дадим команду кодогенератору сформировать файлы проекта на основании тех настроек, что мы сделали.
После этого мы уже можем писать свою программу в файле main.c. Там будут вставлены функции для настройки выводов и тактирования:
Теперь в файле main.c находим функцию main(void) и бесконечный цикл в ней while(1). Это и есть место для нашей первой программы.
Ее код может, например, выглядеть так:
HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_RESET);
Это оказалось возможно благодаря тому, что библиотека HAL имеет в своем составе функцию задержки Delay с заданием аргумента миллисекундах.
И, если все сделано правильно, компилятор сообщит об успехе. Следующим шагом будет загрузка написанной программы в микроконтроллер.
Для этого первым делом нужно установить перемычки на плате в положение программирования flash памяти.
После этого нажимаем зеленую кнопку Run main.c и наш скомпилированный код отправится через ST-Link в память МК.
Естественно, при этом программатор должен быть подключен в разъем USB. Если все прошло удачно, то ST-Link помигает своим светодиодом и IDE доложит о успешной загрузке/проверке, и в т.ч. выведет информацию о подключенном программаторе.
Записанный код сразу начнет работать, и мы увидим мигание LED каждые 200мс. После этого перемычки можно привести в положение загрузки из внутренней Flash, и тогда после перезагрузки светодиод опять будет мигает, иначе МК будет ожидать новой загрузки.
В общем, на этом основная часть статьи заканчивается, светодиод мигает, а я с Вами получил первый практический и теоретический опыт в программировании крайне популярного микроконтроллера STM32.
В дополнение расскажу пару полезных моментов для общего развития:
2. Для точного понимания куда чего подключено на Blue Pill лучше всего воспользоваться схемой:
3. Для определения возможных функций выводов МК удобно пользоваться картой выводов:
Всем нам известная фирма ST Microelectronics выпустила и активно развивает абсолютно новый продукт под названием STM32CubeMx, и я не мог обойти это вниманием 🙂 Сегодня разберемся, что это вообще такое и для чего это нужно.
И для начала рассмотрим, что же за библиотеки нам предлагаются. Распаковываем архив и начинаем ковырять:
Выбираем новый проект. Сразу же открывается окно с огромным количеством настроек, в котором нам необходимо выбрать микроконтроллер, который мы собираемся использовать в нашем проекте. Я выбрал STM32F407VGTx. Появляется новое окно:
И тут мы уже видим в правой части изображение нашего контроллера со всеми выводами, а слева список всей доступной периферии. Также в левой части окна можно выбрать будет ли использоваться, например, FreeRTOS в нашем проекте.
Давайте для примера выберем что-нибудь. Пусть будет задействован первый канал АЦП и три вывода, работающих в режиме выхода.
- кроме того, если планируется использовать отладчик, необходимо в пункте SYS выбрать отладочный интерфейс. Например, для отладчика ST-Link настройки будут выглядеть так:
Готово! теперь нажимаем на кнопку Generate Source Code, и Cube предложит нам скачать необходимые библиотеки (как раз те, которые мы обсудили в начале проекта). Пусть скачиваются, просто ждем.
После окончания генерации открываем папку с нашим проектом и видим, что там появились новые файлы и папки. В папке Drivers содержатся все необходимые библиотеки, а в папках src и inc, соответственно, сами файлы с кодом нашей инициализации. Откроем, например, файл main.c:
В общем, пожалуй, на сегодня это все 🙂 Разобрались в общих чертах с новыми библиотеками и с созданием тестового проекта при помощи STM32CubeMx, так что до скорых встреч на нашем сайте!
Читайте также: