Урок №4 HelloWorld

Сегодня мы разберем создание проекта с помощью приложений SW4STM32 и STM32CubeMX на примере классической программы HelloWorld для микроконтроллеров — мигание светодиодом. Сначала мы заставим мигать светодиод по обычной, однопоточной технологии написания программ для микроконтроллеров, а затем, выполним ту же задачу с помощью операционной системы реального времени — FreeRTOS.

Запустите STM32CubeMX, выберите New Project и в появившемся окне в левой колонке фильтра микроконтроллеров установите галочки, как показано на скриншоте:

Выбранные галочки сверху-вниз означают: ядро М3, серия F1, линейка F103, корпус 64-х выводной LQFP. В правом окне внизу появятся отфильтрованные результаты поиска, согласно выбранным критериям. Выберите STM32F103RB с Flash памятью 128 килобайт и RAM 20 килобайт, именно такой микроконтроллер стоит на борту системной платы CyberSteak’а. Далее нажмите Start Project.

В созданном проекте в правом окне отобразится выбранный микроконтроллер. Выполним основные настройки периферии. Для подключения кварцевого резонатора, установленного на системной плате, раскройте вкладку RCC в окне дерева элементов периферии и в поле High Speed Clock (HSE) выберите Crystal Ceramic Resonator. В окне отображения микроконтроллера выводы, подключенные к кварцевому резонатору изменят цвет на зеленый, уведомляя нас о том, что эти выводы больше нельзя использовать для других нужд (почти для всех выводов STM32 можно выполнить переназначение — remapping).  Для возможности использования программатора по протоколу SWD раскройте вкладку SYS и в поле Debug выберите Serial Wire. Соответствующие выводы контроллера изменят цвет на зеленый. Результат —  на скриншоте:

На системной плате имеется светодиод подсоединенный к выводу 13 порта С. Настроим этот вывод как выход. Наведите указатель мыши на вывод PC13, нажмите левую кнопку для вызова контекстного меню конфигурирования вывода и выберите GPIO_Output. Вывод изменит цвет на зеленый. Теперь нажмите правую кнопку мыши на этом выводе и выберите Enter User Label для присвоения произвольного имени, например BLUE_LED:

Перейдем на вкладку Clock Configuration для настройки тактирования периферии. К счастью на этой страшной, на первый взгляд, вкладке все уже настроено. Мы лишь поменяем частоту тактирования на максимальную для этого микроконтроллера — 72 MHz. В поле HCLK установите значение 72 и нажмите Enter:

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

В результате система установит следующие настройки коэффициентов:


Далее на вкладке Configuration в поле System основного окна нажмите кнопку GPIO для настройки портов ввода-вывода:

В окне Pin Configuration отображаются выводы, которым были присвоены значения на вкладке Pinout, отличающиеся от значений в сброшенном состоянии микроконтроллера (reset state):

Выбрав пин PC13 отобразится дополнительная настройка его конфигурации. Присвойте для GPIO output level значение High, чтобы светодиод в момент запуска программы не светился, т.к. его анод подключен к плюсу питания 3.3 вольта, а катод — через токоограничительный резистор — к выводу PC13. Для значения GPIO mode присвойте значение Output Push Pull — двухтактный выход.  Остальные параметры оставьте без изменения, нажмите Ok.

Вот и все настройки. Остается сохранить проект и сгенерировать код инициализации микроконтроллера. Перейдите в настройки проекта в меню Project, выбрав пункт Settings, появится окно:

Во вкладке Project в поле Project Name укажите название проекта. В Project Location укажите путь к папке проекта на компьютере. В Toolchain/IDE укажите среду разработки SW4STM32. Остальные настройки оставим без изменений.

Во вкладке Code Generator отметьте пункты как показано на скриншоте:

В проект будут добавлены только необходимые файлы из библиотеки, а пользовательский код будет сохранен при регенерации проекта в STM32CubeMX. Нажмите Ok.

Теперь сгенерируем код. Зайдите в меню Project и нажмите Generate Code. Появится сообщение системы об успешной генерации кода и будет предложено открыть проект:

Делать мы этого не будем. Закройте окно и откройте интегрированную среду разработки SW4STM32. Нам необходимо импортировать проект из STM32CubeMX. Для этого в меню File нажмите Import:

В появившемся окне выберите Existing Projects into Workspace и нажмите Next. В следующем окне укажите папку, в которую генерировали проект в STM32CubeMX.  В окне Projects должен появиться проект. Выберите его и завершите импортирование, нажав Finish.

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

Запрограммируем функционал.  В дереве проекта в папке «Src» откройте  файл main.c и промотайте до функции while(1) — основного цикла программы.

Для сохранности пользовательского кода после регенерации проекта в STM32CubeMX код необходимо вставлять между комментариев типа
/* USER CODE BEGIN  */

/* USER CODE END */
После строки с комментарием /* USER CODE BEGIN 3 */ добавьте функцию смены состояния пина из библиотеки аппаратных абстракций HAL: HAL_GPIO_TogglePin(GPIOC, BLUE_LED_Pin);
и добавьте задержку: HAL_Delay(200); //200ms

Должно получиться так:

Сохраните проект и выполните компиляцию, нажав . Запрограммируйте CyberSteak, как было показано в предыдущем уроке, выбрав файл *.bin в папке Debug. Если все выполнено правильно, должен замигать синий светодиод.

На видео приведена реализация поставленной задачи:

play-sharp-fill

На этом урок не заканчивается. Теперь выполним эту же задачу, но средствами операционной системы реального времени FreeRTOS.

Откройте наш проект в STM32CubeMX и в левом окне конфигурации промежуточного программного обеспечения MiddleWares активируйте FREERTOS, установив галочку.

Разверните вкладку SYS и измените источник для временной базы Timebase Source с SysTick на TIM1.

Откройте вкладку Configuration и в поле MiddleWares нажмите кнопку FREERTOS для конфигурирования.

В открывшемся окне зайдите во вкладку Tasks and Queues для того, чтобы создать задачу (независимый поток) мигания светодиодом:

Система о нас уже позаботилась и создала одну задачу DefaultTask с параметрами по умолчанию. Ее и будем использовать. Ничего не меняя, нажмем Ok. Больше в STM32CubeMX сегодня делать нечего. Сохраним проект  и сгенерируем код.

Открыв SW4STM32 вы увидите, что проект изменился: появилась папка MiddleWares, содержащая операционную систему, в папках Src и Inc тоже добавилось несколько файлов для работы с операционной системой.  Файл main.c претерпел изменения по части инициализации операционной системы, а также, добавилось описание новой функции StartDefaultTask, которую мы сгенерировали в STM32CubeMX. Прокрутив до функции главного цикла while(1) вы увидите, что код, который мы написали раньше между комментариев  /* USER CODE BEGIN  3*/… /* USER CODE END 3*/ остался без изменений.

Удалите этот код из главного цикла, потому что до этого места программа при работе операционной системы никогда не дойдет. Код мигания светодиодом добавим в функцию StartDefaultTask, являющейся одним (пока) из многочисленных независимых потоков операционной системы. Найдите ее и впишите код смены состояния пина с помощью HAL-функции из предыдущего примера в бесконечный цикл:

Здесь osDelay(100); означает задержку в 100 ms. Сохранив проект, скомпилировав его и записав в CyberSteak, вы увидите, что синий светодиод начнет мигать точно так же, как и раньше, только средствами операционной системы FreeRTOS.

Данный пример показывает нам, что операционная система настроена правильно и все работает должным образом.

Для понимания работы операционной системы, о том что такое независимые потоки и как все устроено рекомендуем обратиться к документам «The FreeRTOStm Reference Manual»  и «Mastering the FreeRTOStm Real Time Kernel».

 

Урок №3 Настроим рабочее место

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

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

Для кодинга:

  • AC6 SW4STM32 — System Workbench for STM32: свободно распространяемая интегрированная среда разработки программного обеспечения на основе Eclipse, которая поддерживает полный спектр микроконтроллеров семейства STM32
  • STM32CubeMX — embedded software: визуальный графический конфигуратор для микроконтроллеров STM32 с набором программных компонентов таких как HAL, LL, middleware и  примерами приложений

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

  • Adobe Photoshop: графический редактор
  • LCD Image Converter: приложение позволяет создавать растровые изображения и шрифты, и преобразовать их в исходный формат «Cи» для программ, встроенных в микроконтроллеры
  • Bryce: генератор ландшафтов и 3d моделей

Теперь обо всем по порядку.

Интегрированная среда SW4STM32, созданная сервисной компанией AC6, которая предоставляет обучение и консультации по встроенным системам, предназначена для разработки программного обеспечения устройств на контроллерах STM32. Среда  позволяет значительно упростить и ускорить разработку прикладного программного обеспечения для микроконтроллеров всего семейства STM32. Ключевые особенности:

  • Всесторонняя поддержка для микроконтроллеров STM32, всех оценочных плат STM32, а также прошивок STM32 (библиотек SPL — Standard Peripheral Library и HAL — Hardware Abstraction Layer)
  • GCC C/C++ компилятор (свободно распространяемый)
  • GDB отладчик (свободно распространяемый)
  • Основана на платформе Eclipse с управлением работой в команде
  • Совместима с плагинами для Eclipse
  • Поддержка программаторов ST-LINK
  • Без ограничения по размеру кода
  • Кроссплатформенность

Для скачивания инсталлятора откройте сайт www.st.com, наберите в поиске «sw4stm32». Внизу страницы отобразится переход на сайт www.openstm32.org, где вам предложат войти (Log in) или зарегистрироваться (Register). Скачайте инсталлятор и установите программу, следуя мастеру установки. Минимальные аппаратные требования к  компьютеру: 1 Гбайт RAM и 2 Гбайта свободного дискового пространства. Установка не должна вызвать особых проблем. Если во время установки система потребует установить пакет Java SE Runtime Environment (JRE), необходимо нажать «Ok» для того, чтобы выйти на сайт Oracle и загрузить последнюю версию Java соответствующую вашей операционной системе.

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

  • Интуитивно понятный выбор микроконтроллера STM32
  • Графическая конфигурация микроконтроллера:
    • Pinout: назначение выводов с автоматическим разрешением конфликтов
    • Clock tree: настройка тактирования с динамической проверкой конфигурации
    • Функциональные режимы периферийного и промежуточного ПО и инициализация с динамической проверкой ограничений параметров
    • Калькулятор энергопотребления
  • Генерация кода Cи, охватывающая инициализацию микроконтроллеров STM32, совместимых с компиляторами IAR™, Keil™ и GCC
  • Доступен как автономное кроссплатформенное программное обеспечение

Для скачивания инсталлятора откройте сайт www.st.com, наберите в поиске «stm32cubemx». Внизу страницы отобразится ссылка для скачивания, нажав на которую, начнется процесс загрузки при условии входа (Log in) или регистрации (Register). Установите программу, следуя мастеру установки.

Практическое применение STM32CubeMX и SW4STM32 будет рассмотрено в следующем уроке на примере классической программы HelloWorld для микроконтроллеров — мигание светодиодом в однопоточной системе и с помощью операционной системы реального времени FreeRTOS.

Графические программы здесь мы рассматривать не будем за исключением утилиты LCD Image Converter, которая позволяет:

  • Создавать изображения
  • Создавать шрифты (набор изображений — символов), включая кодировку юникода
  • Создавать структуры данных для дисплеев:
    • Монохромных, градаций серого и цветных
    • С вертикальной и горизонтальной ориентацией байт
    • 8, 16, 24, 32 бит данных
    • 1…32 бит на пиксел
  • Импортировать из файлов графических форматов (bmp, gif, jpg, jpeg, png, pbm, pgm, ppm, tiff, xbm, xpm)
  • Экспортировать в файлы (bmp, jpg, png, ppm, tiff, xbm, xpm)
  • Просматривать в редакторе с увеличением от 1 до 50 раз

Для скачивания утилиты пройдите на сайт www.riuson.com в раздел Загрузки и выберите подходящий вариант из числа представленных. Распакуйте архив в папку. Используйте файл lcd-image-converter.exe для запуска программы.  Инсталляция не требуется. Работу с программой рассмотрим в одном из уроков, посвященных работе с выводом изображений на дисплей.

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