jhxc 发表于 2023-11-7 16:02:04

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

自己写的串口驱动之类的,算是BSP包么

ghslfgkkl88 发表于 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是对芯片本身的硬件资源的抽象封装。

ghslfgkkl88 发表于 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板上的硬件资源的功能进行抽象,也不至于说麻烦。

jhxc 发表于 2023-11-7 17:00:24

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


谢谢,帮助很大

jhxc 发表于 2023-11-7 17:03:13

ghslfgkkl88 发表于 2023-11-7 16:49
补充说明,你有一个蜂鸣器要驱动,HAL哪里知道你蜂鸣器接的是哪个引脚?他只能给你提供操作GPIO的方法。 ...

老哥,感觉你说的很清晰。有没有一些对新人的建议呢。我最近在ST官网找资料看,之前都是看硬汉家的教程。
页: [1]
查看完整版本: 单片机的BSP和HAL怎么理解?