Опубликовано Автор: Elena
Комплект STMicroelectronics STM32 IoT Discovery должен облегчить разработку программного обеспечения для IoT-узлов благодаря квалифицированному порту FreeRTOS, интегрированному в экосистему STM32Cube и готовому для подключения к веб-сервисам Amazon (AWS).
Аппаратное обеспечение состоит из микроконтроллера STM32L4 + Cortex-M4F, различных датчиков MEMS, защищенного элемента и обеспечивает подключение по Wi-Fi, Bluetooth 4.2 и NFC.
Основные характеристики и спецификации комплекта STM32 IoT Discovery (B-L4S5I-IOT01A):
Комплект STM32 IoT Discovery поставляется с пакетом расширения STM32Cube X-CUBE-AWS v2. 0, который обеспечивает надлежащую интеграцию стандартной среды подключения AWS FreeRTOS в среду STM32Cube. Он обеспечивает поддержку всех низкоуровневых функций платы из коробки, включая WiFi и датчики, а также нативные сервисы AWS, такие как стандартные задачи «Прошивка по воздуху» (FOTA), а также регистрация нескольких учетных записей AWS IoT Core, подключение, подписка и публикация, а также задания, которые защищены благодаря встроенным элементам безопасности.
Комплект STM32 IoT Discovery (B-L4S5I-IOT01A) можно заказать за 54 доллара США либо непосредственно у STMicro, либо через дистрибьюторов. Более подробную информацию, включая ссылки для скачивания пакета расширения X-CUBE-AWS v2.0 STM32Cube, можно найти на странице продукта.
Выражаем свою благодарность источнику с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.
РубрикиFreeRTOS, STMicro STM32, Аппаратные средстваМеткиAmazon, Bluetooth, IoT, NFC, STM32, Датчики, Плата для разработки, платформа для разработчикаЗапуск FreeRTOS | 609 |
Это всего лишь введение в сложные темы, лежащие в основе ОСРВ. Мы проанализируем несколько других концепций, в основном связанных с синхронизацией конкурентных задач, далее в этой главе. А сейчас мы начнем знакомство с наиболее важными функци-
ями FreeRTOS.
23.2. Введение во FreeRTOS и в оболочку
CMSIS-RTOS
Как говорилось в начале данной главы, FreeRTOS – это ОС, выбранная ST в качестве официальной ОСРВ для распространяемого ей Cube. Новейшие выпуски CubeMX предлагают хорошую поддержку этой ОС, и очень просто включить ее в качестве компонента
промежуточного программного обеспечения (middleware) в проект. Многие дополнитель-
ные модули CubeHAL (например, стек LwIP) полагаются на предоставляемые им сервисы.
Тем не менее, ST не ограничилась интеграцией поставляемой FreeRTOS в своем дистрибутиве CubeHAL. Над ней встроена полноценная оболочка (или, как говорят, «обертка», англ. wrapper) CMSIS-RTOS, позволяющая разрабатывать приложения, совместимые с CMSIS-RTOS. Мы говорили о CMSIS-RTOS в Главе 1, когда рассматривали весь стек CMSIS. Идея, лежащая в основе «инициативы CMSIS», заключается в том, чтобы, используя общий стандартизированный набор API-интерфейсов между несколькими производителями интегральных схем и поставщиками программного обеспечения, можно было бы «легко» перенести наше приложение на разные микроконтроллеры других производителей. По этой причине мы рассмотрим функциональные возможности FreeRTOS, используя как можно больше API-интерфейсов CMSIS-RTOS.
Исходный код FreeRTOS организован в виде компактной структуры исходных файлов, которая разворачивается более чем на дюжину файлов. На рисунке 4 показано, как FreeRTOS организована внутри CubeHAL14. Файлы .c, находящиеся в корневой папке, содержат основные функции ОС (например, файл tasks.c содержит все процедуры, связанные с управлением потоками). Вложенная папка include содержит несколько включаемых файлов, используемых для определения большей части структур Си и макросов, используемых ОС. Наиболее важным из этих файлов является файл FreeRTOSConfig.h, который включает в себя все пользовательские макросы, используемые для конфигурации ОСРВ в соответствии с потребностями пользователя. Другой важной вложенной папкой, содержащейся в корневой папке, является portable. FreeRTOS предназначена для работы примерно с 30 различными аппаратными архитектурами и компиляторами, обеспечивая при этом один и тот же согласованный API-интерфейс. Все специфичные для платформы функции организованы в два файла15: port.c и portmarco.h, которые, в свою очередь, собраны во вложенной папке, специфичной для используемой архитек-
туры. Например, папка portable/GCC/ARM_CMO содержит файлы port.c и portmarco.h,
предоставляющие код, специфичный для архитектуры Cortex-M0/0+ и компилятора
GCC.
14FreeRTOS доступна во всех CubeHAL, в папке Middleware/Third_Party/Source.
15Эта часть FreeRTOS считается отделенной от структуры исходных файлов ядра FreeRTOS, и, как говорят,
она реализует уровень платформозависимого кода (port layer) FreeRTOS.
Запуск FreeRTOS | 610 |
Наконец, папка CMSIS-RTOS содержит уровень, совместимый с CMSIS-RTOS, разработан-
ный ST поверх FreeRTOS.
Рисунок 4: Организация структуры файлов с исходным кодом FreeRTOS в CubeHAL
В следующих двух параграфах показано, как импортировать дистрибутив FreeRTOS в проект Eclipse: вручную или с помощью инструмента CubeMXImporter.
23.2.1.1.Как импортировать FreeRTOS вручную
Если вы хотите импортировать структуру файлов с исходным кодом FreeRTOS в существующий проект, вы можете действовать следующим образом.
1.Создайте папку Eclipse с именем Middleware/FreeRTOS в корне проекта.
2.Перетащите в эту папку содержимое STM32Cube_FW/Middlewares/Third_Party/FreeRTOS/Source, за исключением вложенного каталога Portable.
3.Теперь создайте вложенную папку с именем portable/GCC16 в папке Eclipse
Middleware/FreeRTOS и папку с именем portable/MemMang.
4.Перетащите папку STM32Cube_FW/Middlewares/Third_Party/FreeRTOS/Source/porta-
ble/GCC/ARM_CMx, соответствующую архитектуре вашего микроконтроллера STM32 (например, если у вас STM32F4, основанный на ядре Cortex-M4, выберите папку
ARM_CM4F) в папку Eclipse portable/GCC.
5.Перетащите только один17 из файлов, содержащихся в папке STM32Cube_FW/Mid-
dlewares/Third_Party/FreeRTOS/Source/portable/MemMang, в папку Eclipse porta-
ble/MemMang. Эта папка содержит 5 различных схем выделения памяти
(memory allocation schemes), используемых FreeRTOS. Мы рассмотрим их более подробно позже. На данный момент можно использовать heap_4.c.
В конце процесса импорта у вас должна быть структура проекта, подобная той, что показана на рисунке 5.
16Если вы используете другой инструментарий, то вы должны соответствующим образом переорганизовать инструкции.
17Можно импортировать все схемы управления памятью (memory management schemes) и исключить из компиляции ненужные. Как наилучшим образом организовать проект зависит от вас.
Запуск FreeRTOS | 611 |
Рисунок 5: Структура проекта Eclipse после импорта FreeRTOS
Прочитайте внимательно
Когда мы создаем новые папки в проекте Eclipse, по умолчанию Eclipse автоматически исключает их из процесса сборки. Таким образом, нам нужно разрешить компиляцию папки Middlewares, щелкнув правой кнопкой мыши в панели с деревом проекта Project Explorer, затем выбрав Resource configuration → Exclude from build и сняв флажки со всех определенных конфигураций проекта.
Теперь нам нужно определить конфигурационный файл FreeRTOS и включить заголовочные файлы FreeRTOS в настройки проекта. Итак, переименуйте файл Middlewares/FreeRTOS/include/FreeRTOSConfig_template.h в Middlewares/FreeRTOS/include/FreeRTOSConfig.
h. Далее перейдите в раздел Project Settings → C/C++ Build → Settings → Cross ARM C Compiler → Include и добавьте записи:•»../Middlewares/FreeRTOS/include»
•»../Middlewares/FreeRTOS/CMSIS_RTOS»
•»../Middlewares/FreeRTOS/portable/GCC/ARM_CMx»18
как показано на рисунке 6.
Рисунок 6: Пути включаемых файлов для их добавления в настройки проекта
18 Переорганизуйте этот каталог в соответствии с вашим конкретным уровнем платформозависимого кода.
Запуск FreeRTOS | 612 |
Инструмент CubeMXImporter позволяет автоматически импортировать проект, созданный с помощью CubeMX с промежуточным программным обеспечением FreeRTOS. После того, как вы сконфигурировали периферийные устройства микроконтроллера в CubeMX, вы можете легко включить промежуточное ПО FreeRTOS, установив флажок Enabled в соответствующем пункте в представлении IP Tree, как показано на рисунке 7.
Рисунок 7: Как включить промежуточное ПО FreeRTOS в CubeMX
После генерации проекта CubeMX вы можете следовать тем же инструкциям, что были в Главе 4.
В представлении Configuration можно установить параметры конфигурации FreeRTOS. Мы проанализируем наиболее важные из них в этой главе. Когда вы генерируете проект CubeMX, CubeMX спросит вас, хотите ли вы выбрать отдельный генератор временного отсчета для HAL, оставив SysTick только в качестве генератора временного отсчета для ОСРВ (см. рисунок 8). CubeMX спрашивает об этом, потому что FreeRTOS спроектирован так, что он автоматически устанавливает приоритет IRQ таймера SysTick на самый низкий (самый высокий номер приоритета). Это архитектурное требование FreeRTOS, которое, к несчастью, противоречит тому, как спроектирован HAL.
Рисунок 8: Сообщение предлагает выбрать другой генератор временного отсчета для HAL
Как уже было несколько раз сказано ранее, HAL STM32Cube построен на основе уникального источника временного отсчета, которым обычно является таймер SysTick. ISR SysTick_Handler() автоматически инкрементирует глобальный счетчик тиков каждые 1 мс. HAL пользуется этим свойством, очень часто используя функцию HAL_Delay() в нескольких процедурах HAL. Они, в свою очередь, вызываются функциями HAL_<PPP>_IRQHandler(), которые выполняются в контексте ISR (например, HAL_TIM_IRQHandler() вызывается из ISR таймера). Если IRQ таймера SysTick не сконфигурирован на выполнение с самым высоким приоритетом прерывания (который равен 0 в процессорах на базе Cortex-M), то вызов HAL_Delay() из контекста ISR может привести
Программное обеспечение встроенной системы STM32Code
Чтение через 6 мин. Chintan Gala
STM32CubeIDE — это передовая платформа разработки C/C++ с функциями настройки периферийных устройств, генерации кода, компиляции кода, компоновки и отладки. Он основан на среде Eclipse®/CDT и наборе инструментов GCC для
разработки и GDB для отладки. Он позволяет интегрировать сотни существующих подключаемых модулей, дополняющих возможности Eclipse® IDE.
STM32CubeIDE объединяет функции ST MCUFinder (ST-MCU-FINDER-PC) и STM32CubeMX, предлагая универсальный инструмент. Это позволяет легко создавать новые проекты микроконтроллеров или плат STM32 и создавать их с помощью прилагаемой цепочки инструментов GCC.
STM32CubeIDE включает анализатор сборки и анализатор статического стека, которые предоставляют пользователю полезную информацию о состоянии проекта и требованиях к памяти.
STM32CubeIDE также включает в себя стандартные и расширенные функции отладки, включая просмотр регистров ядра ЦП, памяти и периферийных регистров, а также отслеживание переменных в реальном времени и интерфейс просмотра последовательных проводов. Анализатор ошибок отображает информацию об ошибке, если ошибка инициируется процессором STM32 во время сеанса отладки.
Сегодня мы собираемся обсудить, как создать проект на основе freeRTOS с помощью Cube IDE, для этой демонстрации мы будем использовать STM32F429IDISCOVERY BAORD.
Создание нового исполняемого проекта STM32
3. Выберите SMT32F429 на вкладке выбора платы. проект
• Тип исполняемого двоичного файла
• Тип целевого проекта STM32CubeIDE
Нажмите [Далее], чтобы открыть страницу настройки пакета библиотеки встроенного ПО.
Рисунок 35. На этой странице можно выбрать пакет прошивки STM32Cube для использования при создании проекта. В этом случае используются настройки по умолчанию. Нажмите [Готово], чтобы создать проект. (Рис. 4)
Рисунок 46. В результате появится следующее диалоговое окно.
Рисунок 57. Ожидание процесса создания проекта
Рисунок 68. Начальный вид STM32CUBE ide после создания проекта
Рисунок 79. Установка системных часов на 180 МГц
Рисунок 810. Перейдите в раздел System Core -> SYS и измените источник временной базы (для HAL) с SysTick на другой таймер, например, TIM6
. Рис. 9. Настройка временной базы с помощью CubeIDE0003 Рисунок 10
12. Перейдите в Конфигурация FREERTOS > Настройка параметров конфигурации
• Настройки ядра
• Настройки компонентов RTOS
• Настройка памяти
h, Важные параметры конфигурации ,Старший № | Опции конфигурации | Описание |
1 | configUSE_PREEMPTION | Установите значение 1, чтобы использовать вытесняющий планировщик RTOS, или 0, чтобы использовать совместный планировщик RTOS. |
2 | configUSE_TICKLESS_IDLE | Установите для configUSE_TICKLESS_IDLE значение 1, чтобы использовать бестактовый режим с низким энергопотреблением, или 0, чтобы прерывание по тикам всегда выполнялось. |
3 | configUSE_IDLE_HOOK | Установите 1, если вы хотите использовать хук ожидания, или 0, чтобы пропустить хук ожидания |
4 | configUSE_TICK_HOOK | Установите 1, если вы хотите использовать тиковый хук, или 0, чтобы пропустить тиковый хук. |
5 | configCPU_CLOCK_HZ | Введите частоту в Гц, с которой будут работать внутренние часы, управляющие периферийным устройством, используемым для генерации тикового прерывания. Обычно это те же часы, которые управляют внутренними часами ЦП. |
6 | configTICK_RATE_HZ | Частота тактового прерывания RTOS. |
7 | configMAX_PRIORITIES | Количество приоритетов, доступных задачам приложения. |
8 | configMINIMAL_STACK_SIZE | Размер стека, используемого бездействующей задачей. |
configIdle_should_yield | Этот параметр контролирует поведение задач при приоритете IDLE | |
10 | Configuse_task_Notiquiations | Настройка. |
11 | configUSE_MUTEXES | Установите значение 1, чтобы включить в сборку функциональность мьютекса, или 0, чтобы исключить функциональность мьютекса из сборки. |
12 | configUSE_RECURSIVE_MUTEXES | Установите значение 1, чтобы включить в сборку функциональность рекурсивного мьютекса, или 0, чтобы исключить из сборки функциональность рекурсивного мьютекса. |
13 | configUSE_COUNTING_SEMAPHORES | Установите значение 1, чтобы включить «альтернативные» функции очереди в сборку, или 0, чтобы исключить «альтернативные» функции очереди из сборки. |
configUSE_PREEMPTION : Установите 1, чтобы использовать вытесняющий планировщик RTOS, или 0, чтобы использовать совместный планировщик RTOS.
Алгоритмы упреждающего планирования немедленно «упреждают» задачу в состоянии «Выполняется», если задача с более высоким приоритетом, чем задача в состоянии «Выполняется», переходит в состояние «Готово». Упреждение означает непреднамеренный (без явной уступки или блокировки) переход из состояния «Выполняется» в состояние «Готово», чтобы позволить другой задаче перейти в состояние «Выполняется» 9
Рис. 12 Рисунок 13.14) Генерация кода хука бездействия и Tick Hook: если пользователь включил параметры USE_IDEL_HOOK , USE_TICK_HOOK , как показано на рисунке ниже, соответствующий код для обоих будет сгенерирован CubeIDE
Рисунок 14: Настройка параметров FREERTOS для хука ожидания и галочкиКод хука ожидания:
void vApplicationIdleHook(void) {/* vApplicationIdleHook() будет вызываться только в том случае, если для configUSE_IDLE_HOOK установлено
значение 1 в файле FreeRTOSConfig. h. Он будет вызываться при каждой итерации простой
задачи. Крайне важно, чтобы код, добавляемый к этой функции ловушки, никогда не пытался
блокировать каким-либо образом (например, вызывать xQueueReceive() с указанным временем блокировки
или вызывать vTaskDelay()). Если приложение использует API-функцию
vTaskDelete() (как это делает это демонстрационное приложение), то также
важно, чтобы vApplicationIdleHook() разрешалось возвращаться к своей вызывающей
функции, поскольку это ответственность бездействующей задачи за очистку
памяти, выделенной ядром любой задаче, которая с тех пор была удалена. */ }
Tick Hook Code:
void vApplicationTickHook(void) {/* Эта функция будет вызываться каждым тиковым прерыванием, если
configUSE_TICK_HOOK имеет значение 1 в файле FreeRTOSConfig. h. Здесь можно
добавлять пользовательский код, но перехватчик тиков вызывается из контекста прерывания, поэтому
код не должен пытаться блокировать, и можно использовать только безопасные для прерываний функции FreeRTOS API
(те, которые завершают в FromISR()). */ }
https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-moocs/FreeRTOS_on_STM32_MOOC.html
https://www.freertos.org/fr-content-src/uploads/2018/07/161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf
Software Tools:Если вам понравилась эта статья, поделитесь своим мнением.
Нравится Загрузка…
Кодирование, RTOS, STM32egoncalves
#1
Здравствуйте,
Я использую плату Nucleo-H723ZG и хотел бы знать, как включить FreeRTOS в проект PlatformIO.
спасибо
Максгерхардт
#2
То, что или зависит от фреймворка, с которым вы работаете.
эгонтелят
#3
Мы используем stm32cube.
Мы пытаемся использовать STM32 Cube MX для создания проекта HAL без включения ST-версии FREERTOS, а затем использовать пакет PlatformIO framework-stm32cubeh7 для предоставления FreeRTOS.
В:
~/.platformio/packages/framework-stm32cubeh7/Middlewares/Third_Party/FreeRTOS/Source
Похоже, что FreeRTOS связана с платформой ststm32.
спасибо
Максгерхардт
#4
эгонтелят:
~/.platformio/packages/framework-stm32cubeh7/Middlewares/Third_Party/FreeRTOS/Source
Действительно, но PlatformIO еще не предоставляет возможности простого использования этого источника. Но можно создать проект, используя эти файлы (удалив при этом несоответствующие файлы).
Процесс добавления FreeRTOS всегда один и тот же: добавьте исходные файлы FreeRTOS, добавьте файлы для порта (здесь: ARM_CM7), выберите реализацию кучи, добавьте конфигурацию. См., например. gd32-pio-projects/gd32-spl-freertos на главной · СообществоGD32Cores/gd32-pio-projects · GitHub.
Позвольте мне запустить пример проекта.
эгонтелят
#5
HI
Platformio, похоже, очень заинтересована в использовании своих собственных драйверов STM32:
.pio/build/env_nucleo_h723zg/frameworkhaldriver/src/inv_nucle_hal_spi_ex.o
.pio/build/inv_nucle_hal_spi_xex. .pio/build/env_nucleo_h723zg/FrameworkHALDriver/Src/stm32h7xx_hal_wwdg.o
.pio/build/env_nucleo_h723zg/FrameworkHALDriver/Src/stm32h7xx_hal_rtc_ex.o
…
Можно ли этого не делать? Чтобы мы могли импортировать все, что нам нужно, из STM32CubeIDE?
спасибо
Максгерхардт
#6
эгонтелят:
PlatformIO, кажется, очень хочет использовать свои собственные драйверы STM32:
В этом вся суть PlatformIO. При использовании framework = stm32cube
в platformio.ini
, PlatformIO предоставляет файлы фреймворка, такие как заголовки STM32HAL и CMSIS, так что они не должны быть в проекте. Ознакомьтесь с эталонными проектами, подобными этому.
В противном случае вы бы просто выполняли проект без операционной системы со всеми файлами, полученными из автоматически сгенерированного проекта, и без поддержки конкретной платформы от PlatformIO. Конечно, с помощью PlatformIO также возможны проекты без операционной системы, см., например. здесь — просто удалить framework = stm32cube
, и вы потеряете все автоматические настройки из сценариев сборки STM32Cube, а PIO будет компилировать только исходники в src/
и библиотеки, на которые ссылаются, в lib/
.
Я автоматически сгенерировал проект STM32Cube с помощью FreeRTOS и преобразовал его в PlatformIO (он же проделал потрясающую работу по копированию файлов из 3 папок автоматически сгенерированного проекта в проект PlatformIO и присвоил ему платформу . ini
): GitHub — maxgerhardt/pio-stm32h7-stm32cube-freertos
Baremetal вариант, который содержит все файлов из сгенерированного проекта STM32Cube, можно найти в ветке baremetal
: GitHub — maxgerhardt/pio-stm32h7-stm32cube-freertos at baremetal
egoncalves
#7
Когда я удаляю опцию фреймворка, я получаю сообщение об ошибке:
Компиляция .pio/build/env_nucleo_h723zg/src/Core/Startup/startup_stm32h723zgtx.o
arm-none-eabi-as: нераспознанный параметр ‘-x’ /Startup/startup_stm32h723zgtx. o] Ошибка 1
Я не могу найти в PlatformIO.ini опцию -x…
Однако, когда я строю в подробном режиме, появляется -x:
Сборка в режиме выпуска
arm-none-eabi- as -x ассемблер-с-cpp -Os -ffunction-sections -fdata-sections -Wall -mthumb -mcpu=cortex-m7 -o .pio/build/env_nucleo_h723zg/src/Core/Startup/startup_stm32h723zgtx.o src/ Ядро/Автозагрузка/startup_stm32h723zgtx.s
arm-none-eabi-as: нераспознанный параметр ‘-x’ разделы -fdata-sections -Wall -mthumb -mcpu=cortex-m7 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -DF_CPU=550000000L -DPLATFORMIO=50200 -DSTM32H7xx -DSTM32H723xx -DEVAL -DSTM32H723xx -I/ home/wsone/.platformio/platforms/ststm32/builder/include -Isrc -Isrc/Core/Inc -Isrc/Drivers/CMSIS/Include -Isrc/Drivers/CMSIS/Device/ST/STM32H7xx/Include -Isrc/Drivers/STM32H7xx_HAL_Driver /Inc -Isrc/Middlewares/Third_Party/FreeRTOS/Source/include -Isrc/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -Isrc/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 src/Drivers/STM32H7xx_HAL_Driver/Src stm32h7xx_hal_cortex. c
*** [.pio/build/env_nucleo_h723zg/src/Core/Startup/startup_stm32h723zgtx.o] Ошибка 1
Странно здесь:
https://manpages.debian.org/unstable/binutils-arm-none-eabi/ arm-none-eabi-as.1.en.html
параметр -x поддерживается, но игнорируется:
→ -x Игнорируется.
У меня есть эта версия ассемблера:
wsone@wsone-VirtualBox:~/.platformio/packages/toolchain-gccarmnoneeabi/bin$ ./arm-none-eabi-as —version
Ассемблер GNU (GNU Tools for Arm Встроенные процессоры 7-2017-q4-major) 2.29.51.20171128
Максгерхардт
#8
эгонтелят:
Компиляция .pio/build/env_nucleo_h723zg/src/Core/Startup/startup_stm32h723zgtx.o
arm-none-eabi-as: нераспознанный параметр ‘-x’
Файлы запуска должны иметь расширение . S
, чтобы они распознавались как «Assembly with C++». Параметр -x
предназначен для gcc как -x ассемблер-с-cpp
. Я исправил это в pio-stm32h7-stm32cube-freertos/startup_stm32h723zgtx.S на baremetal · maxgerhardt/pio-stm32h7-stm32cube-freertos · GitHub, теперь вам нужно удалить папку и загрузить ее снова.
эгонтелят
#9
Еще одна ошибка кусает пыль…
Но все же…
Я хотел бы использовать файл .ld, предоставленный STM32CubeIDE.
Какой-нибудь волшебный способ сделать это?
спасибо
Максгерхардт
#10
Проект уже делает это
github.