Скажу вам как разработчик устройств в том числе и на STM32 (программист).
На HAL в основном ругаются ардуинщики/AVR-щики - раньше они писали сразу в регистры, а сейчас хотят сохранить старые привычки. Но дело в том что у тех-же AVR-ов было только пару десятков регистров, скромная по функционалу периферия, мало памяти - которую надо было экономить.
А сейчас посмотрите на ARM-овские контроллеры (не только на STM32) - у них память в разы больше (и SRAM, и Flash), а регистров и режимов столько что черт ногу сломит. Для чего учить/делать то что уже сделано для нас?! Никто не запрещает по извращатся и написать свой HAL или SPL, но будьте готовы потратить на это много часов (в долгой отладке и чтению мануалов к процессоры, к архитектуре и к разным блокам). А еще производители могу встроить в процессор сторонний USB stack (для примера), а описание регистров итд они укажут что находятся в документации того стороннего производителя, и не знаю как вы, но я не готов тратить часы или дни на это муторное дело.
Еще другое - если вы (как и я) работаете в большой фирме, то в один день придет необходимость перейти на другой STM32 (по дешевле, по мощнее, или с ногами по больше), если вы используете HAL, то вы просто поменяете в IDE один процессор на другой (и возможное вызов пару функции на вызов других пару функции, если контроллеры сильно отличаются) и на этом все.
А представьте себе такой переход без HAL-а, где 80% регистров нужно будет поменять на другие, еще %10 регистров добавить, а у некоторых поменяется поведение. Меня не очень радует такая перспектива...
Если вы не делаете мега-контроллеры которые должны работать мега-быстро то можете смело использовать HAL/SPL/свой хал. Да и другом случае, сейчас легче и дешевле купить контроллер который работает на частоту повыше, чем оптимизировать все до процессорного такта.
Задумайтесь о другом - почему сейчас программы для Windows/Linux/Embedded Linux (ака домашний wi-fi роутер) не пишут на ассемблере, ведь они будут работать быстрее?!