X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers.

Overview

X-CUBE-AZRTOS-F4 Azure RTOS Software Expansion for STM32Cube

latest tag

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.

X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers. Ready-to-run applicative examples are also provided for the NUCLEO-F429ZI and STM32469I-DISCO evaluation boards, thus reducing the learning curve and ensuring a smooth application development experience with Azure RTOS and STM32F4 MCUs.

The scope of this package covers the following Azure RTOS middleware: RTOS (ThreadX), USB Device and Host (USBX), File System including NOR/NAND memories support (FileX and LevelX) and Networking including Ethernet and WiFi media (NetXDuo).

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

  • Integrated and full featured RTOS. Learn more ThreadX.
  • Industrial grade networking stack: optimized for performance coming with many IoT protocols. Learn more Netx Duo
  • Advanced FS/FTL: fully featured to support NAND/NOR Flash memories. Learn more FileX and LevelX
  • USB Host and Device stacks coming with multiple classes. Learn more USBX
  • Safety pre-certifications (from Microsoft): IEC 61508 SIL4, IEC 62304 Class C and ISO 26262 ASIL D
  • Security pre-certifications (from Microsoft): EAL4+ for TLS/DTLS, FIPS 140-2 for SW crypto lib
  • STM32 granted production license: here

Prerequisites

  • USBX, FileX and NetXDuo building require ThreadX as they are based on RTOS model.
  • USBX Host MSC requires FileX Middleware usage
  • USBX Device ECM/RNDIS classes require NetXDuo usage

One of the following toolchains:

  • IAR Embedded Workbench for ARM (EWARM)toolchain 8.50.6 + ST-LINKV3.
  • STM32CubeIDE V1.7.0 + ST-LINKV3
  • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.32 + ST-LINKV3

Supported Devices and Boards

Repository structure

The STMicroelectronics GitHub X-CUBE-AZRTOS repository consists of the following repositories:

  • Drivers: contains STM32F4 CMSIS, HAL and BSP drivers
  • Middlewares: contains ThreadX, NetX Duo, FileX, LevelX and USBX stacks including porting on STM32 hardware
  • Projects: provides ready-to-run applicative examples for Azure RTOS on the supported boards. Projects are structured as follows:

Documentation

More comprehensive documentation is available on STM32 MCU Wiki.

License

Azure RTOS is distributed by Microsoft under GitHub and under Microsoft license. STMicroelectronics include Azure RTOS in selected STM32Cube software packages, whether delivered by Microsoft under GitHub, or by STMicroelectronics through STM32 CubeFW packages on www.st.com or GitHub, proprietary license terms are the same between Microsoft and User:

  • Source code is available
  • User is granted modification
  • User is granted redistribution of source (modified or not) and/or binary, provided he develops on an MCU/MPU that is listed officially by Microsoft
  • User is granted production, provided he develops on an MCU that is listed officially by Microsoft: Licensed Hardware
  • User is forbidden to reuse provided software to create a competing offer Whenever a new STM32 series includes support for Azure RTOS, it is added by Microsoft in the official list

By using STM32F4 Series you inherit the “Distribution and Production Use” rights in Section 2 of the Microsoft Software License Terms for Azure RTOS.

For more details about license information relative to each component in this package, please refer to LICENSE

Applications

Middleware Applications Short Description
ThreadX Tx_Thread_Creation It demonstrates how to create and destroy multiple threads using Azure RTOS ThreadX APIs. In addition, it shows how to use preemption threshold between threads and change priorities on-fly. readme
ThreadX Tx_Thread_Sync It demonstrates how to synchronize between threads using binary semaphores or mutexes. readme
ThreadX Tx_Thread_MsgQueue It demonstrates how to exchange message between threads using Message Queue API and how to handle message from different queues using event queue chaining feature. readme
ThreadX Tx_FreeRTOS_Wrapper It demonstrates how to create threads using the FreeRTOS wrapper APIs. readme
ThreadX Tx_CMSIS_Wrapper It demonstrates how CMSIS RTOS adaptation layer for Azure RTOS ThreadX, it shows how to develop an application using the CMSIS RTOS 2 APIs. readme
ThreadX Tx_LowPower It demonstrates how to configure the LowPower feature of Azure RTOS ThreadX stack. In addition, it shows how to use ThreadX MACRO related to the LowPower feature. readme
ThreadX Tx_MPU It demonstrates how to load, start and unload modules. In addition, it shows how ThreadX memory protection on modules using the Memory Protection Unit (MPU). readme
USBX Ux_Host_MSC It demonstrates how to develop USB Host Mass Storage "MSC" able to enumerate and communicates with a removable usb flash disk. The application is designed to behave as an USB MSC Host able to operate with an USB flash disk using the Bulk Only Transfer (BOT) and Small Computer System Interface (SCSI) transparent commands combined with a file system AzureRTOS FileX. readme
USBX Ux_Host_HID It demonstrates how to develop USB Host Human Interface "HID" able to enumerate and communicates with a mouse or a keyboard. The application is designed to behave as an USB HID Host, the code provides required requests to properly enumerate HID devices , HID Class APIs to decode HID reports received from a mouse or a keyboard and display data on uart HyperTerminal. readme
USBX Ux_Host_CDC_ACM It demonstrates how to develop USB Host CDC ACM device able to properly enumerate CDC devices then send and receive data that can be displayed on Hyperterminal or alike. readme
USBX Ux_Device_MSC It demonstrates how to develop USB Device mass storage class based application. The application is designed to emulate an USB MSC device, the code provides all required device descriptors framework and the associated Class descriptor report to build a compliant USB MSC device readme
USBX Ux_Device_CDC_ACM It demonstrates how to develop USB Device communication Class "CDC_ACM" based application. The application is designed to emulate an USB-to-UART bridge following the Virtual COM Port (VCP) implementation, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB CDC_ACM device. readme.
USBX Ux_Device_HID It demonstrates how to develop USB Device Human Interface "HID" mouse based application. The application is designed to emulate an USB HID mouse device, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB HID mouse device. readme
USBX Ux_Device_CDC_ECM It demonstrates how to develop USB Device CDC ECM communication. It shows how to run Web HTTP server based application stack over USB interface using USB CDC ECM protocol. readme
USBX Ux_Host_DualClass It demonstrates how to develop USB Host supporting two device classes: USB_HID (mouse or keyboard) and USB_MSC (removable flash disk). readme
USBX Ux_Host_HID_CDC_ACM It demonstrates how to develop a composite "USB HID CDC_ACM Host" that is able to enumerate and communicate with composite USB HID CDC_ACM and simple HID/CDC_ACM devices. readme
USBX Ux_Device_HID_CDC_ACM It demonstrates how to develop a composite USB Device application. The application is designed to emulate a USB HID mouse combined with an USB-to-UART bridge following the Virtual COM Port (VCP) implementation, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant composite USB HID and CDC_ACM device. readme.
USBX Ux_Device_DFU It demonstrates how to develop USB Device Firmware Upgrade "DFU" based application.The application is designed to emulate an USB DFU device, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB DFU device. readme
FileX Fx_uSD_File_Edit It demonstrates how to develop a basic SD card file operations application. The application is designed to handle SD card insertion/removal events, and depending on that state, it starts and stops file operations from and into the SD card. readme
FileX Fx_MultiAccess It demonstrates the FileX's concurrent file access capabilities. The application is designed to execute file operations on the SD card device, the code provides all required software code for handling SD card I/O operations. readme
FileX Fx_NoR_Write_Read_File It demonstrates how to create a Fat File system on the NOR flash using FileX alongside LevelX. The application is designed to execute file operations on the MX25LM51245G NOR flash device, the code provides all required software code for properly managing it. readme
FileX Fx_DualInstance It demonstrates the coexistence capability of two FileX/Levelx stacks running independently on each core. readme
FileX Fx_IAP It demonstrates how to implement an In-Application programming (IAP) using FileX's SD file access capabilities. The application is designed to erase and write to on-chip flash memory, it provides all required software code for handling SD card and flash memory I/O operations. This is a typical application on how to use the SD card peripheral for firmware upgrade application or IAP, allowing user to erase and write to on-chip flash memory. readme
FileX Fx_SRAM_File_Edit_Standalone It demonstrates how to create a Fat File system on the internal SRAM memory using FileX running in standalone mode without ThreadX. readme
NetXDuo Nx_TCP_Echo_Server It demonstrates how to develop a NetX TCP server to communicate with a remote client using the NetX TCP socket API. readme
NetXDuo Nx_TCP_Echo_Client It demonstrates how to develop a NetX TCP client to communicate with a remote sever using the NetX TCP socket API. readme
NetXDuo Nx_UDP_Echo_Server It demonstrates how to develop a NetX UDP server to communicate with a remote client using the NetX UDP socket API. readme
NetXDuo Nx_UDP_Echo_Client It demonstrates how to develop a NetX UDP client to communicate with a remote sever using the NetX UDP socket API. readme
NetXDuo Nx_WebServer It demonstrates how to develop Web HTTP server based application.It is designed to load files and static web pages stored in SD card using a Web HTTP server, the code provides all required features to build a compliant Web HTTP Server. readme
NetXDuo Nx_MQTT_Client It demonstrates how to exchange data between client and server using MQTT protocol in an encrypted mode supporting TLS v1.2. readme
NetXDuo Nx_SNTP_Client It demonstrates how to develop a NetX SNTP client and connect with an STNP server to get a time update. readme

Main changes

  • First official release of Azure RTOS integration in the STM32Cube Ecosystem for STM32F4 MCU series

Known limitations

  • USBX composite device descriptors
    • A maximum of 2 different class driver can be selected (restriction due to limited EP numbers)
    • A list of USB device Applications supporting auto generation of USB Device framework descriptors provided for these USB class drivers :MSC, HID mouse, CDC ACM, CDC ECM, DFU. For the other device class drivers, user needs first to disable the device framework builder (refer to : USBx wiki section 2.2 How to customize) and provide the full set of required device descriptors.
  • NetXDuo
    • Ethernet cable hot-plug detection not supported.
    • User needs to point to the HAL Drivers under X-CUBE-AZRTOS-F4 install path instead of the default location when creating a NetXDuo based project.

Troubleshooting

Caution : The issues are strictly limited to submit problems or suggestions related to the software delivered in this repository.

For any other question related to the product, the hardware performance or characteristics, the tools, the environment, you can submit it to the ST Community on the STM32 MCUs related page.

Issues
  • MemInit() fails when using cmsis_os2 abstraction layer

    MemInit() fails when using cmsis_os2 abstraction layer

    Caution

    The Issues are strictly limited for the reporting of problem encountered with the software provided in this project. For any other problem related to the STM32 product, the performance, the hardware characteristics and boards, the tools the environment in general, please post your report to the ST Community in the STM32 MCUs dedicated page.

    Describe the set-up

    • The board (either ST RPN reference or your custom board)
    • IDE or at least the compiler and its version

    Describe the bug (skip if none)

    A clear and concise description of what the bug is.

    How to reproduce the bug (skip if none)

    1. Indicate the global behavior of your application project
    2. List the modules that you suspect to be the cause of the problem (Drivers, BSP, MW...)
    3. Describe the use case that generates the problem
    4. How we can reproduce the problem

    Additional context

    If you have a first analysis, an enhancement, a fix or a patch, thank you to share your proposal.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    STM32CubeIDE version 1.8.0 STM32CubeMX version 6.4.0 Board -> NUCLEO-F429ZI (Nucleo 144)

    I am porting X-cube-cellular version 7.0.0 to the STM32F4 platform. My code compiles and runs but the call to MemInit () in osKernelIntialize() fails when it calls tx_byte_pool_create().

    I created my project using CubeMX and set it up for Azure RTOS F4 Software package. I have kept the NetX and TX defines the same as the X-Cube-cellular project (B-L462E-CELL1->Nx_TCP_Echo_Client_PPP). I have attached my complete project below. I'm sure this has something do with CubeMX configuration and using the abstraction layer but I have no idea where to start debugging. Any help is very appreciated! Thanks

    Cellular2_AzRTOS_F429.zip

    opened by dsilva-vd 2
  • USB Host Msc 这个例程中插拔U盘的中断有问题,刚开始可以正常识别,过一会就不能产生任何事件了

    USB Host Msc 这个例程中插拔U盘的中断有问题,刚开始可以正常识别,过一会就不能产生任何事件了

    Caution

    The Issues are strictly limited for the reporting of problem encountered with the software provided in this project. For any other problem related to the STM32 product, the performance, the hardware characteristics and boards, the tools the environment in general, please post your report to the ST Community in the STM32 MCUs dedicated page.

    Describe the set-up

    • The board (either ST RPN reference or your custom board)
    • IDE or at least the compiler and its version

    Describe the bug (skip if none)

    A clear and concise description of what the bug is.

    How to reproduce the bug (skip if none)

    1. Indicate the global behavior of your application project
    2. List the modules that you suspect to be the cause of the problem (Drivers, BSP, MW...)
    3. Describe the use case that generates the problem
    4. How we can reproduce the problem

    Additional context

    If you have a first analysis, an enhancement, a fix or a patch, thank you to share your proposal.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    opened by LiuChenghu 2
  • netxduo dhcp+autoip+mdns instability

    netxduo dhcp+autoip+mdns instability

    Caution

    The Issues are strictly limited for the reporting of problem encountered with the software provided in this project. For any other problem related to the STM32 product, the performance, the hardware characteristics and boards, the tools the environment in general, please post your report to the ST Community in the STM32 MCUs dedicated page.

    Describe the set-up

    • The board (either ST RPN reference or your custom board)
    • IDE or at least the compiler and its version

    Describe the bug (skip if none)

    A clear and concise description of what the bug is.

    How to reproduce the bug (skip if none)

    1. Indicate the global behavior of your application project
    2. List the modules that you suspect to be the cause of the problem (Drivers, BSP, MW...)
    3. Describe the use case that generates the problem
    4. How we can reproduce the problem

    Additional context

    If you have a first analysis, an enhancement, a fix or a patch, thank you to share your proposal.

    Screenshots

    If applicable, add screenshots to help explain your problem.

    opened by ucayalifish 1
  • NetX status request for ethernet driver failure

    NetX status request for ethernet driver failure

    _nx_driver_get_status in common/drivers/ethernet/nx_stm32_eth_driver.c does not set value pointed by driver_req_ptr -> nx_ip_driver_return_ptr thus caller consider request failed.

    opened by ucayalifish 1
  • USBX CDC ACM There is a problem with ux_device_class_cdc_acm_write

    USBX CDC ACM There is a problem with ux_device_class_cdc_acm_write

    I ported ThreadX and USBX on STM32F105RBT6. The USBX HID works well. When I try to use USBX CDC, the problem arises. I am using The USBX sample app of x-cube-azrtos-f4. When I use the USB virtual serial port to send data to the serial port 3, everything is normal. When I use the serial port 3 to receive data and send it to the USB virtual serial port, the problem occurs. When the data exceeds a certain amount, HAL_UART_RxCpltCallback () It can still trigger and receive data from the serial port, but ux_device_class_cdc_acm_write does not work properly. Why?

    opened by arilink 0
Owner
STMicroelectronics
STMicroelectronics is a world leader in providing the semiconductor solutions that make a positive contribution to people’s lives, today and into the future.
STMicroelectronics
A small RTOS for ARM Cortex-M3/M4 based Microcontrollers.

A tiny RTOS for ARM Cortex-M3/M4 based Microcontrollers. Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About The Proje

Puranjay Mohan 31 Mar 6, 2022
An optimized "RTOS" (more than HAL but less than RTOS) for ROV controling and getting sensor data

Nitori-ROV-OS 一个专门为水下机器人(ROV、AUV)进行优化的实时操作系统,暂命名为 Nitori,中文名 荷取 可以通过修改硬件兼容层(Port)进行移植 预计最初版本支持stm32f407和stm32h750,并在实验室目前的水下机器人中进行部署 系统分为四层,六个主要组件: 硬件

Doublues_G 2 Jan 10, 2022
Bobby Cooke 261 May 11, 2022
Simple template project to build a firmware for the STM32F4 Discovery board with FreeRTOS and libopencm3

STM32F4 Discovery FreeRTOS Makfile This is a simple template project to build a firmware for the STM32F4 Discovery board with FreeRTOS and libopencm3

Andrea Colla 7 Mar 17, 2022
LM75A temperature sensor library that you can use with STM32F10x series microcontrollers.

STM32F10x-LM75A-Library LM75A temperature sensor library that you can use with STM32F10x series microcontrollers. Launching the LM75A sensor in your a

null 11 May 2, 2022
This repository is to share the EdgeAI Lab with Microcontrollers Series material to the entire community

This repository is to share the EdgeAI Lab with Microcontrollers Series material to the entire community. We will share documents, presentations and source code of two demo applications.

Machine Learning Tokyo 15 Oct 23, 2021
Emulator for EvE Online Crucible expansion

EVEmu - An EVE Online Emulator Introduction EVEmu is a work-in-progress server emulator for the space MMO EVE Online. This is an educational project.

EvEmu Project 41 May 1, 2022
STM32Cube is an STMicroelectronics original initiative to ease the developers life by reducing efforts, time and cost.

STM32Cube covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform (this repo), delivered for each series (such as the STM32CubeU5 for the STM32U5 series).

STMicroelectronics 46 Apr 23, 2022
Full Firmware Package for the STM32WB series: HAL+LL drivers, CMSIS, BSP, MW, plus a set of Projects

STM32Cube is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost.

STMicroelectronics 109 Apr 24, 2022
VSIX Project that provides GLSL language integration.

GLSL language integration (for VS2017, 2019 and 2022) Download this extension from Visual Studio Marketplace version VS2017 & 2019 or VS 2022 preview

Daniel Scherzer 188 Apr 30, 2022
CQC (Charmed Quark Controller) a commercial grade, full featured, software based automation system. CQC is built on our CIDLib C++ development system, which is also available here on GitHub.

The CQC Automation System What It Is CQC is a commercial quality, software based automation system, suitable for residential or commercial application

Dean Roddey 52 May 4, 2022
Cobalt Strike is a commercial, full-featured, remote access tool that bills itself as "adversary simulation software designed to execute targeted attacks and emulate the post-exploitation actions of advanced threat actors".

COBALT STRIKE 4.4 Cobalt Strike is a commercial, full-featured, remote access tool that bills itself as "adversary simulation software designed to exe

Trewis [work] Scotch 59 May 11, 2022
OpenToonz - An open-source full-featured 2D animation creation software

OpenToonz 日本語 What is OpenToonz? OpenToonz is a 2D animation software published by DWANGO. It is based on Toonz Studio Ghibli Version, originally deve

OpenToonz 3.5k May 11, 2022
AI Powered Hacking Environment, A Software For Hackers, Social Engineers, Penetration Testers.

Digital Eagle (Digle) (Note: This Project isn't Finished Yet, it's Under Development, Some Tools will not work) Hell0 W0rld This Project Focus Firstly

Mahmoud Osman (MLT) 107 Apr 18, 2022
This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32

ESP32 nRF52 SWD flasher This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32 using t

null 110 Apr 29, 2022
bl_mcu_sdk is MCU software development kit provided by Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of RISC-V based chips in the future.

bl mcu sdk is an MCU software development kit provided by the Bouffalo Lab Team for BL602/BL604, BL702/BL704/BL706 and other series of chips in the future

Bouffalo Lab 109 May 13, 2022
Azure Key Vault and Managed HSM Engine, compatible with OpenSSL

Introduction The Azure Key Vault and Managed HSM Engine allows OpenSSL-based applications to use RSA/EC private keys protected by Azure Key Vault and

Microsoft 5 May 3, 2022
Delphi projesini komut satırı veya azure devops ortamında nasıl derleyeceğinizi gösteren basit bir uygulama

DelphiXECompiller Delphi projesini komut satırı veya azure devops ortamında nasıl derleyeceğinizi gösteren basit bir uygulama dcc32.cfg yapılandırması

Bilal Baydur 2 Dec 24, 2021