本文转载自 stm32中的hal库 中MSP的含义

MSP = MCU Specific Package

MSP 是指和具体的 MCU 相关的初始化,举个例子就可以理解,比如串口的初始化:

1、我们要初始化和 MCU 无关的东西:例如串口协议,其中包括波特率,奇偶校验,停止位等等,这些设置和使用什么样的 MCU 没有任何关系,可以使用 F1 的 MCU,也可以是 F2…F4,甚至是 PC 上的串口。所以就把串口抽像成为一个“串口”。

2、有了抽像的串口,这个“串口”需要运行在具体的 MCU 上,假设使用 STM32 ,PA9 做为发送,PA10做为接收。对具体 MCU 底层硬件相关的配置如引脚、时钟、 DMA、中断等就是在 Msp_Init 中完成的。

所以 HAL 驱动方式的初始化流程就是:HAL_USART_Init() ———>HAL_USART_MSP_Init() 。先初始化协议,再初始化特定型号 MCU 的相关引脚。在 STM32 的 HAL 驱动中 HAL_xxx_MSP_Init() 是包含在 HAL_xxx_Init() 中的。

需要特别指出的是在 HAL_UART_Init 调用 HAL_UART_MspInit 库函数的函数原型是:

  1. __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
  2. {
  3. /*防止未使用的参数编译警告*/
  4. UNUSED(huart);
  5. }

__weak 表示弱定义, 表示如果你自己定义了同名的函数就不用他,如果你没定义就使用这个弱函数。 其中 UNUSED 函数只是为了防止未使用的参数编译警告,其实质是什么也不做