硬汉嵌入式论坛

 找回密码
 立即注册
查看: 522|回复: 4
收起左侧

单片机的BSP和HAL怎么理解?

[复制链接]

66

主题

100

回帖

298

积分

高级会员

积分
298
发表于 2023-11-7 16:02:04 | 显示全部楼层 |阅读模式
自己写的串口驱动之类的,算是BSP包么
回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2023-11-7 16:41:41 | 显示全部楼层
我理解如下,不一定对:
1. HAL是对芯片本身的硬件资源的抽象;
2. BSP是PCB板级硬件功能性质的封装。
举例说明,OS调用函数 BuzzerOn() 让蜂鸣器响,然后BuzzerOn() 函数里面调用 HAL_GPIO_Set( GPIOA , PIN0 ) 控制引脚输出高电平控制蜂鸣器响,那 BuzzerOn() 是BSP级别的,HAL_GPIO_Set( GPIOA , PIN0 ) 是HAL级别的。当你的程序需要移植的时候,只要修改BuzzerOn()、调用新芯片的HAL即可,对上层来说,BuzzerOn()依旧是BuzzerOn()。如果你程序里面直接调用HAL_GPIO_Set( GPIOA , PIN0 )控制蜂鸣器,那么当移植的时候,你所有调用HAL_GPIO_Set( GPIOA , PIN0 )的地方都需要修改一遍。

到这里明白没?BSP是对PCB板级资源功能的抽象和封装,HAL是对芯片本身的硬件资源的抽象封装。
回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2023-11-7 16:49:09 | 显示全部楼层
ghslfgkkl88 发表于 2023-11-7 16:41
我理解如下,不一定对:
1. HAL是对芯片本身的硬件资源的抽象;
2. BSP是PCB板级硬件功能性质的封装。

补充说明,你有一个蜂鸣器要驱动,HAL哪里知道你蜂鸣器接的是哪个引脚?他只能给你提供操作GPIO的方法。但是OS呢,也不知道你操作哪个HAL引脚,他只知道有个蜂鸣器要响。于是中间有了BSP层,BSP在这块板子我调用这块板子MCU的HAL,在另一块板子调用另一个板子MCU的HAL。很多人说移植麻烦,花的时间多,就是没做BSP层,直接到处调用HAL直接实现。但凡对PCB板上的硬件资源的功能进行抽象,也不至于说麻烦。
回复

使用道具 举报

66

主题

100

回帖

298

积分

高级会员

积分
298
 楼主| 发表于 2023-11-7 17:00:24 | 显示全部楼层
ghslfgkkl88 发表于 2023-11-7 16:41
我理解如下,不一定对:
1. HAL是对芯片本身的硬件资源的抽象;
2. BSP是PCB板级硬件功能性质的封装。

谢谢,帮助很大
回复

使用道具 举报

66

主题

100

回帖

298

积分

高级会员

积分
298
 楼主| 发表于 2023-11-7 17:03:13 | 显示全部楼层
ghslfgkkl88 发表于 2023-11-7 16:49
补充说明,你有一个蜂鸣器要驱动,HAL哪里知道你蜂鸣器接的是哪个引脚?他只能给你提供操作GPIO的方法。 ...

老哥,感觉你说的很清晰。有没有一些对新人的建议呢。我最近在ST官网找资料看,之前都是看硬汉家的教程。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 04:16 , Processed in 0.162769 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表