The STM32's peripherals are complex and capable, and although the reference manual is (in many places) desperately in need of a re-write, at least all the information is there. It wasn't until I decided to start poking the hardware directly that I really started to get to grips with the device and make progress. But this code is a set of stand-alone examples for each peripheral, and if there isn't one that happens to set up the hardware as you want it, it's a game of guess-the-function all over again. There's example code available too - confusingly also included as "part of STM32cube" even though it's a separate download from the GUI software and only really shares a name. Stepping through the code, I also found a lot of bloat and overhead that's just not needed in my application.
STM32F4 HAL MANUAL HOW TO
If there's a proper manual then I didn't find it, only a rather cryptic reference guide listing the functions and their parameters, but offering no real description of how to use them. So far so good, but I also struggled to get to grips with all the HAL_* functions that configure the peripherals. I created my own main() which calls ST's function at the start.
STM32F4 HAL MANUAL UPDATE
That way I'm not putting a lot of effort into modifying an auto-generated file that might get lost if I need to regenerate it to update something. That said, I renamed ST's main() function, removed the user code from it, and put it into a separate file. For this reason if nothing else, I do think it's worth building your first design based on the main.c which STM32cube produces. I also like the fact that it will spit out everything you need to get a project started, with a lot of the essential device configuration already done: clock sources defined, PLL multipliers set, caches enabled and so on. As a tool to help design a schematic and ensure that any conflicts between pin functions can be resolved, it's definitely handy. STM32Cube is new, and I think the graphical assistance to work out which functions can go on which pins is useful, no question there. Funny you should ask, I've been doing much the same myself with an STM32F2 device this week.