?使用cubeMX生成的HAL庫函數中,所有外設的初始化函數HAL_xxx_Init(&xxxHandle)中都存在有此調用函數HAL_xxx_MspInit(xxx),此調用函數其實是對各外設模塊比如UART,I2C等控制器使用的的底層硬件進行初始化,包括時鐘,以及用到的GPIO,以及中斷NVIC的配置,即初始化配置各外設的底層硬件。
以串口模塊為例:
一??以下為串口模塊句柄結構體賦值函數,最后會引用HAL_UART_Init(&UartHandle)函數將賦值給結構體句柄的參數寫入串口寄存器進行配置:
二 以下為HAL_UART_Init(&UartHandle)函數內部結構,綠色部分為將賦值給結構體句柄的參數向串口寄存器進行寫入的最終實現語句,而紅色語句HAL_UART_MspInit(huart)函數出現在配置串口寄存器之前:
三 以下為HAL_UART_MspInit(huart)函數的內部結構,有下圖可以看出,是對UART相關的時鐘以及GPIO進行配置的過程,以及NVIC配置,也就是串口底層硬件配置。