[STM32F4]

STM32的HAL库疑问

[复制链接]
8899|7
手机看帖
扫描二维码
随时随地手机跟帖
qiqiang|  楼主 | 2014-12-3 12:16 | 显示全部楼层 |阅读模式
STM32的HAL库的里面的函数HAL_MspInit起什么作用呢?我看初始化都在HAL_Init里面完成了
fuluoce| | 2015-1-12 18:23 | 显示全部楼层
HAL_MspIni是对时钟管脚的硬件初始化的函数  
在HAL_Init里会调用HAL_MspIni函数
__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)  我是不明白这里的__weak 是怎么实现函数HAL_MspIni重定义的

使用特权

评论回复
STARM| | 2015-7-29 11:16 | 显示全部楼层
需要重写这个函数

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
   // 初始化代码
}

使用特权

评论回复
huangcunxiake| | 2015-10-29 22:35 | 显示全部楼层
谁介绍一下结构啊。

使用特权

评论回复
Ketose| | 2015-10-29 23:40 | 显示全部楼层
fuluoce 发表于 2015-1-12 18:23
HAL_MspIni是对时钟管脚的硬件初始化的函数  
在HAL_Init里会调用HAL_MspIni函数
__weak void HAL_UART_Ms ...

__weak 修饰的函数,如果你不重新定义,那么编译器就使用现有函数,如果你重新定义了就使用你定义的函数。

使用特权

评论回复
Ketose| | 2015-10-29 23:51 | 显示全部楼层
本帖最后由 Ketose 于 2015-10-29 23:54 编辑

HAL_Init硬件抽像层的初始化,按HAL软件架构思想这个函数不让你动的,这个是和具体的MCU没关系。
MSP:MCU Specific Package
你要初始始化的硬件,你就放在HAL_MspInit里。这个才是你正确初始化硬件代码的地方,和你使用的MCU有关系,比如F1,或F4。不然你以后硬件有变动,你用CubeMX配置了一下,重新生成一下,你的初始化代码就没了。
放在HAL_MspInit里HAL指定的地方,即使用CubeMX重新生成,代码也一样存在,不会被覆盖。如下图箭头指出的地方:
QQ图片20151029234929.png

使用特权

评论回复
WXLmjr| | 2018-8-17 15:49 | 显示全部楼层
MCU Specific Package 单片机的具体方案
MSP是指和MCU相关的初始化,举个例子就可以理解:
比如串口的初始化
1、我们要初始化和MCU无关的东西:例如串口协议,其中包括波特率,奇偶校验,停止位等等,这些设置和使用什么样的MCU没有任何关系,可以使用F1的MCU,也可以是F2...F4,甚至是PC上的串口。所以就把串口抽像成为一个“串口”。
2、有了抽像的串口,这个“串口”就要在MCU上进行承载,用STM32进行承载,PA9做为发送,PA10做为接收.MSP就是要初始化PA9,PA10。配置这两个引解
所以HAL驱动方式的初始化流程就是:HAL_USART_Init() ------>HAL_USART_MSP_Init() 先初始化协议,再初始化MCU的引角。在STM32的HAL驱动中MSP_Init()是做为回调,包含在PPP_Init()中的。

使用特权

评论回复
天灵灵地灵灵| | 2018-8-17 20:57 | 显示全部楼层
fuluoce 发表于 2015-1-12 18:23
HAL_MspIni是对时钟管脚的硬件初始化的函数  
在HAL_Init里会调用HAL_MspIni函数
__weak void HAL_UART_Ms ...

weak 弱函数,如果你自己定义了同名的函数就不用他,如果你没定义就使用这个弱函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

43

帖子

2

粉丝