STM32CubeIDE
Overview
STM32CubeIDE is an IDE from STMicroelectronics specifically for the STM32 range of microcontrollers. It supports firmware development in C or C++. It integrates with STM32Cube.
![](/assets/images/stm32-cube-ide-logo-37112be57283dd97c6fde8c204c49f9b.png)
Installation
The installer is approx. 685MiB.
Default directories (examples below shown for v1.3.0
):
Windows
Installation: C:\ST\STM32CubeIDE_1.3.0
All OSes
Workspace: <user home directory>/STM32CubeIDE/workspace_1.3.0
STM32Cube Repository: <user home directory>/STM32Cube/Repository
SEGGER J-Link drivers, ST_LINK drivers and ST_LINK server software is provided with the installation.
Default File Structure
Below shows the default directory/file structure for a STM32CubeIDE project:
<root_project_dir>
|-- Core
| |-- Inc Contains the user header files.
| |-- Src Contains the user source code.
| |-- Startup
|-- Debug Default directory for debug build artifacts.
|-- Drivers
|-- .cproject
|-- .mxproject
|-- .project
|-- <project_name>.ioc Contains the pinout and hardware configuration of the micro.
|-- <micro_name>_FLASH.ld This is the linker script for the micro.
The .ioc File
The .ioc
file contains information about the target microcontroller and the hardware configuration for your project.
![](/assets/images/stm32cubeide-ioc-file-micro-pinout-af6356f8e142a45fed8df155548fa58a.png)
Enabling peripherals via the .ioc
file generates MX_<peripheral_name>_Init()
functions in the main.c
file. HAL driver files are also provided for peripherals. They are written in a object-orientated way (e.g. every UART
related HAL function which take a pointer to the UART object as it's first parameter).
Git Ignore File
Debug/
C++ Projects
Confusingly, even if you specify the project as a "C++ Project" when creating it, you will be presented with main.c
file. You can rename this to main.cpp
to begin using C++ (this will cause arm-none-eabi-g++
to be called on main.cpp
rather than arm-none-eabi-gcc
, which will allow you to include C++ code).
The linker is called correctly regardless of the extension of main
--- arm-none-eabi-g++
will be called during the linking step.
However, when you change the peripheral configurations using the .ioc
file and re-generate code, it will also recreate the main.c
.
UPDATE 2022-06-06: Apparently you can get STM32CubeIDE to create a main.cpp
when regenerating code with the .ioc
file.
STM32CubeMonitor
![](/assets/images/stm32-cube-monitor-screenshot-f1c061e5a2125556430202ef7d97eff4.png)