Es simple... Las usas hasta que la librería HAL no cumpla con su cometido y ahí haces tu propia parte, por ejemplo si podes hacerlo un poco mas rapido que ir por las HAL o es un proyecto mas pequeño que no necesita de semejante librería y el espacio sea algo limitado (que podrías usar otro micro).
El utilizarlas te permite portar ese código a otro micro mas fácilmente, ya que la parte donde modificas registros lo maneja la librería HAL.
Otro ejemplo, la libreria HAL tiene una atencion por interrupcion de la USART, la cual crea un buffer y lo usa para almacenar lo que queres enviar.
Logrando que o tengas una funcion NO bloqueante, a diferencia de la mayoria de las librerias.
Pero si no la trae la HAL, lamentablente a esta parte la tenes que hacer vos.
Si las tenes.. ponelo en un balanza.
- Velocidad de ejecucion
- Memoria
vs
- Facilidad, Rapidez y Portabilidad en la programación
No es nada lindo estar buscando que registro hace que en un datasheet cuando ya pasan las 1000 hojas.