Some prefer the vendor's free Eclipse based fully integrated IDE: [STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html).
STM32CubeIDE and STM32CubeMX allow to integrate software packeges for RTOS, software stacks and much more.
Getting started:
1. Video ["How to use STM32CubeIDE"](https://youtu.be/eumKLXNlM0U) and [STM32 youtube channel](https://www.youtube.com/playlist?list=PLnMKNibPkDnF97QnUOFGirl1q0G_4VdDc)
2. Read [the docs](https://www.st.com/en/development-tools/stm32cubeide.html#resource), especially
Note that STM32CubeIDE suggests generating a HAL (hardware abstraction layer) or LL (low level) code skeleton from a graphical MCU configuration tool (STM32CubeMX). But, you can write the complete code yourself at any level, say register level, as well. The fully integrated IDE conveniently supports code browsing, source and instruction level debugging, inspection of peripheral registers, debugging by tracing etc.. So, give it a try, at least for the first projects to familiarize yourself with the hardware.