Готовые программы для микроконтроллеров stm32. Простые бесплатные программные средства разработки ПО для STM32. Некоторые особенности программ для МК

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

Итак, для начала разберемся, что же нужно знать и уметь, чтобы начать изучать ARM’ы. А, в принципе, ничего супер сложного и фееричного 😉 Конечно, на контроллеры ARM люди обычно переходят, уже наигравшись с PIC’ами и AVR’ками, то есть в большинстве своем опытные разработчики. Но я постараюсь максимально подробно и понятно описывать все то, что мы будем разбирать, чтобы те, кто впервые решил попробовать себя в программировании микроконтроллеров, могли легко разобраться в материале. Кстати, если будут возникать какие-нибудь вопросы, или просто что-то будет работать не так, как задумывалось, пишите в комментарии, постараюсь разобраться и помочь.

Теперь перейдем к техническим вопросам) Несколько раз я уже упомянул название «Учебный курс ARM», но, по большому счету, это не совсем верно. Микроконтроллера ARM как такового не существует. Есть контроллер с ядром(!) ARM, а это, согласитесь, все-таки не одно и то же. Так вот, такие девайсы выпускает ряд фирм, среди которых особо выделяются, STMicroelectronics и NXP Semiconductors. Соответственно выпускают они контроллеры STM и LPC. Я остановил свой выбор на STM32, они мне просто больше понравились =) У STM очень подкупает, что разобравшись с любым МК из линейки STM32F10x, не возникнет никаких проблем и с любым другим. Одна линейка – один даташит. Кстати есть огромное количество как дорогих, так и не очень, отладочных плат с контроллерами STM32, что очень радует, хотя первое время будем отлаживать наши программы в симуляторе, чтобы оценить возможности контроллера, прежде чем покупать железо. Вот, на всякий случай, официальный сайт STMicroelectronics – .

Как то плавно выехали на тему компилятора, так что скажу пару слов об этом. Я, недолго думая, выбрал Keil, не в последнюю очередь из-за мощного встроенного симулятора. Можно и на UART там посмотреть, и на любой регистр, и даже логический анализатор имеется в наличии. Словом, у меня Keil оставил в основном только приятные впечатления, хотя есть и минусы, конечно, но не катастрофические. Так что можете смело качать Keil uvision4 с офф. сайта (). Правда есть одно НО – IDE платная, но доступен демо-режим с ограничением кода в 32кБ, которых нам пока с лихвой хватит. Кому этого мало есть огромное количество кряков для Keil’а 😉 Устанавливается все без проблем – пару раз тыкаем далее и все отлично ставится и работает без дополнительных танцев с бубном.

Собственно, вот и все, что я хотел тут рассказать, пора переходить от слов к делу, но это уже в следующей статье. Будем изучать программирование микроконтроллеров STM32 с нуля!

Одна из причин популярности микроконтроллеров STM32 производства STMicroelectronics – разнообразие инструментов разработки и отладки. Это касается как аппаратных, так и программных средств. Существует возможность создания и отладки резидентного ПО для STM32 без материальных затрат с помощью набора бесплатных программ . В статье дан обзор наиболее значимых бесплатных программных инструментов разработки: ST MCU Finder, STM32CubeMX, SW4STM32, STM32 Studio .

Компания STMicroelectronics (ST) является крупнейшим производителем микроконтроллеров в мире, при этом большая часть приходится на семейства STM32. При разработке новых линеек контроллеров STMicroelectronics преследует несколько стратегических целей:

  • повышение производительности;
  • повышение уровня интеграции: рост объема памяти, расширение перечня периферии;
  • снижение потребления;
  • снижение стоимости.

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

Дадим краткую характеристику семействам микроконтроллеров STM32 от ST.

Малопотребляющие микроконтроллеры семейств STM32L. Данная группа объединяет семейства, ориентированные, в первую очередь, на достижение минимального уровня потребления. Для этого используются различные методы: динамическое управление напряжением питания, гибкая система тактирования, специализированная периферия (LP-Timer, LP-UART), развитая система режимов пониженного потребления и так далее.

Базовые семейства STM32F0, STM32F1, STM32F3. Данная группа включает семейства со сбалансированными характеристиками и компромиссным значением производительности/потребления/цены.

В свою очередь отдельные пакеты STMCube включают:

  • аппаратно независимые библиотеки HAL для работы с аппаратными средствами микроконтроллеров;
  • библиотеки промежуточного уровня. Например, в состав самого развитого пакета ПО STM32CubeF7 входят следующие библиотеки и стеки: CMSIS-RTOS на базе FreeRTOS, стек TCP/IP на базе LwIP, файловая система FAT на базе FatFs с поддержкой NAND Flash, StemWin – графический стек на базе SEGGER emWin, полный стек USB (Host и Device). Для ряда семейств доступна библиотека Touch Library для сенсорных приложений;
  • примеры и шаблоны проектов для различных сред и отладочных наборов (Discovery, Nucleo, Evaluation Boards).

Чтобы понять, как происходит взаимодействие между составляющими программной платформы STM32Cube, следует обратиться к примеру, представленному на рисунке 9. В этом примере пользователь конфигурирует микроконтроллер с помощью STM32CubeMX. После окончания визуальной настройки (выводов, тактирования и прочего) STM32CubeMX генерирует С-код, для этого используются библиотеки из программного пакета STM32CubeF4. В результате пользователь получает завершенный С-проект, сформированный для конкретной интегрированной среды разработки: IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и AC6 System Workbench (SW4STM32). В этот проект уже включены все необходимые библиотеки и файлы.

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

  • генерируемый С-код охватывает только настройку блоков и периферии микроконтроллера. Это значит, что алгоритмическую часть программы автоматически сгенерировать нельзя, ее нужно будет дописать вручную;
  • STM32CubeMX поможет создать только стартовую конфигурацию. Иногда в процессе работы пользователю требуется изменить частоту работы периферийного блока или изменить конфигурацию вывода. Все это придется прописывать самостоятельно;
  • для генерации кода используются стандартные, разработанные ST, библиотеки нижнего уровня (HAL и LL) и промежуточного уровня, например, StemWin или STM32_USB_Device_Library;
  • в процессе генерации С-файл выстраивается таким образом, что для пользователя выделяются специальные секции, в которые он может помещать свой код. Если пользовательский код окажется вне этих рамок – он будет затерт при следующих генерациях;
  • существуют и другие ограничения для отдельных блоков, для более подробного ознакомления с которыми следует обратиться к руководству по STM32CubeMX.

Теперь, когда состав, принцип действия и ограничения STM32CubeMX описаны, можно привести пример работы с данной программой, создать «скелет» простейшего проекта и продемонстрировать работу отдельных утилит.

Создание простейшей программы с помощью STM32CubeMX

Рассмотрим подробнее создание скелета проекта в среде STM32CubeMX . Для начала требуется скачать саму среду STM32CubeMX. Это можно сделать абсолютно бесплатно с сайта ST. После установки на диске пользователя будут размещены как сам STM32CubeMX, так и папки с библиотеками STM32Cube.

Процесс создания скелета проекта выполняется по шагам.

Шаг первый. Скачивание актуальных версий библиотек с помощью специальной утилиты. Для этого вначале нужно настроить параметры сети (Help → Updater Settings) и далее запустить автоматическое обновление (Help → Check for Updates). Если ПК не подключен к сети – обновлять библиотеки придется вручную.

Шаг второй. После запуска STM32CubeMX на стартовом экране или в меню “File” необходимо создать новый проект, нажав “New Project”. Далее STM32CubeMX предложит выбрать целевую платформу: контроллер с заданными параметрами или отладочную плату. На рисунке 10 в качестве примера демонстрируется, как встроенный поиск подобрал список контроллеров по параметрам: семейство STM32F4, корпус TQFP100, объем Flash не менее 592 кбайт, ОЗУ более 214 кбайт.

Шаг третий. На третьем этапе разработчику предстоит определить назначение выводов с помощью Pin Wizard (рисунок 11). Данная утилита помогает создавать требуемую конфигурацию и проверять ее на ошибки. Стоит отметить и удобную систему подсветки, например, системные выводы закрашиваются бледно-желтым цветом.

Шаг четвертый. Настройка системы тактирования производится с помощью вкладки Clock Configuration (утилита Clock Wizard). При этом пользователь работает с визуализированным деревом тактирования (рисунок 12). С помощью Clock Wizard удается за нескольких щелчков мыши выбрать источник системного тактового сигнала, значения определителей и умножителей, а также источники тактирования периферийных блоков. При написании кода вручную для этого потребовалось бы приложить много усилий.

Шаг пятый. Создание С-кода начинается с выбора целевой интегрированной среды в настройках проекта (Project → Settings). В настоящий момент к услугам пользователя предлагаются: IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и AC6 System Workbench (SW4STM32) (рисунок 13). Далее на вкладке Code Generator следует определиться с составом копируемых в директорию проекта библиотек, настройками обработки пользовательского кода при регенерации (например, сохранять или удалять), настройками использования HAL (рисунок 13).

Для более детальной настройки генератора следует перейти на вкладку Advanced Settings (рисунок 14). Главной особенностью С-генератора в STM32CubeMX является возможность использования как HAL-, так и LL-драйверов. На этом моменте следует остановиться подробнее.

HAL – набор абстрактных драйверов, обеспечивающих максимальную кроссплатформенность среди контроллеров STM32. При этом некоторые драйверы являются абсолютно универсальными (подходят ко всем контроллерам STM32), а часть применима только к отдельным линейкам с соответствующими периферийными блоками (например, блоками шифрования). Главными достоинствами HAL являются :

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

Вместе с тем, у HAL есть и недостатки: значительный объем кода, недостаточная оптимизация выполнения задач, сравнительно малое быстродействие. Если эти недостатки являются критичными, то следует использовать LL-драйверы.

Low Layer APIs (LL) – аппаратно зависимые драйверы, позволяющие напрямую работать с периферией контроллера, в том числе – использовать inline-функции и выполнять атомарный доступ к регистрам . Такой подход не требует значительных затрат памяти, функции получаются максимально короткими и эффективными по скорости. Очевидными недостатками LL-драйверов являются снижение совместимости кода при переходе от одного контроллера к другому и необходимость глубокого знания особенностей архитектуры контроллера.

В рамках одно и того же проекта на STM32CubeMX можно одновременно использовать как HAL так и LL, но для разных периферийных блоков. Например, на рисунке 15 показаны настройки С-генератора, при которых для UART/TIM/RTC используются LL-драйверы, а для остальных блоков – HAL.

Шаг шестой. После настройки проекта следует выполнить генерацию кода, зайдя в меню Project → Generate Code. В результате этого в указанной директории проекта будет сгенерирован скелет проекта для заданной среды разработки.

Иногда возникает необходимость миграции проекта с одной платформы на другую. С помощью STM32CubeMX это можно сделать с минимальными затратами времени.

Миграция проектов с помощью STM32CubeMX

Для миграции проекта с одной платформы на другую используется дополнительная утилита File → Import Project (рисунок 15). В ней требуется указать тип нового микроконтроллера и режим миграции. После этого программа автоматически генерирует новый код либо, при наличии неполной совместимости ядер, указывает на возникшие сложности, предлагая пользователю их устранить.

Несовместимость, обнаруживаемая при миграции, может быть устранимой и неустранимой. Неустранимый случай возникает, когда состав периферии контроллеров значительно отличается. Например, ранее использовался модуль Ethernet, который отсутствует на новом МК (рисунок 15). Очевидно, что в таком случае миграция невозможна.

Но зачастую несовместимость имеет локальный характер, когда, например, необходимо всего лишь перенастроить параметры дерева тактирования, чтобы согласовать рабочие частоты, либо изменить номер канала АЦП или DMA и так далее (рисунок 16). В таких случаях STM32CubeMX предложит выполнить миграцию в ручном режиме с устранением появившихся сложностей с помощью редактирования проекта в рассмотренных выше утилитах. При этом STM32CubeMX будет сигнализировать пользователю о наличии проблем до их устранения.

После получения итогового скелета проекта останется добавить пользовательскую алгоритмическую часть кода, провести компиляцию и выполнить отладку. Для этого используются специализированные среды. Среда SW4STM32 для STM32 производства компании AC6 позволяет делать это абсолютно бесплатно.

AC6 System Workbench – бесплатная IDE для STM32

Для редактирования, компиляции и отладки программ предназначены специальные интегрированные среды IDE. Большая часть из них является коммерческими продуктами (IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и другие), но есть и бесплатные инструменты, например, System Workbench производства компании AC6. В рамках системы названий STMicroelectronics данная IDE носит название SW4STM32 .

Интегрированная среда SW4STM32 предназначена для работы с микроконтроллерами STM32. Она основана на базе платформы Eclipse и является бесплатной и кроссплатформенной. Основными ее достоинствами являются :

  • поддержка работы с микроконтроллерами STM32, аппаратными отладочными наборами (STM32 Nucleo, Discovery и Evaluation boards), с программными библиотеками (Standard Peripheral library и STM32Cube HAL);
  • отсутствие ограничений на объем программного кода;
  • бесплатный компилятор GCC C/C++;
  • свободный отладчик GDB (проект GNU);
  • открытая платформа Eclipse IDE с поддержкой групповой разработки встраиваемого ПО с системой контроля версий SVN/GIT;
  • совместимость с плагинами Eclipse;
  • поддержка ST-LINK;
  • мультиплатформенность и совместимость с Windows®, Linux и OS X®.

С помощью SW4STM32 можно редактировать, компилировать и отлаживать программы для STM32. Для этого удобно использовать скелеты программ, создаваемые в STM32CubeMX. Для их импорта следует выполнить простейшие операции: выбрать меню File -> Import, назначить тип импорта «Existing Projects into Workspace», указать директорию проекта, выбрать сам проект и нажать Finish.

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

/*USER CODE BEGIN…*/

/*USER CODE END…*/

Это необходимо делать, чтобы при повторной генерации кода в STM32CubeMX не произошло затирание рукописной части программы. Повторная генерация необходима в двух случаях:

  • при перенастройке используемого МК;
  • при миграции с одного МК на другой.

Таким образом, при работе в связке STM32CubeMX + SW4STM32 пользователь может в любой момент перенастроить контроллер и произвести миграцию с сохранением пользовательского кода при минимальных затратах времени.

При отладке программ в SW4STM32 доступна возможность широкого мониторинга состояния памяти, регистров, переменных. Также среда имеет поддержку точек останова (рисунок 17). Для запуска процесса отладки требуется нажать значок “Debug” (в виде жука), выбрать тип проекта “Ac6 STM32 C/C++ Application”, определить тип отладчика и интерфейс, нажать кнопку “OK”.

SW4STM32 имеет поддержку систем контроля версий SVN/GIT. Это важно для больших проектов, над которыми работает несколько разработчиков. Система контроля версий позволяет: регистрировать все изменения, производимые в проекте; сравнивать версии проектов; восстанавливать предыдущие версии; разрешать конфликты при работе нескольких программистов над одним файлом; вести параллельно несколько версий и так далее.

В рамках данной статьи не имеет смысла углубляться в разбор тонкостей и различий между SVN и GIT. Скажем лишь, что GIT, являясь распределенной системой, позволяет программистам работать локально, имея на рабочей машине полный репозиторий проекта. При этом GIT сохраняет метаданные изменений, что упрощает слияние версий и переключение между версиями. SVN требует наличия сетевого соединения между разработчиками и сохраняет файлы целиком. SW4STM32 обеспечивает поддержку как SVN, так и GIT.

Рассмотрим последовательность действий при подключении проекта к SVN (рисунок 18).

  • в открытом проекте щелкнуть по его названию на панели директорий правой кнопкой мыши и пройти Team → Share Project(s) (рисунок 18а);
  • выбрать тип системы SVN/GIT и нажать “Next” (рисунок 18б);
  • выбрать директорию для SVN и нажать “Next” (рисунок 18в);
  • выбрать директорию хранения проекта в SVN нажать “Finish” (рисунок 18г);
  • на вкладке “General” (рисунок 18д) выбрать URL-адрес SVN, метку для репозитория, имя пользователя, пароль, нажать “Next”;
  • ввести комментарий для проекта, выбрать файл, помещаемый под контроль SVN, нажать “OK” (рисунок 18е).

В дальнейшем для синхронизации файла или всего проекта необходимо щелкнуть по его названию на панели директорий правой кнопкой мыши и выбрать Team → Commit. В открывшемся окне следует написать пояснение к изменениям и нажать “OK”.

Для отключения SVN следует использовать команду Team → Disconnect.

Для импорта проекта из SVN применяется команда меню Import → SVN → Project from SVN. Далее требуется выполнить ряд настроек по импорту во всплывающих диалоговых окнах.

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

  • отсутствие встроенного симулятора;
  • компилятор GCC проигрывает своим коммерческим собратьям по объему кода и быстродействию;
  • поддержка SW4STM32 со стороны разработчиков не будет столь оперативной, как в случае с платными средами.

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

Отладка кода может производиться не только в SW4STM32, но с помощью дополнительных средств. Рассмотрим некоторые из них.

STMStudio – простой способ отладки приложений на STM32

STM Studio – фирменная утилита производства компании STMicroelectronics, которая помогает проводить отладку программы и позволяет отслеживать значения пользовательских переменных при выполнении кода в реальном времени. Данная программа запускается под ОС Windows и использует отладчик ST-LINK для связи с микроконтроллером.

STM Studio имеет следующие возможности :

  • чтение переменных из ОЗУ «на лету», без влияния на работу пользовательской программы;
  • использование исполнительных файлов.elf, .out, .axf для импорта переменных;
  • вывод значений переменных в табличной и графической форме;
  • графический вывод в виде графиков или диаграмм;
  • возможность вывода зависимостей переменных, когда одна из переменных откладывается по оси Х, а вторая – по оси Y;
  • логирование данных в файл для последующего просмотра.

Окно STM Studio состоит из нескольких панелей (рисунок 19).

Работа с STM Studio начинается с импорта переменных. Для этого в программу необходимо загрузить тот же исполнительный файл, что находится в самом микроконтроллере. Для этого подойдут следующие форматы, которые генерируются при компиляции: .elf, .out, .axf. Далее необходимо выполнить команду File → Import variables. В диалоговом окне при выборе пункта “Expand table elements” пользователь сможет вручную выбрать из предлагаемой таблицы любые глобальные переменные. Для запуска отладки необходимо выполнить команду “Run”.

Как говорилось выше, STM Studio позволяет отображать переменные в трех формах: в виде текста, диаграммы и графика (рисунок 20). Настройка типа отображения может быть изменена в любое время. Кроме того, все данные дополнительно записываются в лог-файл для дальнейшего анализа. Интересной особенностью STM Studio является возможность отображения зависимостей одних переменных от других, а также построения выражений из переменных.

Популярным средством передачи отладочной информации является использование консоли и функции вывода printf().

Реализация терминального вывода printf() через USART

Использование стандартной функции printf() – один из наиболее популярных методов вывода отладочной информации. С помощью данной функции вывода пользователь может передавать любые данные на консоль среды разработки или терминал. Большинство интегрированных сред поддерживает эту возможность. При использовании STM32 есть два способа реализации этого метода: традиционный, с помощью UART, и дополнительный, через SWO-интерфейс с помощью отладчика ST-LINK. Реализация каждого из них максимально упрощается при использовании STM32CubeMX и SW4STM32.

Рассмотрим вначале первый вариант реализации – через UART. Для этого придется выполнить следующую последовательность действий:

  • обеспечить аппаратное подключение к ПК;
  • выполнить настройку UART в среде STM32CubeMX;
  • реализовать саму функцию printf() в среде SW4STM32.

Подключение к ПК можно выполнить тремя путями: через COM-порт и микросхему приемопередатчика RS-232; через USB-порт и микросхему конвертера UART-USB (например, FT232); с помощью USB-интерфейса отладчика ST-LINK. Вне зависимости от того, какой способ выбран, далее необходимо сконфигурировать аппаратный UART.

C помощью STM32CubeMX настройка UART выполняется в несколько кликов (рисунок 21). Сначала на вкладке Pin Wizard соответствующие выводы контроллера переводятся в режим работы UART. Далее во вкладке “Configuration” настраиваются параметры UART: тип обмена, скорость, наличие стоп-битов и так далее. После этого генерируется С-код.

В среде SW4STM32 необходимо подключить стандартную библиотеку и определить функции _io_putchar() и _write(), например, так:

/*USER CODE BEGIN Includes*/

#include

/*USER CODE END Includes*/

/*USER CODE BEGIN 1*/

int __io_putchar(int ch)

c = ch & 0x00FF;

HAL_UART_Transmit(&huart2,&*c,1,10);

int _write(int file, char *ptr, int len)

for (DataIdx = 0; DataIdx < len; DataIdx++)

Достоинствами такого подхода к передаче отладочной информации можно считать:

  • использование интерфейса UART, который присутствует во всех микроконтроллерах STM32 без исключения;
  • простоту настройки и привычность для программистов. Можно использовать старые наработки из проектов с другими контроллерами;
  • отсутствие сложного аппаратного обеспечения (за исключением моста UART-USB или приемопередатчика RS-232);
  • отсутствие сложного ПО. Работа производится со всеми IDE или терминальными программами.

Однако есть у этого метода и недостатки. Во-первых, придется пожертвовать каналом UART для отладки. А во-вторых, такая реализация влияет на работу контроллера, так как занимает ядро для обработки кода функции printf(). В случае с STM32 есть более специализированный, а главное – простой способ, который не занимает ресурсы микроконтроллера – использование связки SWO и ST-LINK.

Реализация терминального вывода printf() через SWO

При использовании связки SWO и ST-LINK создание терминального ввода/вывода оказывается еще проще, чем в рассмотренном выше методе с аппаратным UART. В этом случае связь с ПК осуществляется через интерфейс SWO и USB-интерфейс, используемый в ST-LINK. Последовательность действий остается примерно той же, что и в предыдущем случае.

Сначала с помощью STM32CubeMX происходит настройка выводов SWO-интерфейса во вкладках “Pin Wizard” и “Configuration” (рисунок 22). После этого происходит перегенерация кода для среды разработки.

Следующий шаг заключается в написании кода обработчика __io_putchar(int ch), например, так:

/*USER CODE BEGIN 1*/

int __io_putchar(int ch)

ITM_SendChar(ch);

/*USER CODE END 1*/

Для отладки удобно использовать утилиту STLink Utility (рисунок 23).

Достоинства метода:

  • не требует дополнительных ресурсов и не занимает коммуникационные интерфейсы;
  • работает параллельно с основной программой и не влияет на скорость ее выполнения, так как не использует ядро для вычислений;
  • идеальный выбор для отладочных наборов с ST-LINK на борту, так как представляет готовое решение.

Из недостатков этого метода реализации можно отметить аппаратную зависимость, так как требуется наличие ST-LINK.

Заключение

Компания STMicroelectronics выпускает более семисот моделей микроконтроллеров STM32, которые отличаются по производительности/потреблению/цене/уровню интеграции. Каждый пользователь сможет подобрать себе оптимальную модель с учетом требований конкретного приложения.

Важным преимуществом STM32 является наличие развитой системы средств отладки. К услугам разработчиков предлагается более ста отладочных плат (Nucleo, Discovery, Evaluation Boards). Еще большим подспорьем для программистов станет наличие полного набора бесплатного прикладного ПО для создания, компиляции и отладки программного кода:

ST MCU Finder – приложение для смартфонов, помогающее выбрать наиболее оптимальный МК для конкретного приложения;

STM32CubeMX – кроссплатформенный графический редактор для конфигурирования микроконтроллеров STM32 и автоматической генерации кода. STM32CubeMX также способен оказать помощь при выборе оптимального микроконтроллера, оценить потребляемую мощность и упростить миграцию проекта между различными МК.

SW4STM32 – кросплатформенная интегрированная среда разработки встраиваемого ПО для микроконтроллеров STM32.

STM32 Studio – утилита для отслеживания и графической визуализации значений переменных при выполнении кода в реальном времени.

ST-LINK Utility позволяет совместно с программатором ST-Link выполнять ввод и вывод отладочной информации через SWO-интерфейс.

Данный набор ПО позволяет выполнить полный цикл разработки резидентного ПО, не потратив ни единого рубля.

Литература

  1. Data brief. NUCLEO-XXXXKX. STM32 Nucleo-32 board. Rev 3. ST Microelectronics, 2016.
  2. Data brief. NUCLEO-XXXXRX. STM32 Nucleo-64 board. Rev 8. ST Microelectronics, 2016.
  3. Data brief. NUCLEO-XXXXZX. STM32 Nucleo-144 board. Rev 5. ST Microelectronics, 2017.
  4. UM1718. User manual. STM32CubeMX for STM32 configuration and initialization C code generation. Rev 18. ST Microelectronics, 2017.
  5. UM1884. User manual. Description of STM32L4 HAL and Low-layer drivers. Rev 5. ST Microelectronics, 2016.
  6. UM1025. User manual. Getting started with STM-STUDIO. Rev6. ST Microelectronics, 2013.
  7. UM0892.User manual STM32 ST-LINK utility software description. Rev 22. ST Microelectronics, 2016.

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

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 .

Опционально вы также можете загрузить программу STLinkUpgrade, доступную для скачивания (также потребуется регистрация). Эта программа предназначена для обновления прошивки программаторов STLink, что нередко приводит к исправлению багов, ну или как минимум к лучшим сообщениям об ошибках. Как и STM32CubeMX, эта программа написана на Java.

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

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

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

Лично я взял плату помощнее — Nucleo-F411RE , на вырост, так сказать:

На двух других вкладках с названиями 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), поэтому отдельно сохранять его не требуется.

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

BINPATH =/ usr/ bin
PREFIX =arm-none-eabi-

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

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

OPT = -Og -Wall

Иначе компилятор не будет ругаться на код, который скорее всего содержит ошибки — например, выражение if (arr[ i] = 1 ) , на месте которого почти наверняка должно быть if (arr[ i] == 1 ) .

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

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

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

# проверьте, что для отступа используется табуляция, а не пробелы!
flash: all
st-flash --reset write build/ $(TARGET) .bin 0x8000000
erase:
st-flash --reset erase
uart:
screen / dev/ ttyACM0

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

FIRMWARE = $(HOME) / STM32Cube/ Repository/ STM32Cube_FW_F4_V1.18.0

… а также прогнал бы Makefile через утилиту dos2unix.

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

Пишем код!

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

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

По задумке, код нужно вписывать между этими комментариями, чтобы при обновлении проекта в STM32CubeMX пользовательский код не был затерт. Лично я добавил вызов процедур init() и loop() в окрестностях основного цикла программы:

/* Infinite loop */
/* USER CODE BEGIN WHILE */
init() ;
while (1 )
{
loop() ;
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

… а сами процедуры объявил перед процедурой main() :

/* USER CODE BEGIN 0 */

void init(void ) {
/* do nothing, yet */
}

void loop(void ) {
/*
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_Delay(500);
*/

if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5) ;
}

HAL_Delay(100 ) ;
}

/* USER CODE END 0 */

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

Подключаем плату и говорим make flash . Если все было сделано правильно, нажатие синей кнопки на плате будет приводить к переключению зеленого светодиода. Также можно оставить в процедуре loop() только код, который в приведенном выше отрывке я закомментировал, и тогда программа превратиться в обычный Blink.

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

Заключение

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

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

А как вы разрабатываете под STM32?

Дополнение: Если вам понравилась эта заметка, вас могут заинтересовать статьи об обмене данными по UART , SPI , I2C и I2S в контексте микроконтроллеров STM32. Также обратите внимание на посты

Совсем недавно компания 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;
  • Беспроводные микроконтроллеры семейства

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

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

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

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

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

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

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

Рис. 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).

Рис. 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):

Рис. 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).

Рис. 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 доступна для скачивания с официального сайта разработчика: https://atollic.com/ . Инструкция по скачиванию представлена в видеоролике, дополняющем данную статью.

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

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

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

Рис. 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.

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

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

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

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

Всё это для меня на тот момент показалось непостижимо сложным, и я даже пришел в некоторое смятение, но от реализации поставленной задачи отказываться не собирался. Так я познакомился с семейством микроконтроллеров STM32 и платой STM32F0-Discovery, после изучения которых мне хотелось бы сваять свой девайс под нужные мне цели.

К моему большому удивлению, такого большого комьюнити, статей, примеров, различных материалов по STM не было в таком же изобилии как для Arduino. Конечно, если поискать найдется множество статей «для начинающих» где описано, как и с чего начать. Но на тот момент мне показалось, что все это очень сложно, не рассказывались многие детали, интересные для пытливого ума новичка, вещи. Многие статьи хоть и характеризовались как «обучение для самых маленьких», но не всегда с их помощью получалось достичь требуемого результата, даже с готовыми примерами кода. Именно поэтому я решил написать небольшой цикл статей по программированию на STM32 в свете реализации конкретной задумки: пульт управления освещением в комнате.

Почему не AVR/Arduino?

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

Во-первых, решающую роль сыграло отношение цена-функционал, разницу видно даже между одним из самых дешевых и простых МК от ST и достаточно «жирной» ATMega:


После того, что я увидел значительные различия между ценой и возможностями AVR и STM32 – мною было принято решение, что AVR использовать в своей разработке я не буду =)

Во-вторых, я предварительно для себя старался определить набор умений и навыков, которые бы я получил к моменту, когда я достигну требуемого результата. В случае если бы я решил использовать Arduino – мне было бы достаточно скопировать готовые библиотеки, накидать скетч и вуаля. Но понимание того, как работают цифровые шины, как работает радиопередатчик, как это всё конфигурируется и используется – при таком раскладе мне бы не пришло бы никогда. Для себя я выбрал самый сложный и тернистый путь, чтобы на пути достижения результата – я бы получил максимум опыта и знаний.

В-третьих, любой STM32 можно заменить другим STM32, но с лучшими характеристиками. Причем без изменения схемы включения.

В-четвертых, люди, занимающиеся профессиональной разработкой больше склонны к использованию 32-разрядных МК, и чаще всего это модели от NXP, Texas Instruments и ST Microelectronics. Да и мне можно было в любой момент подойти к своим инженерам из отдела разработки и разузнать о том, как решить ту или иную задачу и получить консультацию по интересующим меня вопросам.

Почему стоит начинать изучение микроконтроллеров STM32 с использования платы Discovery?

Как вы уже поняли, знакомство и изучение микроконтроллера STM32 мы начнем с Вами, уважаемые читатели, с использования платы Discovery. Почему именно Discovery, а не своя плата?

Что нам понадобится для разработки помимо платы Discovery?

В своей работе с платой Discovery нам понадобится еще ряд незаменимых вещей, без которых мы не сможем обойтись:

Приступим к первоначальной настройке и подготовке IDE к работе!

После того, как скачается установочный файл нашей IDE можно приступать к установке. Следуя указаниям инсталлятора проведите процесс установки. После того, как скопируются все файлы, необходимые для работы появится окно установщика софтовых пакетов для разработки Pack Installer . В данном установщике содержатся низкоуровневые библиотеки, Middleware, примеры программ, которые регулярно пополняются и обновляются.


Для начала работы с нашей платой нам необходимо установить ряд пакетов необходимых для работы и необходимо найти микроконтроллер, с которым мы будем работать. Так же можно воспользоваться поиском вверху окна. После того, как мы нашли наш МК кликаем на него и во второй половине окна и нам необходимо установить следующий перечень библиотек:
  1. Keil::STM32F0xx_DFP – полноценный пакет программного обеспечения для конкретного семейства микроконтроллеров, включающий в себя мануалы, даташиты, SVD-файлы, библиотеки от производителя.
  2. ARM::CMSIS – пакет Cortex Microcontroller Software Interface Standard, включающий в себя полный набор библиотек от ARM для поддержки ядра Cortex.
  3. Keil::ARM_Compiler – последняя версия компилятора для ARM.
После установки требуемых паков можно перейти к настройке IDE и нашего отладчика/программатора. Для этого нам необходимо открыть главное окно Keil и создать новый проект.


Для этого необходимо перейти в меню Project -> New uVision Project и выбрать папку, в которую сохраним наш проект.

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


И вновь появится, уже знакомое нам, окно в котором мы можем подключить интересующие нас модули к проекту. Для нашего проекта понадобится два модуля:
  1. Ядро библиотеки CMSIS , в котором объявлены настройки, адреса регистров и многое другое из того что необходимо для работы нашего МК.
  2. Startup-файл , который отвечает за первоначальную инициализацию МК при старте, объявление векторов и обработчиков прерываний и многое другое.
Если все зависимости у подключаемых удовлетворены – менеджер будет нам сигнализировать об этом зеленым цветом:


После того как мы нажмем клавишу ОК мы можем приступать к созданию нашего проекта.

Для того, чтобы сконфигурировать параметры проекта и настроить наш программатор нужно правым кликом по Target 1 открыть соответствующее меню.


В главном меню проекта настраиваем параметр Xtal в значение 8.0 MHz . Данный параметр отвечает за частоту работы кварцевого осциллятора нашего МК:


Далее переходим к настройке нашего программатора/дебагер. Кликаем в этом же окне на вкладку Debug и выбираем в поле Use параметр ST-Link Debugger и переходим в настройки:


В настройках мы должны увидеть модель нашего ST-Link установленного на плате, его серийный номер, версию HW и IDCODE МК который будем прошивать:

Для удобства можно настроить параметр, отвечающий за то, чтобы МК сбрасывался автоматически после перепрошивки. Для этого нужно поставить галочку в поле Reset and Run .


После этого нужно настроить еще одну опцию, которая позволит нам писать русскоязычные комментарии к коду наших проектов. Нажимаем кнопку Configuration и в открывшемся меню в поле Encoding выбираем Russian Windows-1251 .


Всё. Наша IDE и программатор готовы к работе!

В Keil имеется удобный навигатор по проекту, в котором мы можем видеть структуру проекта, необходимые для работы справочные материалы, в т. ч. те, которые мы уже скачали к себе на компьютер до этого (схема Discovery, datasheet, reference manual), список функций, использованных в проекте и шаблоны для быстрой вставки разных языковых конструкций языка программирования.


Переименуем папку в структуре проекта с Source Group 1 на App/User , таким образом обозначив то, что в данной папке у нас будут располагаться файлы пользовательской программы:


Добавим основной файл программы через навигатор проекта, выполнив команду Add New Item To Group “App/User” .


Необходимо выбрать из предложенного списка C File (.c) и назначить ему имя main.c :


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

Что ж, теперь мы можем приступить к созданию нашей программы.

Первым делом, необходимо подключить к нашему исполняемому файлу заголовочный документ нашего семейства микроконтроллеров. Добавим в файл main.c строки следующего содержания, данная программа заставить попеременно моргать наши светодиоды:

/* Заголовочный файл для нашего семейства микроконтроллеров*/ #include "stm32f0xx.h" /* Тело основной программы */ int main(void) { /* Включаем тактирование на порту GPIO */ RCC->AHBENR |= RCC_AHBENR_GPIOCEN; /* Настраиваем режим работы портов PC8 и PC9 в Output*/ GPIOC ->MODER = 0x50000; /* Настраиваем Output type в режим Push-Pull */ GPIOC->OTYPER = 0; /* Настраиваем скорость работы порта в Low */ GPIOC->OSPEEDR = 0; while(1) { /* Зажигаем светодиод PC8, гасим PC9 */ GPIOC->ODR = 0x100; for (int i=0; i<500000; i++){} // Искусственная задержка /* Зажигаем светодиод PC9, гасим PC8 */ GPIOC->ODR = 0x200; for (int i=0; i<500000; i++){} // Искусственная задержка } }
После того, как мы написали нашу программу, настала пора скомпилировать код и загрузить прошивку в наш МК. Чтобы скомпилировать код и загрузить можно воспользоваться данным меню.



Похожие статьи