Скоро ждет тебя великая печаль, ибо 1. HAL предназначает для работы в прерываниях только тот код, который содержат обработчики прерываний. Функции типа HAL_UART_Receive_IT() предназначены для учебных последовательных вызовов из main().
2. HAL никак не приспособлен для работы под RTOS. Он может работать (и работает, и современный драйвер Eth работает только с RTOS) но это исключительно вопреки, с пониманием и полным контролем
Функции HAL не содержат корректных мьютексов/критических секций, не реентерабельны, во многих случаях их нельзя прерывать, они содержат внутри циклы ожидания).
3. HAL в довершение ко всему скрывает отсутствие мьютексов/критических секций своей примитивной "блокировкой" (BUSY).
4. LL работает иначе.
5. Также, не все функции стандартной библиотеки по умолчанию реентерабельны, есть нюансы (либо размер, либо reentrancy)