打印
[应用相关]

STM32:HAL_xxx_Init()和HAL_xxx_MspInit()之间的区别

[复制链接]
1637|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
麻花油条|  楼主 | 2024-7-26 21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在任何STM32微控制器上使用HAL(硬件抽象库)时:
对于给定的外设,为什么必须调用HAL _... init(),以及HAL ..._ MspInit() - 为什么几个'inits'分开?

使用特权

评论回复
沙发
kzlzqi| | 2024-7-29 15:13 | 只看该作者
HAL_..._Init() 负责外设的高层次初始化,通常涉及到外设功能的配置。这部分是与硬件抽象层直接相关的,它不需要知道具体的硬件实现细节。

HAL_..._MspInit() 负责外设的底层初始化,涉及到硬件的具体设置,如GPIO配置和中断设置。这部分需要了解特定硬件的细节。

使用特权

评论回复
板凳
申小林一号| | 2024-7-29 22:49 | 只看该作者
感谢分享

使用特权

评论回复
地板
纠结的那些年| | 2024-7-31 11:57 | 只看该作者
分开初始化函数提供了灵活性。用户可以在 HAL_..._MspInit() 中添加特定硬件的初始化代码,而不必修改 HAL 库本身的代码。这使得 HAL 库能够为不同的硬件平台提供相同的高层次 API,同时允许用户根据需要配置底层硬件细节。

使用特权

评论回复
5
AdaMaYun| | 2024-7-31 12:55 | 只看该作者
各个初始化对应初始化的范围应该是不一样的

使用特权

评论回复
6
公羊子丹| | 2025-3-20 08:20 | 只看该作者
HAL_...Init() 是用来初始化外设的,它会配置外设的基本参数、时钟、GPIO等。而 HAL..._MspInit() 主要是用来初始化硬件相关的底层资源,比如中断向量表、外设时钟和 NVIC 配置等。

使用特权

评论回复
7
周半梅| | 2025-3-20 08:21 | 只看该作者
你可以把 HAL_...Init() 看作是外设初始化,而 HAL..._MspInit() 是外设的低层硬件初始化,主要为外设提供必要的系统资源。

使用特权

评论回复
8
帛灿灿| | 2025-3-20 08:22 | 只看该作者
其实,HAL_..._MspInit() 是由 STM32 HAL 库定义的低层硬件初始化代码,一般情况下,用户并不需要修改它,除非需要改变底层硬件资源的配置。

使用特权

评论回复
9
童雨竹| | 2025-3-20 08:23 | 只看该作者
为何分开呢?因为外设的初始化和硬件资源配置是两个独立的过程,外设初始化依赖硬件资源初始化。如果将它们合并会造成不必要的耦合。

使用特权

评论回复
10
万图| | 2025-3-20 08:24 | 只看该作者
HAL_...MspInit() 是硬件初始化,可以理解为和 MCU 的启动过程紧密相关,而 HAL..._Init() 是外设初始化,更注重外设本身的工作设置。

使用特权

评论回复
11
Wordsworth| | 2025-3-20 08:25 | 只看该作者
如果你需要在应用层控制外设的初始化顺序或添加额外的硬件配置(例如为外设提供特定的时钟源),就需要在 HAL_..._MspInit() 中进行调整。

使用特权

评论回复
12
Bblythe| | 2025-3-20 08:26 | 只看该作者
HAL_...Init() 内部会调用 HAL...MspInit() 来完成底层硬件配置。如果你重载了 HAL..._MspInit(),可以改变默认的硬件初始化行为。

使用特权

评论回复
13
Pulitzer| | 2025-3-20 08:27 | 只看该作者
一般来说,HAL_...Init() 是跨平台的,它不依赖于具体硬件,而 HAL..._MspInit() 需要针对特定的硬件平台进行修改。

使用特权

评论回复
14
Uriah| | 2025-3-20 08:28 | 只看该作者
对于一些特殊的外设,如果需要自定义外设的硬件配置,你需要修改 HAL_..._MspInit(),如给外设的时钟配置一个不同的时钟源。

使用特权

评论回复
15
Clyde011| | 2025-3-20 08:29 | 只看该作者
HAL_...Init() 和 HAL..._MspInit() 的分开设计,使得 HAL 层更加模块化,方便开发者定制化配置底层硬件,满足不同应用的需求。

使用特权

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

本版积分规则

282

主题

1476

帖子

2

粉丝