Библиотеки стоит использовать только для коммуникационных стеков
протоколов. В обычной настройке оно нах не облокотилось. Из-за
несоответствия терминологии библиотек даташитам возникают проблемы,
на которые действительно тратятся "тысячи часов". Кроме того,
библиотеки ограничивают часть функционала периферии, не описывая
его. В результате нужно разбираться как и что вставлять в CMSIS,
чтобы реализовать задуманное. В результате человек приходит с вопросом, а для его разбора нужно ломать голову над тем, что там на самом деле в библиотеке происходит. Код становится не читаемым.
Про неподдающийся оптимизации оверхед я уже молчу. А в приложениях реального времени это чуть ли не главное. Часто из-за отсутствия аппаратной синхронизации приходится действовать через обработчик прерываний. А там применение SPL/BSP для ногодрыга или ручного запуска периферии создает неприемлемую латентность.