To add further confusion, consider rust. The flashing and debugging is easier, but the library ecosystem is a bit of a mess. On the plus side for learning, you will get comfortable with data sheets!
Btw, regarding HAL vs register-level programming... I think if you end up not using a HAL, you will end up writing a subset of one naturally as you create practical abstractions. Your call!
Note: There are general 3 types of manuals you will encounter for STM32:
- Reference Manual: Details on the MCU family broadly. Use this as your guide to programming and peripheral capabilities.
- User manual: Details on the specific MCU. Use this for pin mappings, and which peripherals are available on a given package
- Dev board datasheet: If using a dev board, this describes which pins are mapped to which external pins, onboard peripherals etc.
Don't get too overwhelmed with all the STM32 varieties. The family tree is sprawling, but peripherals are usually heavily conserved. With many exceptions to keep things interesting... A lot of the maker-oriented material points towards older ones; I would skip those, as working with the relatively newer ones tends to be a bit easier. (i.e. no reason to use an F3, F4, F0 etc on a new project)