Хотя, к слову про "Читать даташит и писать напрямую в регистры" я не до конца согласен.
Начал изучать МК я с АВР на регистрах, после чего подтянулось понимание как что работает на низком уровне. Дальше при изучении СТМ я почти сразу начал юзать куб+хал пока учился ИСПОЛЬЗОВАТЬ периферию.
Я к тому, что не считаю, что единственно правильным способом учить МК это сначала написать инициализацию и свой драйвер на какую-то конкретную периферию, а потом уже начинать ею пользоваться)
Некоторым людям (мне, например), больше подходит обучение сверху-вниз по слоям абстракции)
Так что тут всё от человека зависит