As I get this question asked every now and then, I thought to publish it with an updated answer.
The question is: What do you use to develop on ARM?
The answer is: I do it the hard way. All I have is a memory configuration (.ld) file, a startup module, and a header file with register definitions. I don’t use an IDE as I edit sources in Notepad++ and I compile using Makefiles and the “GNU Tools for ARM Embedded Processors”. I refer to the Datasheet and the Programming Guide all the time when trying to use e.g. a Timer, SPI interfaces, UART ones, etc. for the first time.
Honestly, it could only get harder if I were to code in Assembly 🙂
What would I recommend to those interested in ARM embedded development who don’t want to go as far in the low-level realm as I do but yet don’t want to accept compromises with mbed? Well, there’s not an answer that fits all requirements, TBH. If your main development PC runs a modern OS (I still develop a lot of low-level code under Windows XP for various reasons, not last the fact I hate Windows 10 updates) then I’d recommend getting familiar with the HAL stack for your MCU. For STM32 I would use STM32CubeMX in order to create a skeleton project for Atollic’s TrueStudio and take from there.
STM32CubeMX lets users define, among others, the desired pinout configuration, including RCC clock sources, correcting mistakes or advising about incompatible configuration choices. The clock configuration page is quite simple to use in order set the details of the System Clock and the clocks derived from it or from the PLL unit.
I haven’t myself used the automation to generate TrueStudio projects, but I referred to Cube a few times when experimenting with changes to the System Clock, in order to set a few dividers according to my needs.
Other than that? Well, RTFM is not a bad suggestion, I’d say. Once you get familiar with HAL you can access a lot of online examples and use their code almost without changes rather than having to study the fine details within the Programming Guide 🙂