Estoy aprendiendo a usar microcontroladores STM32 usando CubeMX para generar un proyecto. Me he dado cuenta de que CubeMX genera dos etapas básicas de inicialización para casi todos los periféricos:
(A) Dentro del archivo stm32fxxxx_hap_msp.c
, define una cantidad de devoluciones de llamada de la forma HAL_XXX_MspInit()
.
(B) Dentro de main.c
, define una serie de funciones de la forma MX_XXX_Init()
.
A veces, una función HAL_XYZ_Init()
de un periférico se llama desde (A) como lo hace con el ADC y el RTC. Otras veces, una función HAL_XYZ_Init()
de un periférico se llama desde (B) como se hace con GPIO.
Ambos conjuntos de funciones llaman a las macros __HAL_RCC_xxxx
extensivamente.
No puedo hacer caras o colas del patrón de uso y ni la guía HAL ni el manual de referencia dan mucha dirección aquí.
Entonces, preguntas:
-
Sospecho que el formato de devolución de llamada proporcionado por (A) tiene algo que ver con la activación de la uC de los modos de baja potencia, pero no estoy seguro de esto. ¿Es correcto o cuál es el propósito del formato de devolución de llamada
HAL_XXX_MspInit
? -
Noté que (A) contiene más comentarios de bloque de definición de usuario que indican que mi código cohabita con las funciones generadas por CubeMX. Pero, ¿por qué, por ejemplo, estaría mal mover el código de (B) al espacio de (A) para mantener mi secuencia de inicialización clara y fácil de leer?