Introduction to Azure RTOS® with STM32

1. Azure RTOS® scope inside STM32 middleware

STMicroelectronics offers a complete, proven, and reliable MCU software solution for developers. It covers low layers, middleware, and applicative sides, as well as configuration, programming, monitoring and debugging tools.

Core Middleware Components

The STM32 middleware solution is constructed around Microsoft® Azure® RTOS MW and other in-house (ST USB, OpenBL) and open source stacks (FreeRTOS™, FatFS, LwIP, mbedTLS, LibJPEG). All are integrated and customized for STM32 MCU devices and enriched with corresponding application examples based on STM32 evaluation boards.

THREADX overviewUSBX overviewFILEX overviewNETXDUO overviewLEVELX overviewCore middleware components
About this image

ST USB, FreeRTOS™, FatFS and LwIP are known as Classic CoreMW.

2. Azure® RTOS

Azure® RTOS is a professional grade, highly reliable and market proven middleware suite:

  • Integrated and full featured RTOS. Learn more about ThreadX[1].
  • Industrial grade networking stack: optimized for performance coming with many IoT protocols. Learn more about NetX Duo[2].
  • Advanced Flash file system (FS) / Flash translation layer (FTL): fully featured to support NAND/NOR Flash memories. Learn more about FileX[3] and LevelX[4]
  • USB Host and Device stacks coming with many classes. Learn more about USBX[5].
  • Safety pre-certifications (from MSFT): IEC 61508 SIL4, IEC 62304 Class C and ISO 26262 ASIL D
  • Security pre-certifications (from MSFT): EAL4+ for TLS/DTLS, FIPS 140-2 for software cryptographic library

With Azure® RTOS complementing the extensive STM32Cube ecosystem providing free development tools, software bricks, and software Expansion Packages, STM32 users can also leverage the rich services of Azure® RTOS, which meet the needs of tiny, smart, connected devices.

More information relative to general STM32Cube offer can be found on the STMicroelectronics website.

2.1. Azure® RTOS integration in the STM32Cube ecosystem

For currently public STM32 series (introduced up to 2020), Azure® RTOS integration is planned as a software STM32Cube Expansion Package enhanced for the STM32 Toolset (such as X-CUBE-AZRTOS-H7[6] for the STM32H7 Series[7]). The expansion is built on STM32Cube software technology to make the portability across different STM32 microcontrollers easy and to allow the user to benefit from STM32CubeMX[8] or STM32CubeIDE[9] software tools native features alongside the Azure® RTOS applications. New STM32 series introduced starting from 2021 benefit from a direct integration of Azure® RTOS embedded software components within the matching STM32Cube MCU Package. For instance, for the STM32U5 Series, the matching STM32Cube MCU Package named STM32CubeU5 features Azure® RTOS directly.

Once integrated within STM32Cube, whether in an STM32Cube Expansion or MCU Package, Azure® RTOS benefits from many additions done by STMicroelectronics:

  • Ability to use Azure® RTOS MW with some level of configurability directly within STM32CubeMX
  • Addition of many examples for standard evaluation boards from STMicroelectronics: STM32 Nucleo, Discovery kits and Eval boards, thus, reducing the learning curve and ensuring a smooth application development experience with Azure® RTOS and STM32 MCUs.
  • Addition of material helping with migration effort
  • Addition of training material

ThreadX is required to implement FileX, LevelX, NetX Duo or USBX, a “bare-metal” implementation is also planned in the future for USBX and FileX.

Azure® RTOS MW stacks are also interdependent. In fact, some USBX Host classes are using the FileX APIs, while other USBX device classes require the NetX Duo APIs. LevelX is used by FileX to support file system on NAND and NOR memories.

Azure RTOS Interdependencies

The Azure® RTOS APIs are hardware agnostic, they run seamlessly on all supported hardware and peripherals. Each middleware has its own low-level driver to support specific hardware peripherals. These drivers are implemented using the HAL and BSP drivers to ensure portability among different STM32 Series and boards.

Azure RTOS Interactions

As for all STM32Cube MCU and Expansion Packages, BSP configuration in STM32CubeMX[8] is not supported for STM32 Azure® RTOS.

2.2. Azure® RTOS License

Azure® RTOS is distributed by Microsoft under their own GitHub[10]. STMicroelectronics plans to include Azure® RTOS in some STM32Cube MCU and Expansion Packages. Whether delivered by Microsoft under GitHub, or by STMicroelectronics through STM32Cube packages on STMicroelectronics website[11] or GitHub, proprietary license terms are the same between Microsoft and the user: STM32CubeMX[8]

  • Source code is available
  • User is granted modification
  • User is granted redistribution of source (modified or not) and/or binary, provided the development is performed on an MCU/MPU that is listed officially by Microsoft
  • User is granted production, provided the development is performed on an MCU that is listed officially by Microsoft
  • User is forbidden to reuse provided software to create a competing offer

2.3. Where to get Azure® RTOS?

Azure® RTOS for STM32 is distributed by STMicroelectronics on different channels to adapt to the different needs and profiles of STM32 users. The figure below shows the different ways to start with X-CUBE-AZRTOS-H7 (STM32H7 used as example for illustration).

Where to get it overview.png

2.3.1. Start from STMicroelectronics website[11]

This is the standard way to get the package: the user downloads a self-contained package containing the STM32 drivers, Azure® RTOS MW & STM32CubeMX[8] configuration files and ready to use applications. Different usage approaches are possible:

  • Start directly from the provided applications, open the preferred IDE, build and debug the code.
  • Open the ioc file with STM32CubeMX[8], modify the STM32 peripherals and/or Azure® RTOS MW configuration and generate the code.
  • Install the package manually in [8] or STM32CubeIDE[9]. The usage is then the same as described in the next section.
2.3.2. Start from STM32CubeMX[8] or STM32CubeIDE[9]

Azure® RTOS is delivered as a software STM32Cube Expansion Package enhanced for STM32 Toolset, to allow users to benefit from STM32CubeMX[8] or STM32CubeIDE[9] software tools native features alongside the Azure® RTOS applications.

  • There is one package per currently public STM32 Series (delivered as X-CUBE-AZRTOS-XX package, “XX” refer to the supported STM32 Series)
  • Each package contains all the supported middleware stacks and all required resources (HAL, BSP, Utilities, ...)
  • Azure® RTOS MW stacks are described as CMSIS pack components to facilitate their usage and to manage interdependencies between them.
  • Azure® RTOS MW are configurable through STM32CubeMX[8] interface and initialization code can be generated.
  • Each package provides a set of full functional applications described by PDSC file

Pack Install STM32CubeMX

Once the package is installed inSTM32CubeMX[8]/ STM32CubeIDE[9], it can typically be found on this location: "C:\Users\"UserName"\STM32Cube\Repository\Packs\STMicroelectronics\X-CUBE-AZRTOS-XX" A package for a specific Series is not visible or usable on other series. Each package has its own version, that is not correlated with Azure® RTOS MW versions. Two different Azure® RTOS packages, for different series, may contain different Azure® RTOS MW versions.

Once the package is installed, the user has two possibilities to use Azure® RTOS:

  • Browse the Azure® RTOS applications provided within the installed pack, then start from the selected application
  • Select Azure® RTOS MW, configure it, and then generate the initialization code
2.3.3. Start from GitHub

STM32 Azure® RTOS publication on ST GitHub repository targets STM32 community users, to get a configuration management-based delivery (Git) and have engineer to engineer technical communication by means of the Issues feature. Packages in GitHub repository do not contain Azure® RTOS STM32CubeMX configuration files, thus Azure® RTOS MW configuration and code generation in STM32CubeMX[8]/[9] are not available.

Depending on the STM32 series used:

  • For currently public STM32 series (introduced up to 2020), you can find the link to the matching X-CUBE-AZRTOS-XX within x-cube-expansion-software section [12].
  • For new STM32 series introduced starting from 2021, you can find the link to the matching STM32CubeXX repository within x-cube-expansion-software section[12] .

Example: GitHub Azure® RTOS Expansion Package for the STM32H7 Series.[13]

2.4. How to use Azure® RTOS package?

A training video is available[14] to show in details how to setup and use the Azure® RTOS STM32Cube Packages. Check STMicroelectronics website for more videos [11]

2.5. Azure® RTOS applications

Multiple functional applications are provided in STM32Cube Package for Azure® RTOS stacks. Visit the page dedicated to each Azure® RTOS stack for more details about available applications.

3. STM32 Classic CoreMW

Along with the Azure® RTOS MW solution, STM32 support other CoreMW stacks based on ST development:

and Third Parties open source development:

  • FreeRTOS™ (Wiki page link will be available soon)
  • FatFS (Wiki page link will be available soon)
  • LwIP (Wiki page link will be available soon)
  • LibJPEG (Wiki page link will be available soon)
  • OpenAMP (Wiki page link will be available soon)
  • mbedTLS (Wiki page link will be available soon)

These stacks are provided in the STM32Cube MCU and Expansion Packages (except when delivered natively with Azure® RTOS MW) and in ST GitHub repository. For each stack, multiple combinations of examples and demos are provided in order to help building your own application. Besides, USB, FreeRTOS™, FatFS and LwIP stacks are supported by STM32CubeMX[8] code generation and customization.

For each Classic CoreMW , refer to the relative ST Wiki page to get more information.

3.1. License

The STM32Cube MCU Packages and STM32Cube Expansion Packages are delivered under the global SLA0048[15] software license agreement. Individual software component copyrights are described in the table below:

Component License Copyright
ST USB Device Proprietary STMicroelectronics
ST USB Host Proprietary STMicroelectronics
OpenBL SLA0044 STMicroelectronics
FreeRTOS™ MIT, Inc. or its affiliates
FatFS BSD-3-Clause FatFS - STMicroelectronics
LwIP BSD-3-Clause Swedish Institute of Computer Science - STMicroelectronics
LibJPEG Independent JPEG Group License Independent JPEG Group - STMicroelectronics
mbedTLS Apache License 2.0 Arm Limited - STMicroelectronics
OpenAMP BSD-3-Clause OpenAMP - STMicroelectronics

4. FAQ

  • Q: What are the STM32 Series covered by Azure® RTOS MW?
  • A: All new series released in 2021 and later are covered by default by Azure® RTOS MW within the matching STM32Cube MCU packages. Other STM32 series (STM32H7, STM32F4, STM32F7, STM32L4, STM32L4+, STM32G0, STM32G4, STM32WB and STM32WL) are covered through STM32Cube Expansion Packages. Older STM32 series will not be updated with Azure® RTOS support.
  • Q: Will I be able to use Azure® RTOS for my commercial applications for free?
  • A:Yes, in compliance with the corresponding license terms.
  • Q: Will I be able to make modifications to Azure® RTOS to tailor my STM32 application to my needs or fix bugs myself?
  • A: Yes, in compliance with the corresponding license terms.
  • Q: Is there any difference between getting the Azure® RTOS for STM32 from STMicroelectronics website[11], from STM32CubeMX[8]/ STM32CubeIDE[9], or from STMicroelectronics GitHub?
  • A: The only difference is that packages on GitHub do not contain STM32CubeMX[8] configuration files. Thus, it is not possible to use these packages to configure Azure® RTOS MW components and generate code using STM32CubeMX.
  • Q: What will happen to the current STM32Cube middleware offer, such as FreeRTOS™ or ST USB library?
  • A: For currently public STM32 series (introduced up to 2020), no change is planned on STM32Cube middleware offer. Azure® RTOS MW availability is planned as an additional option.
  • A: For new STM32 series starting from 2021, Azure® RTOS MW components are the preferred middleware components. Classic CoreMW is exposed through GitHub only for community handling
  • Q: Is Azure® RTOS usable withSTM32CubeMX[8] configuration and generation tool?
  • A: Yes, once the Azure® RTOS packages are picked by the user, middleware is available under STM32CubeMX, with some basic configuration possibilities.
  • Q: Has Azure® RTOS the same STM32CubeMX[8] configuration level as for the Classic CoreMW?
  • A: No, Azure® RTOS MW configuration in STM32CubeMX offers less features than Classic CoreMW native support in STM32CubeMX (less configuration possibilities, limited code generation).
  • Q: I am using current STM32Cube middleware (non Azure® RTOS), what is the impact for me?
  • A: None for currently public STM32 series (introduced up to 2020).
  • A: For new coming STM32 series starting from 2021, you must migrate to the usage of Azure® RTOS MW, or consider community job being done on Classic CoreMW
  • Q: I would like to migrate my application to Azure® RTOS from the current STM32Cube middleware offer. How to do it in the easiest way?
  • A: Azure® RTOS MW and current STM32Cube middleware differ by their respective features, performance and footprint figures. Migration effort will depend on the middleware you were using:
    • FreeRTOS™: migration will be made easy via a FreeRTOS™ API layer built on top of ThreadX, and provided by Microsoft, or by using ThreadX CMSIS-RTOS wrapper provided by STMicroelectronics.
    • NetX Duo: migration will be easier if you used Socket API, both available on the two stacks
    • USBX and FileX: switch to new APIs will have to be implemented
    • STMicroelectronics plans some documentation highlighting differences and features comparison with possible correspondence between current middleware and Azure® RTOS
  • Q: Are STMicroelectronics or Microsoft legally liable for the Azure® RTOS code distributed in STM32Cube?
  • A: Same as for the current STM32Cube offer, software is provided as-is.
  • Q: What is the technical support scheme of Azure® RTOS for STMicroelectronics customers?
  • A: STMicroelectronics ensure first level of support on Azure® RTOS MW components, as provided within STM32Cube software packages. Customers may also enter licensing arrangements directly with Microsoft, including, but not limited to, certifications and standards (such as SIL 4, IEC 61508) and dedicated support.
  • Q: For my STM32-based IoT application, am I forced to use Azure® Cloud services, or could I still connect to AWS or Aliyun?
  • A: There is no such enforcement, and an STM32 customers remain completely free to choose their favorite cloud providers.
  • Q: Is the CMSIS-RTOS wrapper supported by ThreadX ?
  • A: Yes, the CMSIS-RTOS v2 wrapper is supported and allows easier applications migration to ThreadX from other RTOS. Note that CMSIS-RTOS v2 is the default option in STM32CubeMX.
  • Q: How many STM32 Azure® RTOS applications are using CMSIS-RTOS V2 wrapper ?
  • A: One ThreadX application is provided with CMSIS-RTOS v2 layer to show how to use it.
  • Q: What are other options available to migrate from FreeRTOS™ ?
  • A: There is one option of using CMSIS-RTOS v2 layer and one other option of using Azure® RTOS FreeRTOS™ wrapper layer provided by Microsoft.
  • Q: Will existing STM32 Expansion Packages be migrated to use Azure® RTOS MW ?
  • A: Some packages are planned to be migrated to Azure® RTOS MW. New packages developed during the second half of 2021 will be based only on Azure® RTOS MW.
  • Q: When I download/use the STM32 Azure® RTOS package provided on GitHub, does it contain the STM32CubeMX[8] generation projects ?
  • A: No, STM32CubeMX generation projects are available only when package is downloaded from STMicroelectronics website[11] or on STM32CubeMX interface.
  • Q: Which boards are supported by the Azure® RTOS package provided by STMicroelectronics ?
  • A: Specific boards are supported for each application (typically one Nucleo or one Discovery board supported for each application) due to project configuration constraints. In order to support custom boards, modifications must be applied to the project source files.
  • Q: Does STM32CubeMX[8] allow configuration of threads in ThreadX ?
  • A: No, it is not possible to do so. Threads configuration must be done manually after project generationt.
  • Q: Is TraceX supported ?
  • A: TraceX is not included in the STM32 Azure® RTOS package. But users can download it from Microsoft GitHub repository and integrate it in their projects.
  • Q: Is GUIX supported ?
  • A: GUIX is not included in the STM32 Azure® RTOS package. But users can download it from Microsoft GitHub repository and integrate it in their projects.
  • Q: Is USB-PD supported in Azure® RTOS MW ?
  • A: USB-PD is supported by ST USBPD library and applications provided in STM32Cube MCU packages. But it is not yet integrated with STM32 Azure® RTOS MW solution.
  • Q: I want to use the USB or file system but I do not want to use an RTOS, what can I do with Azure® RTOS solution ?
  • A: USBX and FileX are planned to support "bare metal" option allowing to run them without the need for ThreadX. The integration of this feature in STM32 packages is planned upon availability.
  • Q: I have a question or support request relative to Classic CoreMW stacks (ST USB Device, ST USB Host, FreeRTOS™, FatFS, LwIP), what can I do ? Will fixes be released on STM32Cube ?
  • A: Support of Classic CoreMW continues through the standard channels. But no updates will be done on STM32Cube MCU packages or STM32CubeMX. Only GitHub repositories will continue to be updated for major fixes when needed or to support new STM32 Series released starting from 2021.
  • Q: How can I find online trainings to help me to use Azure® RTOS MW ?
  • A: STMicroelectronics provides online training sessions and video. Visit STMicroelectronics website[11] for more details.
  • Q: Where can I find performance and footprint information relative to Azure® RTOS MW ?
  • A: Performance and footprint data are published on this wiki page periodically. If you do not find it here, it is in the process of being published soon.
  • Q: What are the export classifications for Azure® RTOS components?
  • A: Microsoft represents and warrants that, to the best of Microsoft’s knowledge, the Azure® RTOS software Items are not subject to US Export Administration Regulation (EAR), based on the fact that these software items are “Published” within the meaning of section 734.7 and section 742.15(b)(2) of the EAR regulation.
  • A: The ST packages that incorporate the Azure® RTOS components containing cryptography are classified 5D002 (EU ECCN) under the EU regulation.
  • Q: Will I be able to use Azure® RTOS for my commercial applications for free?
  • A: Yes, in compliance with the corresponding license terms.
  • Q: I am using Keil’s RTX, SEGGER’s emUSB… i.e. another third-party middleware that runs on STM32. Is there any impact for me?
  • A: There is absolutely no impact. Customers can of course continue using their favorite 3rd party middleware.
  • Q: Where is it possible to find the list of Security vulnerabilities related to Azure® RTOS MW?{{ReviewsComments |
  • A: Any Security Vulnerability related to Azure® RTOS is logged in Microsoft Security Response Center page[16].

5. References