STM32F103C — это процессор ARM Cortex M3, который может использовать FreeRTOS. В этой статье мы рассмотрим как использовать FreeRTOS на плате STM32F103C8 непосредственно из Arduino IDE. Мы также можем использовать Keil, но в этом случае нам нужно загрузить и вставить загруженные файлы в путь Keil, а это довольно длительный процесс по сравнению с Arduino IDE. Чтобы узнать больше о том, как работать с FreeRTOS на плате STM32F103C8 вы можете обратиться к официальной документации данной операционной системы FreeRTOS STM32F103C8.
Ранее на нашем сайте мы рассматривали ряд вопросов по использованию FreeRTOS на платах Arduino:
- как использовать FreeRTOS в Arduino – руководство для начинающих;
- использование очередей в Arduino FreeRTOS;
- использование семафоров и мьютексов в FreeRTOS на Arduino Uno.
Необходимые компоненты
- Отладочная плата STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
- Плата FTDI (3.3V) (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Что такое FreeRTOS?
FreeRTOS - это бесплатная операционная система реального времени (real-time OS, RTOS) с открытым исходным кодом, которая работает на многих популярных микроконтроллерах, включая STM32.
Операционная система (ОС) может быть частью программного обеспечения, которая управляет другими программными и аппаратными ресурсами в вычислительной системе. Универсальная ОС обычно разрабатывается с учетом пользовательского опыта.
Например, предположим, что мы разрабатываем приложение на ОС для мобильного телефона. Пользователь может захотеть транслировать фильм, поэтому мы можем разбить этот потоковый опыт на две задачи: загрузка фрагментов видео из сети как Задание 1 и отображение каждого фрагмента пользователю как Задание 2. Эти задачи могут быть частью эквивалентной программы, в этом случае они могут быть реализованы как параллельно работающие потоки.
Если в нашем процессоре доступно только 1 ядро, наше потоковое приложение может быстро переключаться между заданиями 1 и 2, создавая у пользователя впечатление, что загрузка и просмотр происходят в одно и то же время.
Важно знать, как происходит работа с FreeRTOS на плате STM32F103C8 в Arduino IDE. Хотя FreeRTOS является базовой программной средой, которая позволяет переключать задачи, планировать и т. д., мы не будем делать вызовы FreeRTOS напрямую. ARM создала библиотеку CMSIS-RTOS, которая позволяет нам формировать вызовы базовой RTOS, тем самым улучшая переносимость кода между различными процессорами ARM.
Как загрузить FreeRTOS для STM32F103C8 в Arduino IDE?
Итак, мы рассмотрим, как поэтапно установить FreeRtos для Arduino.
Шаг 1:
В Arduino IDE сначала перейдите в File -> Preferences (Файл -> Настройки). Скопируйте ссылку ниже и вставьте в дополнительный менеджер плат, как показано на рисунке ниже. Ссылка для скачивания
1 |
http://dan.drown.org/stm32duino/package_STM32duino_index.json |
Шаг 2:
Теперь нам нужно скачать файл библиотеки FreeRTOS. Для загрузки перейдите в Sketch-> Include Library-> Manage libraries и нажмите Manage Libraries.
Шаг 3:
Теперь подождите секунду, в строке поиска введите FreeRTOS, он отобразит некоторые файлы библиотеки, прокрутите вниз и найдите STM32duino FreeRTOS Ричарда Барри. Затем выберите эту библиотеку и нажмите install («Установить»). Установка займет некоторое время. После установки отобразится как установленное.
Шаг 4:
Теперь наш Arduino может использовать библиотеку freeRTOS для STM32F103C8. Мы напишем простую программу мигания для встроенного светодиода и отдельного светодиода.
Схема проекта
Для демонстрации возможности использования freeRTOS в плате STM32F103C8 мы будем использовать схему, представленную на следующем рисунке.
Здесь я использую один встроенный светодиод, подключенный к PC13, а другой светодиод подключается отдельно и подключается к PB11.
Как запустить две разные задачи на STM32F103C8 с использованием FreeRTOS?
Я использую два светодиода, для двух светодиодов создаю две задачи для каждого светодиода. В этой задаче один светодиод мигает в течение одной секунды, а другой светодиод мигает в течение 200 мс. Теперь давайте начнем кодирование для мигания этих двух светодиодов с помощью FreeRTOS.
Создайте новый скетч в Arduino IDE, скопируйте и вставьте в него приведенный ниже код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <MapleFreeRTOS821.h> #define BOARD_LED_PIN PC13 #define LED_PIN PB11 static void task1(void *pvParameters) { for (;;) { vTaskDelay(1000); digitalWrite(BOARD_LED_PIN, HIGH); vTaskDelay(1000); digitalWrite(BOARD_LED_PIN, LOW); } } static void task2(void *pvParameters) { for (;;) { vTaskDelay(200); digitalWrite(LED_PIN, HIGH); vTaskDelay(200); digitalWrite(LED_PIN, LOW); } } void setup() { pinMode(BOARD_LED_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); xTaskCreate(task1,"Task1", configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY + 2,NULL); xTaskCreate(task2,"Task1", configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY + 2,NULL); vTaskStartScheduler(); } void loop() { } |
После загрузки кода вы можете увидеть следующий результат.