在书本上以及网上总结了一些关于Msp函数的知识
在学习HAL库的过程中,总是会看到MspInit和MspDeInit,书本上只是说这是回调函数,但是关于这个函数有什么用,为什么要有这个函数,却说的很少,于是我就上网找了一些资料,在结合一下书本上的说法,就有了这一篇笔记。
这篇笔记有可能会随着我的水平的提升而进行迭代。
MSP:MCU Specific Package,即MCU特定程序包,也称MCU具体方案。
因为MspDeInit用的很少,所有这里只介绍MspInit
可以通过两个说法来了解带有MspInit的函数的主要作用
①存放外设使用到的GPIO、CLOCK、NVIC、DMA等外设的初始化(驱动)代码。
②针对具体的MCU型号的某个功能进行硬件初始化。
这种函数的名称基本都是HAL_PPP_MspInit()和HAL_PPP_MspDeInit(),PPP代表任意外设,这种函数通常会被他们的上一级函数HAL_PPP_Init()调用。
搞这样一个HAL_PPP_MspInit()函数出来,是为了把针对具体的MCU型号的某个功能进行硬件初始化的代码独立出来,方便移植。
例如,我们想把程序从F1移植到F4,那我们只需要修改HAL_PPP_MspInit()里面的内容,其他的地方不变。
再说一下函数执行的大概流程
①执行HAL_PPP_Init(),如HAL_USART_Init(),进行一些与具体硬件无关的初始化设置,比如波特率、奇偶校验位等(此时初始化的内容与具体的MCU型号无关,在不同的MCU上都是一样的)
②HAL_PPP_Init()会调用HAL_PPP_MspInit(),如HAL_USART_MspInit(),进行一些与具体硬件有关的初始化设置,比如具体的GPIO引脚(此时初始化的内容会因为具体的MCU型号的不同而不同)
在C语言中,关键字 "__weak" 用于修饰函数,表示该函数是一个弱函数(weak function)。弱函数是指,如果用户重新定义了这个函数,那么会执行用户定义函数而忽略弱函数。
MspInit()函数通常有两个,一个是HAL库自带的,由关键字 "__weak" 修饰,是弱函数,另一个是用户重新实现的。例如HAL_Init()调用的HAL_MspInit()。
在文件stm32f4xx_hal.c中有使用"__weak" 定义的HAL_MspInit()
同时,在用户文件stm32f4xx_hal_msp.c内,又重新定义了这个函数
文章来源:https://www.toymoban.com/news/detail-774645.html
此时,HAL_Init()调用的HAL_MspInit()就是用户重新实现的那个文章来源地址https://www.toymoban.com/news/detail-774645.html
到了这里,关于STM32中MspInit的一些知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!