Stm32cubeide

1 Design of a STM32Cube Expansion enhanced for STM32 Toolset

A STM32Cube Expansion enhanced for STM32 Toolset is an evolution of the initial concept of STM32Cube Expansion. The new packages contain now a part readable and configurable into STM32CubeMX (or STM32CubeIDE) on top of Ready-To-Use Project Samples.

It helps the integration of software components into STM32Cube ecosystem. The role is to limit the manual work to integrate a SW component (it limits but it remains some manual operations to be executed by the end user).
The major advantage of integrating your software in STM32CubeMX is that you can allow the STM32CubeMX users to integrate your SW component on any board or MCU from the STM32 Galaxy.

1 Introduction to STM32Cube[edit]

STM32Cube provides comprehensive embedded software libraries and tools, significantly reducing development effort, time and cost.

STM32Cube is fully integrated in STM32MPU_Embedded_Software_distribution and consists of (usable together or independently):

STM32CubeMP1 Firmware Package embedded software libraries, including:

  • The Hardware Abstraction Layer (HAL), enabling portability between different STM32 devices via standardized API calls
  • The Low-Layer API (LL), a light-weight, optimized, expert oriented set of APIs designed for runtime efficiency and so enhanced performance
  • A collection of Middleware components, like FreeRTOS, OpenAMP (depending on the MPU series)
  • A collection of Examples, running on an MPU board and allowing demonstration of a basic implementation of features from a set of IPs

STM32CubeMX tool, including :

  • Configuration and C code generation for pin multiplexing, clock tree, peripherals and middleware setup with graphical wizards
  • Generation of IDE-ready projects for an integrated development environment tool chain
  • Direct import of STM32 Cube embedded software libraries from st.com
  • Integrated updater to keep STM32CubeMX up-to-date

Requirements:

OS: macOS, Linux, Windows 7-10

Python: 3.6+

The app introduces zero dependencies by itself. Of course, you need to have all the necessary tools installed in order to perform the operations:

  • STM32CubeMX with the desired downloaded frameworks (F0, F1, etc.). All recent versions are fine (5.x, 6.x)
  • Java (JRE, Java runtime environment) for the CubeMX. Starting from CubeMX v6.3.0 Java is included in the bundle (in form of a folder sitting alongside the executable) so you don’t need to install it by yourself from now on. Hence, it can be omitted in the config file except Windows where it is still highly recommended to run CubeMX via . As mentioned, Java exists already, the only difference is that it is still will be listed in the default config. You can refer to STM32CubeMX own documentation to obtain more information on current situation if, suddenly, something will change in this regard

If you, for some reasons, don’t want to (or cannot) install (i.e. register in PATH) command line versions of these applications in your system, you can always specify the direct paths to them overriding the default values in the project configuration file . Check the config reference to see all possible ways of telling stm32pio where the tools are residing on your machine.

Первый проект в Keil 5 + STM32 CubeMX

Details
Автор Super User

В статье описано, каким образом можно создать проект с помощью программы STM32CubeMX (да, именно так она теперь называется) и библиотеки HAL. В проекте используется микроконтроллер STM32F407VGT6, но для других моделей действия будут аналогичны.

Для работы нам понадобятся:

  • Keil uVision 5;
  • STM32CubeMX;
  • микроконтроллер;
  • программатор.

Шаг 0. Если на вашем компьютере не установлен STM32CubeMX или Keil uVision 5, скачайте и установите их. При установке STM32CubeMX может потребоваться установка Java-платформы.

Шаг 1. Запускаем STM32CubeMX, выбираем «New project». В появившемся окне выставляем фильтр на требуемый микроконтроллер, выбираем его и жмем «ОК».

Шаг 2. Попробуем создать проект, в котором контроллер будет управлять работой светодиода. На моей отладочной плате светодиод подключен к выводу «PORTD.12» (узнать это можно из документации к плате). Выбираем нужный вывод микроконтроллера на схеме и кликаем по нему левой кнопкой мыши и из предложенных настроек вывода выбираем «GPIO_Output», т.е. назначаем его на вывод. Контроллер настроен!

Шаг 3. Настройка генерации проекта. Нажимаем «Project»  -> «Settings».

В открывшемся окне на вкладке «Project» в первое поле вводим название проекта, в следующее поле — путь к папке, где будет храниться проект, ниже в выпадающем списке выбираем IDE, для которой создается проект, и нажимаем кнопку «ОК». Про оставшиеся настройки расскажу в следующих статьях.

Шаг 4. Генерация проекта. Для того, чтобы запустилась генерация проекта, необходимо нажать на кнопку с шестеренкой и в открывшемся окне нажать кнопку «Open project».

Шаг 5. Проверка созданного проекта. После нажатия на кнопку начнет запускаться Keil.

Переходим в Keil, в обозревателе проекта раскрываем группу «Application/User», открываем файл «Main.c», ищем в нем цикл «while(1)» и вписываем пару строк кода.

В первой строке кода вызывается процедура, которая меняет состояние вывода на противоположное (т.е. если светодиод светился, то должен погаснуть и наоборот). Вторая строка кода — это пауза.

Далее нажимаем на кнопку постройки проекта.

Пока проект собирается, подключаем отладочную плату к компьютеру. Как только проект будет скомпилирован, нажимаем на кнопку загрузки кода в микроконтроллер. После загрузки необходимо перезагрузить микроконтроллер. По умолчанию STM32CubeMX в настройках проекта устанавливает программатор «St-Link», если используется другой программатор, необходимо зайти в настройки проекта и установить нужный программатор.

Если все сделано правильно, светодиод на плате вам поморгает 😉

2 How to install STM32CubeIDE[edit]

STM32 MPU support inside STM32CubeIDE is available on Linux and Windows host PCs, but
it is NOT on macOS.

STM32CubeIDE for Linux host PC STM32CubeIDE for Windows host PC
Download

Version 1.6.1

  • Download the preferred all-in-one Linux installer from my.st.com
    • Generic Linux Installer — STM32CubeIDE-Lnx
    • RPM Linux Installer — STM32CubeIDE-RPM
    • Debian Linux Installer — STM32CubeIDE-DEB

Version 1.6.1

  • Download the all-in-one Windows installer from my.st.com

    Windows Installer — STM32CubeIDE-Win

Installation guide
User manual
  • When the installation is completed, see additional information about STM32CubeIDE in :
    • STM32CubeIDE quick start guide ()
    • Getting started with projects based on the STM32MP1 Series in STM32CubeIDE ()
Detailed release note

Minor releases may be available from the update site. Check chapter 10 in () for more information on how to update STM32CubeIDE.

Чем уникальна Azure RTOS

Исследование показывает, что данная ОС является одной из наиболее часто применяемых (более 6 миллионов инсталляций). В основном она используется в специализированном оборудовании, таком, как устройства беспроводной связи, принтеры, модемы, устройства хранения данных, медицинские устройства, интеллектуальные датчики.

Но помимо Azure RTOS, существует большое количество других ОС, выполняющих те же типовые функции. Естественно, возникает вопрос о том, какие уникальные возможности есть именно в этой ОС?

  • Малый размер. Минимальная система занимает 2 КБ ROM. Размер увеличивается автоматически по мере использования возможностей ОС.
  • Поддерживаются различные методы реализации многопоточности, как вытесняющая, так и кооперативная многопоточность.
  • Детерминированное время переключения контекста (меньше 100 циклов), быстрая загрузка (меньше 120 циклов), опциональная проверка ошибок, пикоядро без «слоев».
  • Поддержка большого количества микроконтоллеров и IDE для разработки.
  • Порог вытеснения (Preemption threshold) — порог вытеснения N означает, что данный поток может быть вытеснен только потоками с приоритетом выше N, т.е. от 0 до (N — 1) включительно, а потоки с приоритетом ниже N (т.е. больше N включительно) не могут вытеснять данный поток. Правильное использование данной возможности уменьшает количество переключений контекста, а также уменьшает время реакции на внешние события. Подробную информацию можно найти в статье.
  • Сцепление событий (Event chaining) — позволяет объединить несколько событий в единый сигнал синхронизации для потока, что позволяет синхронизироваться сразу по нескольким событиям, причем в разных комбинациях (И, ИЛИ).
  • Наследование приоритета (Priority inheritance) — позволяет избежать негативных последствий ситуации инверсии приоритетов. Описание ситуации инверсии приоритетов — тема для целой статьи, отдельно с данной проблемой многозадачных систем можно ознакомиться здесь.
  • Оптимизированная обработка прерываний от аппаратных таймеров;
  • Модули (Modules). ThreadX позволяет «обернуть» один или несколько потоков приложения в «модуль», который может быть динамически загружен и запущен на целевом устройстве. Модули позволяют производить обновление «в полях» с целью исправления ошибок. Также при помощи модулей можно разбить микропрограмму на сегменты и динамически определять набор выполняемых потоков, чтобы сэкономить память.
  • Встроенная трассировка событий и аналитика стека. Подбор размера стека потока является одной из самых важных задач при разработке с использованием ОС для микроконтроллера. Нельзя сделать слишком маленький стек, т.к. в отсутствие защиты памяти при переполнении стека — произойдет порча областей памяти других задач. Слишком большой стек также недопустим, т.к. приведет к излишнему расходованию памяти, а она ограничена.

Также рекомендуем интересное сравнение ThreadX с FreeRTOS от инженера, работающего с обеими ОС, а также .

Package Details: stm32cubemx 6.3.0-23

Package Actions

  • View PKGBUILD /
    View Changes
  • Download snapshot
  • Search wiki
  • Flag package out-of-date
  • Vote for this package
  • Enable notifications
  • Submit Request
Git Clone URL: https://aur.archlinux.org/stm32cubemx.git (read-only, click to copy)
Package Base: stm32cubemx
Description: graphical software configuration tool for STM32 microcontrollers that allows generating C initialization code
Upstream URL: https://www.st.com/en/development-tools/stm32cubemx.html
Keywords: arm
cortex
cortex-m
stm32
Licenses:
Submitter: laserk3000
Maintainer: laserk3000
Last Packager: laserk3000
Votes: 39
Popularity: 0.75
First Submitted: 2016-06-04 10:14
Last Updated: 2021-08-05 21:15

Dependencies (3)

  • bash (bash-devel-git, bash-devel-static-git, bash-xdg-dirs-git, bash-git)
  • java-runtime=11 (jdk5, jre7-openjdk-infinality, java-8-openjdk-shenandoah, jre8-openjdk-infinality, java-gcj-compat, jdk9, jre9, jdk-devel, jre10, jdk6, jdk12-openj9-bin, zulu-12-bin, jre6, jre12, jdk8-openjdk-dcevm, server-jre, jdk13-openj9-bin, jdk9-openj9-bin, jdk10, jdk11-openjdk-dcevm, jre8-openjdk-jetbrains, jdk10-openj9-bin, jdk14-openj9-bin, jdk7, jre7, jre14, jdk8-jetbrains, zulu-14-bin, zulu-13-bin, jdk-bcl, jre-bcl, amazon-corretto-15, jdk11-openjdk-dcevm-conflicts-fixed, zulu-embedded-jdk8, sapmachine-jdk-bin, jdk15-adoptopenjdk, amazon-corretto-8, amazon-corretto-11, jdk11-msopenjdk-bin, liberica-jre-8-full-bin, jdk8-arm, zulu-embedded-jdk, jre11-jetbrains-imfix, zulu-11-bin, zulu-8-bin, zulu-15-bin, amazon-corretto-16, jdk11-graalvm-bin, jdk8-graalvm-bin, jdk16-graalvm-bin, jdk-openj9-bin, jdk-adoptopenjdk, jdk11-adoptopenjdk, liberica-jdk-8-full-bin, liberica-jdk-11-bin, liberica-jdk-11-full-bin, liberica-jdk-11-lite-bin, liberica-jdk-full-bin, liberica-jre-11-bin, liberica-jre-11-full-bin, zulu-embedded-jdk11, jre8-adoptopenjdk, jre-openj9, jre8, jdk8, jre11, jre, jre8-openjdk-shenandoah, zulu-16-bin, jdk-arm, jdk7-j9-bin, jdk7r1-j9-bin, jdk11-openj9-bin, jdk11-graalvm-ee-bin, jdk17-graalvm-bin, jdk-jetbrains, jdk8-openj9-bin, java-openjdk-ea-bin, java-openjdk-loom-ea-bin, jdk8-j9-bin, jdk11-j9-bin, jre-jetbrains, java-openjdk-bin, jre-openjdk, jre11-openjdk, jre7-openjdk, jre8-openjdk)
  • imagemagick (graphicsmagick-imagemagick-compat, imagemagick-no-hdri, imagemagick-git, imagemagick-fftw, imagemagick-full-git, imagemagick-full) (make)
  • https://sw-center.st.com/packs/resource/library/stm32cube_mx_v630-lin.zip
  • LICENSE
  • stm32cubemx.desktop
  • stm32cubemx.sh

3 Auto-assessment

Any SW component is not adapted to the development of a STM32Cube Expansion enhanced for STM32 Toolset. Indeed, the possibility of configurations is huge and not covered completely by the tools. Some other methods may be feasible but are not considered in the normal flow.

We refer to this list of questions to identify the right candidates. The questions should be taken in the generic understanding of the Industry.

Did I already use STM32CubeMX or STM32CubeIDE to generate a project?

If yes, move to the next question
The concept is based on the usage of STM32CubeMX. We recommend starting only when you have already acted as a standard user of STM32CubeMX. If not, start downloading and opening STM32CubeMX, pick up a STM32 MCU, configure peripherals, generate the project for your preferred IDE and look at the result.

Is well structured?

If yes, move to the next question
My software is structured in functional units/components self-content from an architecture point of view.

Does have a standard build system?

If yes, move to the next question
We exclude cases such as complex cases with different linker scripts, generating more than one binary file, if your software needs to dynamically adapt the run-time configuration. STM32CubeMX generates simple project structure (cf basic or advanced structure).

Am I ready to adapt my architecture to STM32Cube rules when interacting STM32Cube components?

If yes, move to the next question
STMicroelectronics has defined some rules to interact between STM32Cube components to guarantee coherency between SW components. There is no impact on your own SW component architecture but on the structure of the project (location of your SW component into the project itself, location of the HAL drivers, usage of STM32Cube API…). Indeed, the project structure must be as expected by STM32CubeMX. Using STM32PackCreator and STM32CubeMX prevents most of the problems (link to STM32PackCreator Getting Started).

Am I ready to add this delivery method on a long run?

If yes, move to the next question
We value working with partners and customers on the long run. The work related to the STM32CubeExpansion package is valuable if you intend to upgrade it regularly with new versions of your SW component. Therefore, the method could be done one time but needs to be thought on the long run.

is HW agnostic

— Check the training
Your software component has no relation with any HW components (no peripherals of STM32Cube Ecosystem offer). This video training and the associated I-Cube describe the creation of STM32CubeExpansion in a simple SW component.

has some HW relation with UART, I2C, SPI, GPIO

— Check the training
This video training and the associated I-Cube describe the creation of STM32CubeExpansion in a simple SW component with the usage of GPIO.

has some HW relation with Timers

— Take care: refer to STM32PackCreator limitation
Basic usage of timers is supported. Complex and advanced features are too complex to be implemented in our tools.

has some HW relation with other peripherals than the ones mentioned above

— Be cautious — check the training

5 STM32Cube Expansion Structure

The STM32Cube Expansion Structure top level is the following:

Top level structure

STM32CubeMX: generated by STM32PackCreator (available in STM32CubeMX panel Tools). It contains the files required by STM32CubeMX in order to configure the SW Component.

Middlewares: contains your SW component itself. Under ST subdirectories when coming from ST, under “Third_Party” when coming from your side or from a community.

Example of X-Cube-NFC4 package — Middleware Structure

Projects (examples): contains the examples of projects (2 or 3). They have been generated by STM32CubeMX for several IDEs and for several boards. Here is an example of advanced structure.

Example of X-Cube-NFC4 package — Advanced Project Structure

starting from STM32CubeMX-6.0.0, code generation is in «advanced mode» by default — you can change it on the project generator panel

Here is an example of basic structure.

Example of X-Cube-BLE1 package — Basic Project Structure

Drivers: contains the drivers which are required for the projects (examples). Copy paste them from the CubeFW Package of the series that you have taken as examples.

Example of NFC STM32CubeExpansion Package — Drivers Structure

Utilities: contains any PC software which could be useful for your pack.

Documentation: contains the getting started and or any other documentation related to the package except the release note.

Other documents at the root of the package:

  • License.pdf: contains the license. It will be displayed during the installation process
  • Release_Notes.html: contains information on the release such as goals, modified files, corrected bugs and limitation if any.
  • VendorName.CubeExpansionName.pdsc: the file pdsc contains the description of the file included into the packages.

The STM32CubeExpansion structure follows the standard STM32CubePackage structure. This structure is fully described into the document UM2285 Development guidelines for STM32Cube Expansion Packages.

In conclusion, if you want to map the «step1», «step2» and «step3», it will be like that

Step1: package useable in STM32CubeMX

Step2: stand alone project examples

Step3: packaging

Лицензирование

Azure RTOS — коммерческая ОС с соответствующими требованиями к применению в производстве. Однако в ряде случаев платить за ее использование не понадобится.

  • Вам не требуется лицензия, если вы используете код не для производства, а для изучения, разработки, тестирования, портирования, адаптации системы для вашего решения;
  • Лицензия на использование в производстве включена автоматически при развертывании ОС на любой из микроконтроллеров из данного списка. На август 2020 года список еще не заполнен в связи с тем, что процедуры лицензирования еще не завершены, но уже есть соответствующий issue, в котором упомянуты микросхемы Microchip, NXP, Renesas, ST, и Qualcomm;
  • В ином случае вам нужно приобрести платную лицензию.

Во всех случаях ОС поставляется с исходным кодом.

6 OpenSTLinux project support — Cortex®-A[edit]

From release 1.4.0 on Linux host ONLY, STM32CubeIDE supports OpenSTLinux projects and its associated Yocto ProjectSDK.
Inside STM32CubeIDE, this support means two new Eclipse plugins (SDK & Sources) to be installed, directly from the embedded CA7 project menu context:

  • Setup OpenSTLinux
  • Import an OpenSTLinux Project…

OpenSTLinux Contextual Menu

These Eclipse plugins embed official packages from OpenSTLinux 2.0.

Note that a minimum disk space of 5 GBytes is needed under /tmp during the installation phase.

6.1 How to install Yocto ProjectSDK in STM32CubeIDEedit

We focus in the article How to install the Yocto Project SDK in STM32CubeIDE on various ways to install the Yocto ProjectSDK or point to an already existing SDK installation.

6.2 How to manage OpenSTLinux projectsedit

All projects from OpenSTLinux can be imported inside STM32CubeIDE are available for compilation with Yocto ProjectSDK.

Regarding project structure, these OpenSTLinux projects enrich the Cortex-A part as depicted hereafter. Note that this support is starting from OpenSTLinux v2.0.

Hierarchical Project Structure with OpenSTLinux projects

6.3 How to debug a user space applicationedit

Release 1.6.0 provides support for creating, building and debugging projects aiming to run into the Linux user space of STM32 MPUs. This includes executable, static and shared library.

2 Three webinars to start up

Three webinars have been prepared by our teams to show you a part of the capacity of the STM32Cube Expansion Do It Yourselves. Each video lasts approximately 1 hour and needs between half a day to one day to reproduce it.

Sequencer Sample :

An utility for multi-tasking without an Operating System, which is HW independent code.
In the example, a LED is managed through a GPIO.

Sequencer video

Sequencer video (chinese)

Download the Sequencer Sample code

DSPDemo Sample :

This SW component uses the DSP integrated in the Core to generate an internal signal. This internal signal is then captured and displayed thanks to CubeMonitor. There is no interaction with the external hardware.

DSPDemo video

DSPDemo video (chinese)

Download the DSPDemo Sample code

STDIO Sample

The application code frequently uses standard I/O library functions, such as printf(),scanf(), or fgetc() to perform input/output operations.The I/O library functions can be redirected to use different channels (peripheral) depending on the hardware and the application needs.The most common channels used for STDIN (scanf, getchar) and STDOUT (printf) are UART and USB Device Virtual Com Port class. STDIN could retrieve data from a USB keyboard using the USB Host HID class.

STDIO video

STDIO video (chinese)

Download the STDIO Sample code

3 Software architecture overview[edit]

The STM32CubeMP1 Package is based on the STM32Cube MCU package but has been adapted to a Linux Framework (OpenSTLinux).

STM32CubeMP1 Package introduces new components such as OpenAMP and RessourceManager that allow easy communication and ressource sharing between main processors running with Linux on Cortex A, and MCU coprocessors running on Cortex M.

  • OpenAMP is a library implementing the remote processor service framework (RPMsg) which is a virtio-based messaging bus that allows a local processor to communicate with remote processors available on the system.
  • ResourceManager is a utility that handles peripheral-accessibility requests and system-resource configuration.
Note:

Please refer to Coprocessor_management_overview for further information related to coprocessor management

The figure below gives an overview of the STM32CubeMP1_architecture.

Note:

Please refer to STM32CubeMP1 Package versus legacy STM32Cube MCU Package for further information on differences between STM32CubeMP1 Package and STM32Cube MCU Package

Usage

You can always run

$ stm32pio --help

to see help on available commands.

Basically, you need to follow such a workflow (refer to the example which explains the same just illustrating it with some screenshots/command snippets):

  1. Create the CubeMX project ( file) like you’re used to, set up your hardware configuration, but after all save it with the compatible parameters
  2. Run stm32pio that automatically invokes CubeMX to generate a code, creates the PlatformIO project, patches the file.
  3. Work with your project normally as you wish, build/upload/debug etc.
  4. When necessary, come back to the hardware configuration in the CubeMX, then run stm32pio again to re-generate the code

See the commands reference file listing the complete help about the available commands/options. On the first run, stm32pio will create a config file , syntax of which is similar to the . You can also create this config without any following operations by initializing the project:

$ stm32pio init -d path/to/project

It may be useful to tweak some parameters before proceeding. See the config reference showing meanings for every key.

1 STM32CubeIDE purpose[edit]

STM32CubeIDE is an advanced C/C++ development platform with peripheral configuration, code generation, code compilation, and debug features for STM32 microcontrollers and microprocessors. It is based on the Eclipse/CDT framework, GCC toolchain for the development and GDB for the debugging.

It allows the integration of the hundreds of existing plugins that complete the features of the EclipseIDE. STM32CubeIDE integrates all STM32CubeMX functionalities to offer all-in-one tool experience, and save installation and development time.

With STM32CubeIDE, you can

  • select the appropriate STM32 device corresponding to your needs
  • configure the device using STM32CubeMX
  • develop and debug applications on top of ArmCortex-M

All tools & software

  • MCU & MPU Embedded Software

    Part number

    Status

    Description

    Type

    Supplier

    X-CUBE-AZRTOS-H7

    Active

    Azure RTOS software expansion for STM32Cube for STM32H7 series

    STM32Cube Expansion Packages
    ST

    X-CUBE-AZRTOS-H7
    Description:
    Azure RTOS software expansion for STM32Cube for STM32H7 series

  • Product Evaluation Tools

    Part number

    Status

    Description

    Type

    Supplier

    B-L462E-CELL1

    Active

    Cellular IoT Discovery kit powered by STM32L4 and ST4SIM

    STM32 Discovery Kits
    ST

    B-L462E-CELL1
    Description:
    Cellular IoT Discovery kit powered by STM32L4 and ST4SIM

    NUCLEO-WB15CC

    Active

    STM32 Nucleo-64 development board with STM32WB15CC, supports Arduino, ST Morpho connectivity

    STM32 Nucleo Boards
    ST

    NUCLEO-WB15CC
    Description:
    STM32 Nucleo-64 development board with STM32WB15CC, supports Arduino, ST Morpho connectivity

  • Software Development Tools

    Part number

    Status

    Description

    Type

    Supplier

    STM32CubeMX

    Active

    STM32Cube initialization code generator

    STM32 Configurators and Code Generators
    ST

    STM32CubeMX
    Description:
    STM32Cube initialization code generator

  • Trainings

    Part number

    Status

    Description

    Type

    Supplier

    Percepio Advanced RTOS Techniques

    Active

    Percepio RTOS Training offers courses in embedded development with a real-time operating system, featuring embedded consultant Jacob Beningo.

    Trainings
    Percepio

    Percepio Advanced RTOS Techniques
    Description:
    Percepio RTOS Training offers courses in embedded development with a real-time operating system, featuring embedded consultant Jacob Beningo.

    Percepio RTOS Fundamentals

    Active

    Percepio RTOS Training offers courses in embedded development with a real-time operating system, featuring embedded consultant Jacob Beningo.

    Trainings
    Percepio

    Percepio RTOS Fundamentals
    Description:
    Percepio RTOS Training offers courses in embedded development with a real-time operating system, featuring embedded consultant Jacob Beningo.

Запуск ThreadX на STM32

Для понимания зависимостей между компонентами Azure RTOS приводим соответствующий рисунок из документации:

Как видим, ThreadX является основой для всего остального. Ядро ThreadX обеспечивает многопоточность, переключение контекста, синхронизацию потоков. Поддерживаются таймеры, очереди сообщений, семафоры, мьютексы, флаги событий, пулы байтов и блоков (в каком-то смысле аналог кучи в C++, но с потокобезопасным управлением).

В практической части данной статьи мы будем рассматривать именно ThreadX, чтобы понять, с чего начать работу с ним. И хотя разработчики предоставляют большое количество примеров для готовых средств разработки, интерес представляет именно настройка «с нуля» на каком-то микроконтроллере, для которого нет примера, ведь к этому при разработке своего устройства мы рано или поздно придем.

Будем использовать относительно недорогую и популярную плату STM32F4Discovery, но весь процесс можно с успехом повторить на любом микроконтроллере, например, на сверхдешевом и доступном STM32F103C8T6.

STM32F4Discovery удобна тем, что уже имеет встроенный отладчик ST-Link, большое количество периферии для экспериментов, а все выводы микроконтроллера (STM32F407VGT6) выведены на контакты.