Introduction to STM32Cube Expansion

Are you interested in contributing to the STM32Cube ecosystem by introducing your own embedded software solution to help STM32 developers? If so, we have an informative article that will guide you through the process of preparing a STM32Cube Expansion and becoming a ST Partner.

1. What is an STM32Cube Expansion?

STM32Cube Expansion Packages are embedded software packages that complement the STM32Cube MCU Packages with additional software bricks, including specific drivers for external companion chips or application-specific middleware. They offer developers simplified implementations of real-world use cases in many application areas, such as sensing, power management, connectivity, and audio. They also contain preconfigured project examples for ST boards and supported IDEs to get started easily.
In addition to the packages provided and supported by ST, many partners contribute to enrich the STM32Cube ecosystem with their innovative solutions. They provide software based on STM32Cube HAL or LL drivers, leveraging STM32 hardware resources.
STM32 developers can evaluate ST partners solutions by accessing following STM32Cube Expansion types:

  • STM32Cube Demo: demo binaries to load and run them on their board,
  • STM32Cube Example Package: ready-to-use project example to load in their IDE,
  • STM32Cube Pack: software components to add (and possibly configure) in their STM32CubeMX tool project.
Figure 1: STM32Cube Expansion types

As an ST Partner, you will have the opportunity to expose one or several of your deliverables to STM32 developers for evaluation. This could include STM32Cube Demos and Example Packages, which are showcased on the, or STM32Cube Packs, which are featured in the STM32CubeMX tool.

This article provides guidelines to ST partners or anyone aiming to prepare an STM32Cube Expansion.

Here are some general recommendations, considering developers needs:

  • To quickly identify which STM32 series is supported by Partners solutions.
  • To access clear and easy guidelines for getting started on STM32 board.
  • To get State of the Art implementation of STM32 hardware resources.
  • To get Resources information (contact, support model, web site, etc.).
  • To get a clear license model and an understandable path to production.
Figure 2 Common ground

2. How to prepare a STM32Cube Demo?

The objective is to provide an overview of partner solutions in terms of performance and functionality through a demo. This package consists in a binary format file that developers can upload and run on a specific STM32 board thanks to STM32CubeProgrammer.

Figure 3: STM32Cube Demo

A Getting started document is recommended to describe all the steps to upload and run the demo.

3. How to prepare a STM32Cube Example Package?

The objective is to enable developers to evaluate your software in an STM32Cube environment through a project example. This package provides an example project in one IDE with your software components and an applicative code running on an STM32 board. Examples of IDE tools: STM32CubeIDE, IAR Embedded Workbench, Arm KEIL MDK, Microsoft Visual Studio Code, etc.

A Getting started document is recommended to describe all the steps to upload and run the example project. Possible limitations should also be described.

3.1. Example from an IDE, without STM32CubeMX support

To create an example from an IDE (STM32CubeIDE, IAR Embedded Workbench, Arm KEIL MDK, Microsoft Visual Studio Code, etc.), you shall:

  • Create a project in the selected IDE,
  • Add your software components and an applicative code running on an STM32 board.
Info white.png Information
The makefile and CMake are now supported in STM32CubeIDE.

You can then publish/share this project example in a zip file or in a GitHub repository.

3.2. Example with a configuration from STM32CubeMX

If you want to leverage STM32CubeMX tool to configure the STM32 pinout, clock and/or peripherals, you can:

  • Create a project in STM32CubeMX first,
  • Select a STM32 device according to your application,
  • Add your software component,
  • Generate a project including STM32 initialization code for your IDE,
  • Open the project in your IDE and add your applicative code running on an STM32 board.

You can then publish/share this project example in a zip file or in a GitHub repository. The .ioc file added by STM32CubeMX tool in your project files might be helpful for developers aiming to modify or customize the STM32CubeMX configuration of your project example.

3.3. Example if you have packaged your component as a CMSIS pack (following guidelines of section 4 below)

If you have packaged your software components in a STM32Cube Pack, you might load them in your STM32CubeMX project after having possibly configured the STM32 pinout, clock and/or peripherals.

4. How to prepare a STM32Cube pack?

Creating a STM32Cube pack enables STM32CubeMX users to configure your software components in the tool graphical user interface and automatically import them in their own newly-generated project. Your solution becomes available to any STM32 boards or STM32 devices (if compatible) for users starting a project from STM32CubeMX tool.

4.1. A Standard CMSIS pack

Packaging your software components in a CMSIS pack allows developers to accelerate the integration while using development environments such as STM32CubeMX. You might refer to Open Cmsis Pack GitHub to learn more about CMSIS standard.

ST provides a utility, STM32 Pack Creator, to generate the .pdsc file, which contains meta data.

This utility is present in your STM32CubeMX install: YourLocation$\STMicroelectronics\STM32Cube\STM32CubeMX\utilities\STM32PackCreator directory. The methods to develop a CMSIS pack are explained in sections 4, 5.1 to 5.4 and 5.9 to 5.10 of the UM2739 user manual, accessible from the help menu of the STM32 Pack Creator or from

4.2. A CMSIS pack with a configuration panel for STM32CubeMX

STM32CubeMX tool can optionally expose some configuration parameters for your software components. These parameters will appear in the configuration window of STM32CubeMX tool.

You can leverage this feature, by using the STM32 Pack Creator utility, moving from CMSIS-Pack view to STM32CubeMX view. Refer to sections 5.5 and 5.6 of the UM2739 user manual.

4.3. A CMSIS pack with a configuration panel for STM32CubeMX, and source code generation

STM32CubeMX tool can optionally generate some customized source code as well, depending on some user parameters. Refer to section 5.7 of the UM2739 user manual.

4.4. STM32Cube Pack structure

The STM32Cube Expansion structure top level is the following:

Figure 4: STM32Cube Expansion folder structure

  • STM32CubeMX: generated by STM32 Pack Creator (available in STM32CubeMX panel tools). It contains the files required by STM32CubeMX configure the software component.
  • Middlewares: contains your software component itself. Under ST subdirectories when coming from ST, under “Third_Party” when coming from your side or from a community.
  • Utilities: contains any PC software 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.txt: contains the license terms. It is displayed during the installation process in STM32CubeMX tool.
  • Release_Notes.html: contains information on the release such as goals, modified files, corrected bugs and limitation if any.
  • VendorName.CubeExpansionName.pdsc: the pdsc contains the description of the file included in the packages.

5. Going further

The following documents can be used as reference:

  • UM2739 How to create a software pack enhanced for STM32CubeMX using STM32 Pack Creator tool
  • UM2285 Development guidelines for STM32Cube Expansion Packages
  • UM2388 Development guidelines for STM32Cube firmware Packs
  • UM2298 STM32Cube BSP drivers development guidelines
  • UM2312 Development checklist for STM32Cube Expansion Packages