STM32: diferencia entre HAL_xxx_Init() y HAL_xxx_MspInit()

Cuando utilice HAL (Biblioteca de abstracción de hardware) para cualquiera de los microcontroladores STM32:

Para un periférico determinado, ¿por qué tiene que llamar a un HAL_... init() , así como a un HAL ..._MspInit() ? ¿Por qué hay varios 'inits' separados?

Respuestas (1)

El Manual de usuario de ST UM1725 - Descripción de los controladores STM32F4 HAL y LL , consulte las páginas 61 - 63, ofrece una explicación:

La inicialización del periférico se realiza a través de HAL_PPP_Init() , mientras que
la inicialización de los recursos de hardware utilizados por un periférico ( PPP ) se realiza durante esta inicialización llamando a la función de devolución de llamada de MSP HAL_PPP_MspInit() .
La devolución de llamada MspInit realiza la inicialización de bajo nivel relacionada con los diferentes recursos de hardware adicionales: RCC, GPIO, NVIC y DMA.

(MSP: paquete de soporte de MCU )

y

2.12.2 Inicialización global HAL:

HAL_Init(): esta función debe llamarse al inicio de la aplicación para
- inicializar la memoria caché de datos/instrucciones y la cola de búsqueda previa
- configurar el temporizador SysTick para generar una interrupción cada 1 ms (basado en el reloj HSI) con la prioridad más baja
- establecer la agrupación de prioridad en 4 bits de preferencia
: llame a la función de devolución de llamada del usuario HAL_MspInit() para realizar inicializaciones a nivel del sistema (reloj, GPIO, DMA, interrupciones). HAL_MspInit() se define como una función vacía "débil" en los controladores HAL.