Рабочая среда
STM32CubeMX (Win, Linux, Mac). Программа для инициализации периферии и генерации первичного кода в графическом режиме. Разработана компанией ST специально для stm32. Генерирует код основаный на библиотеке HAL, либо LL. Очень удобный, полезный и бесплатный инструмент. Генерирует код для различных IDE представленных ниже, а так же Makefile для поклонников “хардкора”
Atollic TrueSTUDIO (Win, Linux). Среда основанная на Eclipse. Выкуплена компанией ST и распространяется бесплатно. С недавнего времени поддержка прекращена в пользу STM32CubeIDE. Тем не менее, лично я всё ещё пользуюсь TrueSTUDIO.
STM32CubeIDE (Win, Linux, Mac). Собственная разработка компании ST объединяющая в себе TrueSTUDIO и STM32CubeMX.
Keil MDK (Win). Популярная среди разработчиков среда. Является бесплатной отчасти. Если написаный код не превышает 30Кб, то бесплатно, если больше, то надо покупать лицензию.
SW4STM32 (Win, Linux, Mac). Эта среда так же основана на Eclipse, и похожа на TrueSTUDIO. Думаю в дальнейшем Alexey или ещё кто-нибудь расскажет о ней больше.
IAR (Win). Простая (в плане количества надстроек) и мощная среда, с собственным компилятором, но при этом не самым удобным редактором кода. Очень быстрая сборка и отладка.
STM32 IDE
Программирование stm32 стоит начать с изучения программного обеспечения для написания программ под данный микроконтроллер. На сегодняшний день разработано достаточно большое количество программ для написания программного кода под микроконтроллер Stm32 ( STM32 IDE ) и связанно это с большой популярностью данных микроконтроллеров.
В данной статье мы поговорим о наиболее популярных STM32 IDE, что бы вы смогли выбрать ту среду, которая больше всего подходит для вас.
- STM32CUBEMX;
- STM32CUBEIDE;
- KEIL;
- IAR Embedded Workbench for ARM;
- CodeGrip.
STM32CUBEMX
CubeMX
CubeMx не случайно попал в нашу подборку. Данный программный продукт не позволяет разрабатывать приложения под контроллеры STM32. Но он является отличным генератором кода под все микроконтроллеры STM32.
С помощью CubeMX пользователю предоставляется возможность настроить и сгенерировать библиотеку для работы с периферией STM32. Т.е. нет необходимости писать с нуля код для работы с UART или SPI, не нужно писать функцию чтения ADC или функции работы PWM. За вас все это сделает CubeMX. Нужно только правильно настроить необходимые блоки в визуальном редакторе.
Большим плюсом является то, что эта программа абсолютно бесплатная и разрабатывается производителем STM32 – STMicroelectronics. Это означает, что обновление будет выходит на постоянной основе, а так же при появлении новых микроконтроллеров, в этой среде они будут появляется раньше остальных. Сгенерировать библиотеки можно под разработку в таких STM32 IDE, как STM32CUBEIDE и KEIL.
STM32CUBEIDE
CubeIDE
CUBEIDE STM32, среда разработки под контроллеры STM32 от компании производителя чипов STMicroelectronics. Данный программный продукт поставляется совершенно бесплатно. Что является большим плюсом.
На время написания статьи программу можно скачать, зарегистрировав аккаунт и указав европейскую страну. Так же необходимо использовать ВПН. Интерфейс CUBEIDE интуитивно понятен и содержит всё, что нужно для комфортной разработки (дебагер с отладкой в real time, просмотр переменных и т.д.).
Так же стоит отметить, что CUBEIDE все время развивается и поддерживается разработчиком. К минусам отнесем отсутствие документации на русском языке.
IDE KEIL
Keil — одна из самых мощных IDE для разработки программ под микроконтроллеры STM32. Keil имеет свой собственный компилятор, позволяющий комфортно отлаживать программный код. В IDE используется язык программирования С\С++. Так же Keil имеет в своем распоряжение симулятор, который позволяет эмулировать некоторое железо, например UART.
Минусом данной IDE является платная лицензия. А так же то, что программа работает только в ОС Windows. На просторах интернета можно скачать активатор для Keil, но в таком случае у пользователей наблюдаются вылеты и подвисания программы.
IAR Embedded Workbench for ARM (IAR-EWARM)
IAR IDE
Еще один хороший редактор кода с компилятором C\C++ для микроконтроллеров STM32. Этот редактор кода имеет в своем распоряжении более 4000 примеров по работе с периферией STM32. Так же IDE IAR в автоматическом режиме проверяет ваш код на правила MISRA C (MISRA C: 2004). Это правила написания отказа устойчивого программного кода.
Редактор поддерживает все контроллеры STM32, библиотеки для работы с периферией, а так же плагин для работы с RTOC (операционная система реального времени).
Минусом использования IDE IAR это то, что она является платной.
CodeGrip
CodeGRIP IDE
Еще один редактор кода для микроконтроллеров STM32 от компании MICROE. Одним из отличий данного редактора является то, что редактор имеет такие компиляторы как: microC, microPascal, microBasic. Компиляторы разработаны под экосистему Microe, оптимизированы под отладочные комплекты компании. Большим минусом является платная лицензия на компилятор.
Какую выбрать среду разработки для STM32?
В заключение необходимо сказать о выборе STM32 IDE. Каждый из редакторов имеет и плюсы и минусы, в частности я выбрал для себя CUBEIDE в связке с CUBEMX. Данная среда разработки удовлетворяет всем моим запросам, а так же что немало важно она является бесплатной.
STM32F1xx — Инструменты разработчика и FreeRTOS
Традиционно начнем с железа.
В прошлых статьях ядром системы была плата STM32VLDISCOVERY.
Плата, безусловно, хороша, и подкупает тем, что ее цена всего 300 рублей. В принципе, хороший инструмент для того, чтобы начать знакомиться с этим семейством микроконтроллеров. Но.
Дело в том, что при выборе отладочной платы, всегда хочется соблюсти баланс количества и качества, то есть с одной стороны, иметь все необходимое для работы, с другой – не хочется чтобы плата превращалась в огромного и дорогого монстра. У STM32VLDISCOVERY баланс смещен в сторону дешевизны и минимализма.
Полазив по e-bay, я нашел для себя более удобную, на мой взгляд, плату, которую и представляю вашему вниманию. Вот она:
Mini-STM32

- Микроконтроллер STM32F103VE, имеющий на борту 512 килобайт флеша и 64 килобайта RAM, USB, SDIO (то есть с карточки читать будет намного быстрее, чем по SPI). Кроме того, так как на плате установлена 100-ногая его версия, у него хватает внешних пинов для управления памятью через FSMC. FSMC – это Flexible Static Memory Controller, очень удобный контроллер статической памяти, начиная с, собственно, SRAM и заканчивая NAND флешками. Настроив его и подключив память к управляющим пинам, мы получаем нашу память, мапированную на адресное пространство контроллера. То есть, с этого момента, все взаимодействия с ней будут для нас прозрачны и эквивалентны простой записи в RAM.
- Цветной TFT-дисплей с разрешением 320х240 и предустановленным резистивным тач-скрином. Дисплей ставится на плату в виде модуля, при желании, можно отвинтить стоечки, к которым он крепится, и использовать плату без него. В дисплейный модуль, помимо дисплея входит еще и повышающий преобразователь для питания его подсветки, а также контроллер тач-скрина, который управляется по SPI. Кроме того, разъем подключен к упомянутому выше FSMC, что делает взаимодействие с ним в разы удобнее.
Для примера – вот так выглядит запись в регистры дисплея, а после – в его память, с использованием DMA:
Теперь то, что касается IDE. Изначально я выбрал Keil uVision, так как когда-то уже работал с ней.
Ну, что я могу сказать – я проработал в кейле достаточно, и в принципе с ним можно примириться. Но, положа руку на сердце – ИДЕ там ужасна. Также ужасна как и ИДЕ IAR’a, на мой взгляд.
IAR и Keil – признанные лидеры в разработке компиллеров, этого у них не отнять, но я до сих пор не могу понять, почему, имея такие компиллеры, они продолжают тянуть свои IDE, застрявшие по удобству на уровне 2002 года. Как пример могу привести Texas Instruments – у них раньше тоже была своя IDE, в довесок к компиллеру. Потом им это надоело, они взяли Eclipse, допилили его, прикрутили к своим компиллеру и профайлеру, и получили отличный продукт. Почему так не поступят Keil и IAR для меня остается загадкой, но на мой взгляд их IDE не такие удобные, как могли бы быть. Раздражает не очень удобная подсветка синтаксиса, полное отсутствие code-completion’а, не самая удобная навигация по коду. Плюс, uVision частенько у меня падала, но это можно списать на драйвер программатора.
Как бы то ни было, я стал искать альтернативу и нашел ее в виде CooCox IDE.

Это бесплатная среда разработки на базе эклипса, которая призвана работать, разумеется, с GCC.
Из плюсов отмечу все достоинства эклипса – удобная навигация, есть автозавершение кода и т.п.
Кроме того прикручен удобный просмотрщик периферии процессора, мне понравился больше чем Кейловский. Очень удобно наличие репозитория компонентов – говоря по-простому, при старте проекта мы как в визарде выбираем нужный нам процессор из списка, после чего отмечаем галочками те из модулей Standard Peripheral Library, которые хотели бы использовать, и они автоматически подключаются к проекту (Об этом чуть подробнее в следующем разделе статьи). Также сразу же можно просмотреть примеры, идущие в комплекте с этим модулем SPL и справку по его функциям.
Минусы CooCox IDE вобрала также из Eclipse, к коим относится тяжеловесность – у меня она потребляет около 180 метров оперативной памяти, занимая на диске 800 мегабайт.
Еще одним минусом является ее работа с этим самым J-Link-ком. Отладка происходит через приложение от создателей J-Link’a, предоставляющее стандартный gdb-шный интерфейс, но почему-то среда при каждом дебаге это приложение перезапускает, в отличие от того же кейла (который вообще работает через свои дллки).
Поэтому старт отладки в Кейле начинается через секунду, в CooCox же – через секунд 20. Возможно, это можно как-нибудь исправить настройками, но я пока таких настроек не видел, поэтому буду благодарен, если кто подскажет.
Тем не менее, я все таки остановился на CooCox — если вас тоже не устраивает IDE от Keil или IAR, или вы не хотите пользоваться ломанным ПО и предпочитаете опенсорс – качайте не задумываясь.
CooCox и FreeRTOS
Об операционной системе FreeRTOS было сказано много, в частности, на хабре (вот, например, одна из статей: FreeRTOS: введение)
Я решил тоже приобщиться к этой технологии и расширить свой арсенал инструментов, тем более, что FreeRTOS не навязывает никакого HAL (Hardware Abstraction Layer, слой абстракции от оборудования, драйверы то бишь), и предоставляет только средства работы с задачами, синхронизацию и меж-процессное взаимодействие, поэтому во многих случаях будет очень удобна.
Рассмотрим поподробнее, что же нам необходимо, чтобы использовать FreeRTOS вместе с CooCox IDE на нашей плате Mini-STM32.
На самом деле, все очень просто. Архитектурное портирование (портирование кода, требуемого шедулером под архитектуру Cortex M3) уже давно выполнено, и нам нужно, по сути, просто правильно составить проект для CooCox.
Начинаем с того, что скачиваем исходники FreeRTOS с их официального сайта.
Вот прямая ссылка: http://sourceforge.net/projects/freertos/files/.
Тем временем создаем новый проект в CooCox, я назвал его FreeRTOS-Mini.

Выбираем в визарде производителя ST, в списке чипов – чип, на котором построена отладочная плата, STM32F103VE.


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

Выбираем там CMSIS Core и CMSIS Boot – это собственно ядро CMSIS и стартовый код, который производит настройку и дергает main()
Кстати, обратите внимание – в CooCox стартовый код написан целиком на C, ни одной асмовой строчки. Лежит в файле cmsis_boot\startup\startup_stm32f10x_hd.c – запомните этот путь, нам нужно будет там кое-что подправить. Заодно добавляем в проект модуль GPIO, чтобы было что поделать в тестовом таске FreeRTOS. Этот модуль автоматом потянет за собой зависимый RCC, отвечающий за настройку клоков.
Теперь возвращаемся к скаченным исходникам FreeRTOS. Для начала скопируем всю папку в папку с нашим проектом. После, начнем удалять лишнее. Итак, лично у меня под нож сразу пошло содержимое папки Demo – там лежат демо-приложения для разных контроллеров, вся папка вам не нужна в любом случае, но при желании можно оставить то, что относится к STM32F103. Единственное, что нам оттуда обязательно понадобится – файл настроек ядра FreeRTOS, который можно взять из любого подходящего проекта, допустим отсюда: Demo\CORTEX_STM32F103_Primer_GCC\FreeRTOSConfig.h
Его можно скопировать в любую папку инклудов, я лично положил в самый корень проекта, рядом с main.c
Далее, в папке source\portable есть множество под-папок, где лежит код, рассчитанный на разные компиллеры и среды. Заходим в папку source\portable\GCC\ARM_CM3, копируем ее двумя уровнями выше, в source\portable. Обращаем внимание на папку source\portable\MemMang – она нам тоже понадобится. Поэтому удаляем все, кроме source\portable\MemMang и свежескопированной source\portable\ARM_CM3
После этого кликаем правой кнопкой в прожект эксплорере CooCox, нажимаем Add Linked Folder и добавляем нашу папку с подготовленными исходниками FreeRTOS. В итоге должно получиться вот такое дерево проекта:

Теперь начинаем править файлы проекта. Начнем с настроек ядра. Оттуда нам нужно будет убрать только пару строчек, связанных со старым проектом – левый, ненужный нам инклуд.
Все остальное можно оставить без изменений, а можно прочитать статью о настройке ядра FreeRTOS и поменять опции по необходимости, этим мы сейчас заниматься не будем.
Теперь идем в стартап код (cmsis_boot\startup\startup_stm32f10x_hd.c) и делаем следующее: находим строки:
У меня это строки 114-122, и добавляем после них такой код:
Это обработчики прерываний из ядра ОС, которые объявлены в файле port.c. Теперь нам нужно запихнуть их в вектор прерываний, который идет ниже (строки 129-209):
Соответственно, меняем вектор так, как написано в вышеизложенном коде, заменив строки, отмеченные SVCall Handler, PendSV Handler, SysTick Handler на vPortSVCHandler, xPortPendSVHandler и xPortSysTickHandler соответственно.
UPD:
В комментариях мне подсказали более изящный вариант, чем ковыряние стартового файла. Достаточно просто переопределить обработчики следующими дефайнами:
После открываем в дереве проекта папку Source\MemMang, и выбираем ту реализацию мемори менеджмента, которая нам подходит. Подробнее об этом написано тут: FreeRTOS Memory Management.
Если коротко – файл номер 1 это упрощенная реализация с выделением памяти, но без освобождения, файл номер 2 – более продвинутая реализация, позволяющая освобождение памяти, и номер 3 – реализация, которая потребует от вас библиотеки с реализованными malloc и free. Я выбрал вторую реализацию, оставшиеся два файла исключаем из компиляции, кликнув правой кнопкой на имя файла в дереве проекта и выбрав пункт Exclude from build.
Осталось совсем чуть-чуть – открываем файл main.c, добавляем туда нужные нам инклуды от SPL:
Инклуды от FreeRTOS:
После объявляем функцию, которая будет вызвана до старта шедулера, в соответствии с рекомендациями в таком виде:
И функцию, которая будет исполнять роль нашего тестового таска, вот так:
Реализация функций выглядит так:
В тестовых целях ничего полезного не написал, задача просто зажигает светодиод на плате.
Осталась сама функция main(), которая стартанет задачу и шедулер:
Вот в принципе и все. Осталось настроить дебаг – для этого жмем «Debug configuration», во вкладке Debugger выбираем наш программатор (J-Link) и порт JTAG.
Ставим галочку Run To Main, чтобы не барахтаться в стартап-коде, в строке GDBServer cmdline tool указываем путь к экзешнику, идущему с программатором (скачать можно с сайта Segger), у меня это C:\SEGGER\JLinkARM_V440b\JLinkGDBServerCL.exe
После жмем Apply и Close.
Теперь компиллим наш проект и жмем на дебаг – если все получилось, после аплода и выполнения, должен загореться светодиод.
Заключение
Правильный выбор инструментов разработчика, безусловно, обеспечит наиболее быстрое и комфортное освоение новых технологий. Я надеюсь, что, осветив в данной статье отладочную плату Mini-STM32 и CooCox IDE, я помог разработчикам приглядеться к новому инструменту. Что касается операционной системы FreeRTOS – это бесспорно очень мощное средство, и, на мой взгляд, хорошая ступень, для перехода от программирования прошивок «в лоб» к использованию эмбеддед операционных систем.
stm32
Интегрированные среды разработки (IDE)

report this ad
замечания
Перечисленные IDE от ST Microelectronics:
| номер части | Общее описание | Маркетинговый статус | поставщик | Тип программного обеспечения |
|---|---|---|---|---|
| CoIDE | CooCox CoIDE — бесплатная и высокоинтегрированная среда разработки программного обеспечения для MCU ARM Cortex | активный | CooCox | Комплекты для разработки ПО |
| CosmicIDE | Cosmic ARM / Cortex «M» Инструменты для кросс-разработки для микроконтроллера STM32 | активный | космический | Комплекты для разработки ПО |
| Crossworks | Rowley Associates CrossWorks, интегрированная среда разработки с загрузкой и отладкой JTAG Flash | активный | Rowley | Комплекты для разработки ПО |
| DS-5 | ARM Development Studio 5 (DS-5) предоставляет лучшие в своем классе инструменты для самых разных платформ на базе процессоров ARM | активный | РУКА | Комплекты для разработки ПО |
| EMP-Thunder | Emprog ThunderBench, полностью интегрированный и хорошо продуманный инструмент разработки C / C ++ для ARM Cortex | активный | Emprog | Прошивка |
| HiTOP5 | Универсальный пользовательский интерфейс, IDE и отладчик для всех инструментов разработки Hitex | активный | Hitex | Комплекты для разработки ПО |
| IAR-EWARM | Интегрированная среда разработки IAR и оптимизация компилятора C / C ++ для ARM Cortex-M | активный | IAR | Комплекты для разработки ПО |
| MDK-ARM-STM32 | Среда разработки программного обеспечения MDK-ARM для MCU на базе Cortex-M | активный | Keil | Комплекты для разработки ПО |
| MULTI | Интегрированная среда разработки и отладки GreenHills для встроенных приложений с использованием C и C ++ | активный | Программное обеспечение GreenHills | Комплекты для разработки ПО |
| Мужчины-Nucleus-SF | Nucleus SmartFit для STM32 | активный | Mentor Graphics | Прошивка |
| PER-Tracealyzer | Анализатор трассировки времени выполнения Percepio для MCM STM32 | активный | Percepio | |
| PLSUDE-STM32 | Платформа отладки и эмулятора с оптимизированной поддержкой трассировки и флэш-памяти для MCM STM32 на базе Cortex-M с помощью средств разработки PLS | активный | Pls | Комплекты для разработки ПО |
| RIDE-STM32 | Интегрированная среда разработки, основанная на безопасности, для MCU STM32 | активный | Raisonance | Комплекты для разработки ПО |
| SOMN-DRT-IDE | SOMNIUM DRT Cortex-M IDE | активный | Somnium | Комплекты для разработки ПО |
| SW4STM32 | System Workbench для STM32: бесплатная среда разработки в Windows, Linux и OS X | активный | AC6 | Комплекты для разработки ПО |
| TASKINGVX-STM32 | Инструменты компилятора Altium C / C ++ и отладчика для MCU на базе ARM | активный | TASKING | Прошивка |
| TrueSTUDIO | Прежний инструмент разработки C / C ++ для разработки STM32 с непревзойденным набором функций и беспрецедентной интеграцией | активный | Atollic | Комплекты для разработки ПО |
| ISYS-winIDEAOpen | бесплатная неограниченная платформа разработки iSYSTEM для всех устройств STM32 Cortex-M | активный | iSYSTEM | Комплекты для разработки ПО |
| mikroBasicPRO | MikroElektronika полнофункциональный базовый компилятор, который делает разработку STM32 подходящей для всех | активный | Mikroelectronika | Комплекты для разработки ПО |
| mikroCPRO | MikroElektronika полнофункциональный ANSI C-компилятор для устройств STM32. Он имеет интуитивно понятный IDE, мощный компилятор с расширенной оптимизацией | активный | Mikroelectronika | Комплекты для разработки ПО |
| mikroPascalPRO | MikroElektronika полнофункциональный компилятор Pascal для устройств STM32. Он имеет интуитивно понятную IDE с поддержкой стыковки, богатую функциями, расширенным текстовым редактором, множеством доступных инструментов, библиотек и примеров | активный | Mikroelectronika | Комплекты для разработки ПО |
| winIDEA-STM32 | Комплексное решение для разработки и тестирования iSYSTEM для MCU STM32 | активный | iSYSTEM | Прошивка |
SW4STM32: System Workbench для STM32
Вступление
System Workbench для STM32 — это бесплатная среда разработки в Windows, Linux и OS X. Описание от ST Microelectronics :
- Всесторонняя поддержка микроконтроллеров STM32, плат STM32 Nucleo, наборов Discovery и оценочных плат, а также прошивки STM32 (стандартная периферийная библиотека или STM32Cube HAL)
- Компилятор GCC C / C ++
- Отладчик на основе GDB
- Eclipse IDE с управлением коллективной работой
- Совместимость с плагинами Eclipse
- Поддержка ST-LINK
- Нет ограничения размера кода
- Поддержка нескольких ОС: Windows®, Linux и OS X®
Монтаж
- Перейдите по ссылке : http://www.openstm32.org/HomePage .
- Зарегистрируйтесь и войдите на сайт.
- Перейдите на страницу: http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer .
- Загрузите последнюю версию для вашей операционной системы.
- Запустите загруженный установщик.
IAR-EWARM
Вступление
IAR Интегрированная среда разработки и оптимизация компилятора C / C ++ для ARM Cortex-M. Описание от ST Microelectronics :
