Ide для stm32 что выбрать

Обновлено: 03.07.2024

В статье показано, как с помощью бесплатных кроссплатформенных инструментов развернуть среду разработки для микроконтроллеров STM32.

Программы и библиотеки, о которых будет идти речь, уже объединены в готовые бесплатные среды разработки, например CooCox CoIDE или SW4STM32. Первая только для Windows, а вторая для множества операционных систем, но ссылки для скачивания появляются только после регистрации.

Мы соберем свою среду, чтобы лучше ее понимать и контролировать.

Eclipse

Грубо говоря, Eclipse — это продвинутый редактор кода. Eclipse никак не привязан к STM32 и с его помощью можно вести разработку на разных языках программирования и для разных целей.

Перейдем на страницу загрузки пакетов Eclipse и скачаем Eclipse IDE for C/C++ Developers.

Программа запускается с помощью исполняемого файла eclipse, который находится в распакованной папке. При первом запуске надо будет выбрать рабочую папку. В этой папке Eclipse будет по умолчанию создавать проекты. Этот выбор не ограничивает местоположение проектов, их можно размещать в любом другом месте.

При первом запуске будет открыта вкладка Welcome, которую нужно просто закрыть.

GCC ARM

GCC ARM — это набор инструментов для сборки программы, таких как компилятор, линковщик, отладчик и много другое. GCC ARM имеет косвенное отношение к STM32 и позволяет разрабатывать программы под любые ARM-процессоры.

Идем на официальный сайт и выбираем версию для своей операционной системы.

Просто распаковываем архив в удобное место.

GNU ARM Eclipse

GNU ARM Eclipse — это дополнение для Eclipse, которое поможет связать его с GCC ARM.

eclipse-help-install-new-software

В появившемся окне нажмем кнопку Add, чтобы добавить источник дополнения.

eclipse-add-repository-gnu-arm-eclipse-plug-ins

После нажатия OK необходимо немного подождать пока в таблице загрузится список пакетов.

Ставим галочку напротив GNU ARM C/C++ Cross Development Tools и нажимаем Next.

Затем проходим процедуру установки нажимая Next и соглашаясь с условиями лицензии.

eclipse-security-warning

Установка займет некоторое время. В какой-то момент в диалоговом окне появится вопрос, продолжить ли установку неподписанного содержимого, смело жмем OK.

В конце установки будет предложено перезапустить Eclipse. Соглашаемся.

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

Теперь есть все необходимое, чтобы создать проект.

Чтобы создать проект на языке C, выберем меню File -> New -> C Project.

eclipse-file-new-c-project

Можно создать проект на языке C++, но возникнет множество нюансов, которые усложнят разработку. О них я расскажу в другой статье.

В появившемся окне будет предложено задать имя проекта, его расположение, тип проекта и набор инструментов.

eclipse-c-project

Проект я назову example. Тип — пустой проект (Empty Project). Набор инструментов — Cross ARM GCC, что соответствует ранее установленному GCC ARM.

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

eclipse-select-configurations

eclipse-toolchain

После нажатия Finish проект будет создан. Его иерархическая структура отображается во вкладке Project Explorer. В этой же вкладе может отображаться множество проектов.

Сборка проекта

Чтобы собрать проект, необходимо создать хотя бы один файл с исходным кодом. Создадим файл main.c c функцией main().

eclipse-new-source-file

Вызовем контекстное меню на имени проекта и выберем New -> Source File.

eclipse-new-source-file

В поле Source File укажем имя файла main.c и нажмем Finish.

В файл добавим следующий код:

eclipse-%d0%b8%d0%ba%d0%be%d0%bd%d0%ba%d0%b0-build

Сохраним файл комбинацией Ctrl+S. И соберем проект комбинацией Ctrl+B или нажав на иконку

Eclipse может автоматически сохранять файлы перед сборкой, но для это нужно выбрать меню Windows -> Preferences, перейти в General -> Workspaces и поставить галочку напротив Save automatically before built.

При сборке проекта мы получим ошибку, потому что не хватает двух библиотек (CMSIS и STM32Cube), о которых далее пойдет речь.

CMSIS

CMSIS — это базовая библиотека для ARM-микроконтроллеров.

Ее можно скачать с сайта ARM после регистрации.

CMSIS распространяется в виде архива, который нужно распаковываем в удобное место.

Подключение библиотеки будет разобрано в соответствующем разделе далее.

В CMSIS есть папка

Device/ARM/ARMCMx/Source/GCC/

Есть несколько папок ARMCMx, которые соответствуют разным ядрам микроконтроллеров. Имя папки расшифровывается как ARM Cortex-M. Выбираем папку в соответствии с микроконтроллером.

Из этой папки в папку проекта требуется скопировать пару файлов:

Чтобы файлы появились в Eclipse, нажмите F5 в Project Explorer, либо в контекстном меню проекта выберете Refresh. Это обновит список файлов.

Оба файла придется отредактировать.

gcc_arm.ld

Это скрипт для линковки проекта. Он отвечает за распределение разных областей памяти в микроконтроллере.

В этом файле задается объем постоянной и оперативной памяти микроконтроллера, а также их начальные адреса. Эти параметры нужно отредактировать в соответствии с используемым микроконтроллером.

Параметры задаются в самом начале файла с помощью следующего кода:

В переменной ORIGIN задается начальный адрес области памяти, а в LENGTH — ее объем в байтах. FLASH — это постоянная память, RAM — оперативная.

В STM32 начальный адрес постоянной памяти — 0x08000000, оперативной (как и указано) — 0x20000000.

startup_ARMCMx.c

Это файл с исходным кодом на языке C, который содержит базовый код программы и таблицу прерываний. Кроме того в файле задается объем стека и кучи. Код из этого файла выполняется до вызова функции main() и вызывает функцию main().

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

Размер кучи и стека должен соответствовать потребностям проекта и объему оперативной памяти микроконтроллера.

Размер кучи и стека задается следующим кодом:

__STACK_SIZE определяет объем стека. __HEAP_SIZE — объем кучи. В сумме оба значения не должны превышать объем оперативной памяти.

STM32Cube

STM32Cube — это библиотека с открытым исходным кодом для микроконтроллеров STM32, которую выпускает производитель микроконтроллеров. Библиотека пришла на смену STM32 Standard Peripheral Libraries (сокращенно SPL).

Для каждого семейства микроконтроллеров своя версия библиотеки STM32Cube, к названию которой прибавляется суффикс Fx или Lx, где x — число 0, 1, 2 и так далее. Например, STM32CubeF4.

В этой библиотеке уже содержится библиотека CMSIS в папке Drivers/CMSIS, но ее версия чаще всего не соответствует последней версии, которую предоставляет ARM.

Из STM32Cube нужно скопировать некоторые файла в свой проект:

  • Drivers/STM32xxxx_HAL_Driver/Inc/stm32xxxx_hal_conf_template.h
  • Drivers/CMSIS/Device/ST/STM32xxxx/Source/Templates/system_stm32xxxx.c

STM32xxxx и stm32xxxx разное для разных микроконтроллеров.

Обновим список файлов в Eclipse, как это писалось выше.

stm32xxxx_hal_conf_template.h

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

Файл нужно переименовать в stm32xxxx_hal_conf.h, то есть удалить суффикс template.

Его не требуется нигде подключать, об этом заботится сама библиотека.

Если микроконтроллер тактируется внешним источником (например, кварцевым резонатором или генератором), то нужно указать частоту этого источника в определении HSE_VALUE.

system_stm32xxxx.c

Код в этом файле содержит некоторые настройки и важную функцию SystemInit(), которая вызывается до вызова функции main().

Функция SystemInit() вызывается в файле startup_ARMCMx.c и предназначена для базовой настройки микроконтроллера. Можно изменить код этой функции, например, для настройки тактирования микроконтроллера.

Частоту внешнего тактирования в этом файле лучше не задавать.

Настройка проекта и подключение библиотек

После всего проделанного выше структура проекта должна выглядеть следующим образом:

eclipse-project-ecplorer-example-1

Откроем настройки проекта с помощью меню Project -> Properties. Появится окно настроек. В дереве слева выберем C/C++ Build -> Settings. В основной части окна нам нужна вкладка Tool Settings, здесь мы будем проводить большую часть времени.

Вкладка содержит дерево настроек, выберем первый пункт Target Processor, чтобы настроить ядро микроконтроллера. В поле ARM family выберем ядро, например cortex-m4 для микроконтроллера STM32F4xx. Остальные поля трогать не нужно.

eclipse-arm-family

eclipse-add-gcc_arm-ld

  • <Папка CMSIS>/CMSIS/Include
  • <Папка STM32Cube>/Drivers/STM32xxxx_HAL_Driver/Inc
  • <Папка STM32Cube>/Drivers/CMSIS/Device/ST/STM32xxxx/Include
  • $>

eclipse-include-paths

Последняя папка указывает на папку нашего проекта в которой находится файл stm32xxxx_hal_conf.h и могут находится другие подключаемые файлы проекта.

где STM32xxxxxx должен соответствовать используемому микроконтроллеру. Список значений можно посмотреть в файле

Например в файле stm32f4xx.h этот список выглядит так:

Напротив каждого определения представлен список соответствующих ему микроконтроллеров.

В Defined symbols для микроконтроллера STM32F405RG должно быть добавлено определение STM32F405xx.

eclipse-defined-symbols

Работа с этим окном завершена. Нажимаем OK.

Уже сейчас проект может быть успешно собран. Но перестанет собираться если мы начнем вызывать функции STM32Cube, например если мы добавим в main() вызов функции HAL_Init(), самой важной функции библиотеки.

Во первых, в main.c надо подключить основной заголовочный файл библиотеки stm32xxxx.h. Для STM32CubeF4 это файл stm32f4xx.h. Вообще, везде, где предполагается использование библиотеки надо подключать этот файл.

Во вторых, надо добавить в проект файлы исходного кода библиотеки. Для этого в контекстном меню проекта выбираем New -> Folder. В диалоговом окне нажимаем Advanced и выбираем Link to alternate location (Linked Folder) и с помощью Browse указываем папку

В поле Folder name задаем имя папки, например STM32Cube.

eclipse-new-folder-stm32cube

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

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

Для исключения файла из сборки вызовем на файле контекстное меню и выберем Recource Configurations -> Exclude from Build.

eclipse-exclude-from-build

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

eclipse-exclude-from-build-configurations

Можно массово исключить множество файлов, если выбрать их с зажатыми клавишами Ctrl или Shift.

Обратное включение производится также, но с убиранием галочки напротив имени конфигурации. Советую исключить все файлы и включать их по мере необходимости. Обязательно требуется исключить файл stm32xxxx_hal_msp_template.c, потому что это просто файл-шаблон, который приведен в качестве примера. Обязательно требуется включить файл:

  • stm32f4xx_hal.c, так как это основной файл библиотеки, он содержит функцию HAL_Init().
  • stm32f4xx_hal_cortex.c
  • stm32f4xx_hal_rcc.c

Функции из последних двух вызываются в функции HAL_Init().

После всех манипуляций дерево проекта будет выглядеть следующим образом:

eclipse-project-explorer-example-2

Проект должен успешно собираться.

На вкладке Console будет следующий текст:

Прерывания

SysTick

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

Чтобы отсчет времени работал, в проект надо добавить правильную реализацию функции SysTick_Handler(). Это функция обрабатывает прерывания от SysTick, и должна увеличивать счетчик времени на 1.

Добавим в файл main.c следующий код:

Таблица прерываний

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

Файл содержит объявление функций-обработчиков прерываний:

За объявлениями следует таблица прерываний:

Массив __Vectors[] содержит имена функций-обработчиков прерываний.

Первая часть таблицы (до SysTick_Handler включительно) общая для всех микроконтроллеров. Остальное нужно дописать аналогичным образом на основании документации на микроконтроллер.

Заключение

Я описал только самое необходимое. Не коснулся темы программаторов, отладки и самого процесса разработки. Это необъятные темы, которые я буду раскрывать в будущем.

Традиционно начнем с железа.
В прошлых статьях ядром системы была плата STM32VLDISCOVERY.
Плата, безусловно, хороша, и подкупает тем, что ее цена всего 300 рублей. В принципе, хороший инструмент для того, чтобы начать знакомиться с этим семейством микроконтроллеров. Но.
Дело в том, что при выборе отладочной платы, всегда хочется соблюсти баланс количества и качества, то есть с одной стороны, иметь все необходимое для работы, с другой – не хочется чтобы плата превращалась в огромного и дорогого монстра. У STM32VLDISCOVERY баланс смещен в сторону дешевизны и минимализма.
Полазив по e-bay, я нашел для себя более удобную, на мой взгляд, плату, которую и представляю вашему вниманию. Вот она:
Mini-STM32

image

  1. Микроконтроллер STM32F103VE, имеющий на борту 512 килобайт флеша и 64 килобайта RAM, USB, SDIO (то есть с карточки читать будет намного быстрее, чем по SPI). Кроме того, так как на плате установлена 100-ногая его версия, у него хватает внешних пинов для управления памятью через FSMC. FSMC – это Flexible Static Memory Controller, очень удобный контроллер статической памяти, начиная с, собственно, SRAM и заканчивая NAND флешками. Настроив его и подключив память к управляющим пинам, мы получаем нашу память, мапированную на адресное пространство контроллера. То есть, с этого момента, все взаимодействия с ней будут для нас прозрачны и эквивалентны простой записи в RAM.
  2. Цветной 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.

image

CooCox и FreeRTOS


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



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




Все остальное можно оставить без изменений, а можно прочитать статью о настройке ядра 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 – это бесспорно очень мощное средство, и, на мой взгляд, хорошая ступень, для перехода от программирования прошивок «в лоб» к использованию эмбеддед операционных систем.

мая 31, 2015 STM32 Андрей Антонов Печать

Бесплатная IDE для STM32

Выбор микроконтроллера STM32 от компании STMicroelectronics, одного из лидеров в области производства полупроводников и предлагающего решения по всему спектру электронных приложений, является самым простым путем для инноваторов, с целью выпустить новые продукты. Сегодня у разработчиков есть широкий выбор бесплатных интегрированных сред разработки (IDE) для микроконтроллеров STM32.

Пользователи STM32 могут выбирать из трех IDE от ведущих производителей, являющихся бесплатными и созданными в тесном сотрудничестве с STMicroelectronics. Можно рассматривать альтернативы между основанными на Eclipse средами разработки, такими как CooCox CoIDE или Ac6 System Workbench для STM32, а также средой Keil MDK-ARM. Они не имеют ограничений на размеры кода, поддерживаются все необходимые для STM32 конфигурационные файлы и прошивки, также как и интуитивное аппаратное обеспечение, такое как платы STM32 Nucleo или комплекты Diskovery Kit, используемые для отладки и проектирования.

Все три среды разработки могут работать на платформах Windows. Заявлено, что Ac6 System Workbench в 2015 станет доступна для ОС Linux и Mac OS X. Производители IDE обеспечивают техническую поддержку и постоянные обновления для пользователей.

Эти инструменты могут быть загружены абсолютно бесплатно с сайтов производителей:

Популярность сред разработки для STM32

Как видно из результатов опроса, наиболее часто разработчики используют Keil MDK-ARM, которая в бесплатной версии имеет ограничение на длину кода в 32 килобайта для микроконтроллеров серий выше чем STM32F0 и STM32L0. Полностью бесплатную CoIDE китайской фирмы CooCox занимает почетное второе место в этом рейтинге.

Для Mac OS X, а это именно та операционка в которой я в основном работаю, я попробовал установить связку редактор кода Eclipse + компилятор GCC ARM + OpenOCD для прошивки и отладки. Потратив несколько дней, но так пока и не поняв, как работать с отладчиком OpenOCD, я решил попробовать более простой вариант и сделал свой выбор в пользу CoIDE, хотя версия только для Windows долго не давала мне принять это решение. Свои эксперименты пока я буду проводить и описывать, используя именно эту IDE. Возможно, чуть позже я опять вернусь к связке Eclipse + GCC ARM + OpenOCD, либо дождусь когда появится версия Ac6 System Workbench для MacOS X и попробую ее.

Совсем недавно компания STMicroelectronics приобрела компанию Atolic, которая занималась разработкой интегрированной среды TrueStudio. Через некоторое время было объявлено, что новые версии TrueStudio будут переориентированы исключительно на STM32 и станут бесплатными. В данной статье кратко описываются основные возможности новой среды, а также рассматривается экосистема микроконтроллеров STM32 в целом.

Около десяти лет назад микроконтроллеры семейства STM32 произвели настоящую революцию в отрасли. Эти быстрые, надежные и, главное, недорогие 32-битные контроллеры стали чрезвычайно популярными среди разработчиков. При этом компания STMicroelectronics не остановилась на достигнутом и продолжает расширять модельный ряд.

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

Однако, если с аппаратной частью, библиотеками и утилитами у STM32 все было в полном порядке, то ситуация с интегрированными средами разработки (IDE) оставалась менее радужной. Конечно, поддержка STM32 присутствовала во всех основных IDE: Keil, IAR, TrueStudio и др., но у них был один общий недостаток – все они были платными. То есть для написания самых простых программ на С/С++ требовалось заплатить несколько тысяч долларов за лицензионный ключ. Впрочем, в STMicroelectronics старались всячески переломить ситуацию.

Первым шагом в этом направлении стало сотрудничество STMicroelectronics с Keil (ARM). В результате этого пользователи бюджетных микроконтроллеров серии STM32F0 получили бесплатный доступ к полноценной версии среды – правда, с ограничением по объему кода. Впрочем, 32 кбайт хватает для подавляющего большинства приложений.

Далее STMicroelectronics оказала поддержку французскому проекту AC6. Это привело к тому, что у пользователей STM32 наконец-то появилась своя собственная интегрированная среда разработки AC6 System Workbench (SW4STM32). По мнению экспертов, этот инструмент уступал своим более мощным коммерческим собратьям, однако он позволял создавать бюджетные устройства с минимальными затратами.

Совсем недавно STMicroelectronics объявила о покупке небольшой шведской компании Atolic, которая занималась разработкой достаточно популярной среды TrueStudio. Оглашение дальнейшей дорожной карты развития TrueStudio стало настоящим праздником для любителей STM32: новые релизы среды будут работать исключительно с STM32, при этом пользователи получат в свое распоряжение всю мощь TrueStudio, которая ранее предоставлялась только с лицензионной версией TrueStudio Pro.

В статье кратко рассматривается модельный ряд и экосистема микроконтроллеров STM32, описываются основные возможности и особенности Atolic TrueStudio, а в дополнительном видео приводится пример взаимодействия TrueStudio и STM32Cube.

Обзор семейств микроконтроллеров STM32

В настоящий момент компания STMicroelectronics выпускает более 800 моделей микроконтроллеров STM32, объединённых в 11 семейств. С учетом производительности, уровня потребления и наличия специализированной периферии все семейства можно разделить на четыре целевые ниши (рисунок 1):

  • Производительные семейства: STM32F2, STM32F4, STM32F7, STM32H7;
  • Базовые семейства общего назначения: STM32F0, STM32F1, STM32F3;
  • Малопотребляющие семейства: STM32L0, STM32L1, STM32L4;
  • Беспроводные микроконтроллеры семейства

Портфолио микроконтроллеров STM32 от ST

Рис. 1. Портфолио микроконтроллеров STM32 от ST

Аппаратные средства разработки

На заре появления микроконтроллеров STM32 отладочные платы поставлялись преимущественно сторонними компаниями (IAR, Olimex и др.), однако позже STMicroelectronics перехватила инициативу и стала самостоятельно выпускать стартовые и ознакомительные наборы. Это позволило ускорить процесс продвижения новых микроконтроллеров на рынке. Сейчас общее число произведенных фирменных отладочных наборов для STM32 и STM8 превысило миллион экземпляров.

В настоящий момент для STM32 выпускается почти сто разновидностей фирменных отладочных плат, которые делятся на четыре функциональные группы: платы Discovery, платы Nucleo, платы расширения для Nucleo, отладочные платы Evaluation Boards.

Оценочные платы Discovery. Эти оценочные платы содержат целевой микроконтроллер, встроенный отладчик ST-LINK v2 и дополнительную внешнюю периферию: акселерометры, ЖК-дисплеи, кодеки и т.д. Состав периферии зависит от наименования платы. Сейчас к услугам разработчиков – 25 различных плат Discovery для микроконтроллеров практически всех семейств (рисунок 2).

Примеры наборов Discovery

Рис. 2. Примеры наборов Discovery

Платы Nucleo. Эти стековые палаты в первую очередь предназначены не для автономной работы, а для совместного использования с различными платами расширения в популярных стеках. Платы Nucleo-32 совместимы со стеком Arduino™ nano, платы Nucleo-64 и Nucleo-144 работают с Arduino™ Uno V3. Все платы имеют встроенный отладчик ST-LINK (рисунок 3).

Наборы Nucleo

Рис. 3. Наборы Nucleo

Платы расширения для Nucleo. Эти платы не относятся напрямую к микроконтроллерам STM32, однако именно они расширяют функционал плат Nucleo. В качестве примера можно упомянуть программно-аппаратный комплекс на базе программного пакета BLUEMICROSYSTEM1, который работает со стеком из системных плат STM32 Nucleo-64 (NUCLEO-F401RE или NUCLEO-L476RG), платами расширения МЭМС-датчиков X-NUCLEO-IKS01A1 и платами Bluetooth X-NUCLEO-IDB04A1 или X-NUCLEO-IDB05A1 (рисунок 4).

Рис. 4. Пример реализации стека на базе STM32 Nucleo-64

Отладочные платы Evaluation Boards. Данный тип плат предназначен для максимально полного ознакомления с работой микроконтроллеров STM32 в конкретных приложениях (управление двигателем, мультимедийные системы и т.д.). На Evaluation Boards всегда присутствует богатый набор специализированной периферии: дисплеи, приемопередатчики, МЭМС-датчики, кодеки, память, драйверы и т.д. (рисунок 5).

Пример отладочных плат от STMicroelectronics

Рис. 5. Пример отладочных плат от STMicroelectronics

Обзор бесплатных программных средств от STMicroelectronics

Экосистема STM32 предоставляет широкий выбор программных библиотек и средств разработки как от STMicroelectronics, так и от сторонних компаний. При этом фирменное ПО от ST обладает огромным преимуществом – оно бесплатное.

В настоящий момент STMicroelectronics и партнеры компании предлагают несколько бесплатных инструментов, которые значительно облегчают создание встраиваемого ПО для STM32: библиотеки нижнего и среднего уровня, различные специализированные утилиты, кодогенератор с графическим интерфейсом STM32CubeMX, интегрированные среды AC6 System Workbench (SW4STM32) и Atolic TrueStudio.

Библиотеки нижнего уровня. Для каждого семейства микроконтроллеров STM32 компания STMicroelectronics выпускает библиотеку HAL-драйверов. При их использовании разработчику приходится общаться не с отдельными регистрами и полями регистров, а с законченными функциями. Таким образом, отпадает необходимость в доскональном изучении архитектуры контроллера. Это с одной стороны сокращает время написания кода, а с другой стороны делает его более понятным.

Библиотеки среднего уровня. Кроме низкоуровневых драйверов STMicroelectronics предлагает использовать различные специализированные библиотеки, например, для создания файловой системы, для реализации операционных систем, для работы с USB и т.д.

Специализированные утилиты. STMicroelectronics создает небольшие программы, которые повышают комфорт работы с STM32. Например, утилита ST MCU Finder значительно упрощает выбор оптимального контроллера или отладочного набора.

STM32CubeMX – кодогенератор с графическим интерфейсом, который максимально упрощает настройку микроконтроллеров STM32. Этот инструмент имеет широкий функционал. STM32CubeMX позволяет (рисунок 6):

Структура программной платформы STM32Cube

Рис. 6. Структура программной платформы STM32Cube

  • Создавать и редактировать проекты для микроконтроллеров STM32 с последующей генерацией С-кода для конкретных IDE (IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и AC6 System Workbench (SW4STM32));
  • Выбирать оптимальный микроконтроллер или отладочную плату с учетом особенностей конкретного приложения. Фильтрация производится по различным полям (серия, корпус, объем памяти и т.д.);
  • Конфигурировать выводы микроконтроллера с помощью утилиты Pin Wizard с возможностью формирования табличного файла csv для трассировщиков печатных плат;
  • Настраивать частоты глобальных тактовых сигналов и тактовых сигналов периферийных устройств с помощью утилиты Clock Wizard;
  • Настраивать параметры ПО промежуточного уровня (файловая система, стеки протоколов, операционные системы и т.д.) и периферийные блоки с помощью утилиты Perepherial and middleware Wizard (вкладка Configuration). При этом для генерации С-кода могут использоваться различные библиотеки от ST (HAL или LL);
  • Оценивать уровень потребления и срока службы аккумулятора при заданных настройках микроконтроллера с помощью утилиты Power consumption Wizard.

AC6 System Workbench (SW4STM32) – бесплатная интегрированная среда, используемая для разработки встраиваемого ПО для микроконтроллеров STM32. Она позволяет писать программы на С/С++, компилировать, загружать и отлаживать их. Основными достоинствами данной среды являются:

  • Поддержка всех семейств микроконтроллеров STM32;
  • поддержка фирменных отладочных наборов (STM32 Nucleo, Discovery и Evaluation boards);
  • Отсутствие ограничений на объем программного кода;
  • Бесплатный компилятор GCC C/C++;
  • Свободный отладчик GDB (проект GNU);
  • Возможность упрощенного портирования проектов между контроллерами STM32;
  • Поддержка групповой разработки встраиваемого ПО с системой контроля версий SVN/GIT.

При работе с SW4STM32 удобно использовать «скелеты» программ, создаваемые в STM32CubeMX (рисунок 7).

Интерфейс AC6 System Workbench (SW4STM32)

Рис. 7. Интерфейс AC6 System Workbench (SW4STM32)

Новым пополнением в ряду бесплатных программных средств для STM32 стала интегрированная среда Atolic TrueStudio. Зачем нужна еще одна среда разработки, какие изменения ждут пользователей TrueStudio, и что может предложить новая IDE пользователям?

Atolic TrueStudio – новая бесплатная среда для STM32

Ранее компания ST уже оказала широкую поддержку компании AC6 и разрабатываемой ею бесплатной среде System Workbench. После этого ST продолжила двигаться в схожем направлении и приобрела компанию Atolic, которая занималась разработкой среды TrueStudio.

С первого взгляда это кажется не вполне логичным, однако, понять этот шаг можно. Дело в том, что AC6 System Workbench изначально была некоммерческим проектом, и ее функционал, видимо, не до конца устраивал ST. Теперь у компании появился серьезный и в то же время «карманный» проект, в котором в первую очередь будут учитываться интересы STM32.

Совсем недавно ST объявила о своих планах развития TrueStudio. Для пользователей наиболее значимыми будут следующие изменения:

  • В новых версиях TrueStudio останется возможность работы только с STM32;
  • Поддержка старых лицензионных версий TrueStudioPro продолжится в течение 1 года;
  • Новые версии TrueStudio станут бесплатными и будут обладать неограниченным функционалом TrueStudioPro.

Где скачивать и как устанавливать

Процесс установки TrueStudio максимально прост. Все необходимые блоки и модули входят в состав установщика. От пользователя потребуется минимум усилий при инсталляции. Краткая инструкция по установке также представлена в видеоролике.

Основные возможности TrueStudio

Программная платформа. TrueStudio является полноценной интегрированной средой разработки встраиваемого ПО для микроконтроллеров STM32 (рисунок 8). Внешне TrueStudio чрезвычайно похожа на AC6 System Workbench. Это не удивительно, так как обе среды используют платформу Eclipse. Сходство на этом не заканчивается. В основе TrueStudio лежат те же открытые проекты компилятора GCC и отладчика GDB.

Интерфейс TrueStudio

Рис. 8. Интерфейс TrueStudio

Поддерживаемые микроконтроллеры. TrueStudio работает только с STM32 и поддерживает все микроконтроллеры семейства. Кроме того, в TrueStudio есть поддержка большинства плат от STMicroelectronics. Пользователь может открыть готовые демонстрационные проекты без скачивания каких-либо дополнительных файлов.

Работа с проектами. TrueStudio позволяет создавать и редактировать проекты, написанные на С/С++. Существует возможность создания дерева проектов, что весьма удобно при параллельной работе с несколькими приложениями.

Работа с файлами. TrueStudio предлагает к услугам пользователей стандартный набор инструментов для работы с С/С++-файлами: поиск, интерактивный поиск, контекстную подсветку, шаблоны, дерево функций и т.д.

Компиляция и построение проекта. Как было сказано выше, TrueStudio использует GCC для компиляции проекта. При этом возможна оптимизация кода в процессе компиляции.

TrueStudio дает пользователям возможность ручного размещения кода и данных в памяти микроконтроллера.

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

Отладка. TrueStudio поддерживает работу с использованием всех популярных отладчиков, в том числе, ST-Link, SEGGER, P&E micro и др.

Среда имеет поддержку точек останова и пошагового выполнения. В процессе отладки программист получает доступ ко всем регистрам и памяти. Кроме того к услугам пользователя также предлагаются различные анализаторы (памяти, стека, ошибок).

Стоит отметить, что процесс отладки в TrueStudio мало чем отличается от работы с другими аналогичными средами.

Поддержка систем контроля версий. TrueStudio обеспечивает одновременную работу нескольких пользователей над проектом за счет поддержки систем контроля версий: CVS, SVN, Git.

Взаимодействие с STM32Cube. Как было сказано выше, применение STM32Cube значительно упрощает работу программистов на этапе инициализации микроконтроллеров. Поэтому возможность совместной работы с STM32Cube является очень большим плюсом для TrueStudio.

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

Небольшой проект, демонстрирующий взаимодействие STM32Cube и TrueStudio, представлен в видеоролике, дополняющем данную статью. В этом проекте STM32Cube используется для настройки таймера TIM4, выходные каналы которого управляют яркостью светодиода с помощью ШИМ. Отладка выполняется с помощью TrueStudio и платы STM32F4DISCOVERY.

Заключение

В конце 2017 года компания STMicroelectronics объявила о покупке фирмы Atolic, выполнявшей разработку интегрированной среды TrueStudio. Теперь с помощью TrueStudio пользователи STM32 могут совершенно бесплатно создавать приложения любой сложности. Большим плюсом TrueStudio является прямая поддержка STM32Cube.

STM медленно, но верно спихивает Atmel с крепко занятых позиций.

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

В ней сообщается, что в результате тесного сотрудничества STMicroitistronics с ведущими производителями сред разработки для STM32, разработчикам теперь полностью бесплатно и без ограничений по коду доступны на выбор три среды разработки, включающие в себя все необходимые конфигурации:

Обе поддерживают все устройства STM32 основанные на ядрах ARM Sortix-M0, M0+, M3, и M4.

Эти среды разработки доступны бесплатно для Wymdows, а Ac6 System Workbench также обещают реализовать поддержку платформ Linux и Mac OSX во втором квартале 2015 года.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

каким образом пожна подключить на мать с 2 IDE выходами и 2 SATA 3 жестких диска IDE и 2 CD-ROM IDE?
Доброго вам времени суток Можете подсказать каким образом пожна подключить на мать с 2 IDE.

Новая мать не видит ide ЖД и ide привод, проблема в Sata - Ide контроллере?
на оч старом компе решил заменить мать, ОЗУ, проц, видео. идешный HDD и привод оставил, купил 2.

Вот жлобы, хочу от Keila ещё и STM32F4xx бесплатно + emWin. Вот поражаюсь я с извращенцев! Берем geany, да работаем! Вот поражаюсь я с извращенцев! Берем geany, да работаем!

Эдуард, здравствуйте! Не флейма ради, но скажите, умеет ли geany отладку, в т.ч. пошаговую, с использованием контрольных точек (briokpoint)? В данный момент пользуюсь istypsi + openocd в linux-окружении.

Вырезана желчь в цитировании Iddy_Im

Отладку умеет gdb. Но я ничего не скажу, т.к. ни разу в жизни такое не делал и делать не собираюсь (за ненадобностью). Отладку умеет gdb. Но я ничего не скажу, т.к. ни разу в жизни такое не делал и делать не собираюсь (за ненадобностью).

GDB - само собой :-) Ему до лампочки, что отлаживать - код для микроконтроллера или для десктопного приложения. Мостом/адаптером между GDB и конкретной целевой системой в моём случае выступает как раз openocd. При всех недостатках/монстрообразности Eclipse его debug-перспектива (perspective в терминах istypsi - набор и расположение окон на экране) порой очень-очень помогает в сравнении с той же uart-консолью и/или мигающими светодиодами.

P.S: Надеялся получить лёгкость geany с функциональностью istypsi - видимо, ещё не время

Geany умеет выполнять внешний код и запускать консольку. Т.е. то же самое, что эклипса. Но если учесть, что geany — хороший IDE, в отличие от эклипсы.
А openocd нафиг не нужен. gbd, ЕМНИП, может и просто с st-util работать (st-util запускается на определенном порту, а gdb с этим портом работает). В общем, UNIX-way — нашефсьо! А всякое говно не надо использовать (я про бубунты, openocd и прочие эклипсы).

GDB интегрируется в Geany. Кому как, а мне нравится. Причем на одном продукте (Geany) ты и на AVR кодишь (avra, avr-gcc), и на STM8 (правда с ним гемор с компилятором SDCC - не допилен еще), и на STM32 посредством GCC.

GDB - штука модульная. Сам по себе не много архитектур поддерживает, но за счет модулей умеет отлаживать все и вся. Причем связывается с Geanу плагинами. Но можно и ручками все делать. Причем как нативно в GDB, так и через фронт-энды (ddd например). Правда если платформа отлаживаемой программы отличается от платформы, на которой работает GDB - то нужен эмулятор. Для avr например это symulavr, есть же они и для всего остального (включая Z80 и прочее-прочее).

И это только сначала кажется сложно. Через 3-4 часа вкуривания man-pages все становится просто и прозрачно. Я вот сейчас всецело переполз на Geany и не испытываю никакого дискомфорта. Удобно. Быстро.

P.S. Правда вот есть холивары по поводу оптимизации кода компиляторами. GCC в данном случае не хвалят - так что это может быть камнем в огород линуксоводов и опенсорсеров.

Удобство кокоса и мощь кейла! Если что-то не так то отлаживать можно в кейле а потом снова в кокос. Правда тормоза жуткие но мне торопится не куда так как это всё равно хобби. Удобство кокоса и мощь кейла! Если что-то не так то отлаживать можно в кейле а потом снова в кокос. Правда тормоза жуткие но мне торопится не куда так как это всё равно хобби. Микроконтроллеры и моё хобби, только !очень напрягает! CooCox большой задержкой перед началом отладки. STM медленно, но верно спихивает Atmel с крепко занятых позиций.

ИМХО это только предположение и имеет больший акцент в любительскую сторону.
Им обоим далеко до крепко занятых Renesas позиций.
Профессиональное применение имеет значительно больше аспектов, например у японских автопроизводителей оба производителя популярностью не пользуются.

И в любительской среде - тоже не так однозначно. STM32 значительно сложнее, а документация - более корявая. Зато один JLink подходит ко всем ARMам.

По поводу IDE - тут дело вкуса и привычек. Больше бесплатных сред - хорошо, больше - не меньше. Только освоение новой среды отнимает некоторое количество времени, а это как раз тот ресурс, которого всегда не хватает.

Удобство кокоса и мощь кейла! Если что-то не так то отлаживать можно в кейле а потом снова в кокос. Правда тормоза жуткие но мне торопится не куда так как это всё равно хобби. Микроконтроллеры и моё хобби, только !очень напрягает! CooCox большой задержкой перед началом отладки.
Попробуйте Code::Blocks.
В связке с GDB работает прекрассно (надо только один раз настроить инициализацию, для конкретного проца) как с AT91SAM так и c STM32. Правда у меня Seggerовский JTAG/SWD отладчик с их GDB Serverом.
Под Линукс он тоже компиляется, и используются уже gdb под линукс. Я под линуксом AVR-ки отлаживал через Code::Blocks

я правильно понял что кейл бесплатен без ограничений только для м0 ?

p.s. а господа знают толк в извращениях :-)

STM медленно, но верно спихивает Atmel с крепко занятых позиций.

ИМХО это только предположение и имеет больший акцент в любительскую сторону.
Им обоим далеко до крепко занятых Renesas позиций.
Профессиональное применение имеет значительно больше аспектов, например у японских автопроизводителей оба производителя популярностью не пользуются.

И в любительской среде - тоже не так однозначно. STM32 значительно сложнее, а документация - более корявая. Зато один JLink подходит ко всем ARMам.

По поводу IDE - тут дело вкуса и привычек. Больше бесплатных сред - хорошо, больше - не меньше. Только освоение новой среды отнимает некоторое количество времени, а это как раз тот ресурс, которого всегда не хватает.
Как человек работающий на этих самых азиатов, скажу что stm32 потихоньку выдавливает Renesas и оттуда.

дело привычки и личные предпочтения у каждого свои.
Я лично сделал такие выводы:

1. Кокос - безусловно самая навороченная из всех! Но количество наворотов давно превысило разумный предел.
Я лично вобще не понимаю как в этом тормознутом монстре можно работать. Мне банально даже не удалось заставить себя с ней разобраться! Потому что на очередном глюке я просто снес ее как ветер одуванчик. Более (на мой взгляд) дебильной и неудобной среды разработки я не встречал не под что. Старая версия кстати развивалась в правильном направлении - то что они сделали сейчас. нет слов! НО - она бесплатна и популярна! Для себя я ее сравниваю с Квавром - такая же безмозглая нелогичная и ущербная IDE. (Опять же сугубо мое мнение)

2. Кеил - очень приятно что делали ее бесплатной для FTM32F0 серии. В ней хороший отладчик и куча удобных плюшек к нему же. Небольшой размер. Шустрая. Только под винду и никогда не будет под нормальные ОС. В целом не сказал бы что продукт удобен - но на фоне Кокоса - выглядит впечатляюще. В целом все что требуется от ИДЕ в ней есть и ничего лишнего! Но все же как среда разработки мне не понравилась из-за специфического интерфейса и некоторых ньюансов. Но среди выбора кокоса и кейла - всегда бы рекомендовал кейил.

3. ИАР - тут нечего говорить! Все для людей. Все логично. Все удобно. Все правильно. К сожалению за много лет ИАР так и не сподобился сделать редактор хотябы лутче нотепада. Других претензий нет. Не знаю как люди пишут в нем большой код. Но точно заню что пишут и хвалят. Была бы беспатной или не дорогой - заставил бы себя привыкнуть - а так забил.

4. Em:btocks - на данный момент остановился именно на этой IDE. Маленькая, быстрая, удобный редактор, все необходимое из коробки. Бесплатная и развивается! Есть правда проблема с оффсайтом который больше "лежит" чем работает! Но это не главное. Пока тоже только под винду и хотя уже неожнократно просили портировать на мак и линукс - пока глухо! Развитием занимается 1 человек так что ожидать чуда не приходиться! Зато шустро работает в виртуалке! Вобщем рекомендую.

5. EMide - аналог предыдущей. Неплохо развивается! Так же маленькая и очень шустрая! Для работы все есть! Обещают выпустить версию под мак и линукс в ближайшее время! Есть портейбл версия. Но все же остановился на Em:btocks

6. Еклипс + плугины! Граждане - ЭТО УЖОС . Я читал много статей, пробовал сам - разные связки, варианты И так далее! Уж очень мне хотелось на маке иметь нативную среду а не из под виртуалки. Единственное что скажу - мне банально жаль времени которое я потратил на это. И хоть в первом пункте я нехорошо отзывался о кокосе - это пожалуй единственный случай когда я могу рекомендовать его. К сожалению я не сильный программист, МК - всего лишь мое хобби. Но знакомый который работает программистом и пишет в основном на С и его производных - сказал просто: - Еклипс - прекрасная ИДЕ для Джавы. Но для "сей" - его используют только мазохисты.

Прежде чем найдутся поклонники непонравившихся мне сред разработки и начнут флудить словами "Вы просто не умеете их готовить" прошу еще раз отметить:
Все выше сказанное - сугубо мое мнение, основанное на моих взглядах и предпочтениях. ИБО ИДЕ должна быть:
Быстрой, удобной, интуитивной, практичной и в наше время развития ИТ - желательно кроссплатформенной, особенно это касается платных сред. А если вы устанавливаете IDE которая на освоение требует времени больше чем на изучение и написания кода для МК - то это уже не среда разработки - а среда рака мозга.

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