Hello HAL
HAL库函数是ST公司目前主推的一种编程方式,相对的,以前我们使用的所谓”库函数“称为STL库。STL库已经很陈旧了,官方已经不再维护。转投HAL库绝对是你的不二选择(
什么叫HAL?
HAL(Hardware Abstraction Layer)意味硬件抽象层。
顾名思义,它将硬件抽象化,隐藏了特定平台的接口细节。
你以前一定经历过这样的事情:在开发过程中写了密密麻麻的各种初始化结构体,什么GPIO什么RCC的,遗漏了一两句搞得整个程序运行不起来,debug好久。而如何初始化我们还要对照的手册一个个看,换个系列就要重新写代码……
这种开发方式是因为我们直接使用软件操控了硬件,最先是微软发现的这样真的很容易造成系统不稳定,而且移植性极差,开发效率很低。所以微软在设计现代的Windows系统的时候取消了软件直接访问硬件,提出了硬件抽象层(HAL)的概念。
这相当于在硬件上面贴了一层薄薄的软件,你要做什么,告诉它就好,它会帮你和硬件交互,这不仅降低了你的负担,也减少了你马马虎虎搞坏硬件的概率。
后来,这种思路被嵌入式设计借鉴,于是STMicroelectronics公司开发了HAL函数库,并在不久后推出了
”STM32CubeMX - STM32初始化代码生成器“
它是一图形化的配置工具,允许用户使用图形化的向导生成你最讨厌的那群初始化结构体。
话不多说,让我们一起来点灯吧!(
等等!在学习以前,我们先要知道代价
首先说好处:
- 快速上手,做出能 用 的产品。而不需要特别了解硬件工作原理。
- 省去麻烦的配置过程,专注于实现你的功能(做更伟大的事)
- 一套代码可以直接移植到其他STM单片机上,无需重写。
那么代价呢:
- 因为硬件层被抽象了,你看不到也无法控制硬件具体怎么走,一旦出现错误很难解决。
- 被ST公司套住了!这东西只能用来开发STM的单片机,万一换了别的牌子就会束手无措。
- 因代码库很庞大,下载编译会很慢(真的),运行效率将较为低下。(感知不强)
如果你追求运行效率,喜欢掌控全局的感觉,也可以使用和HAL库一起推出的LL(Low Layer)库,它也是一种直接操作寄存器的恐怖如斯的东西,因为我们这堆东西的目的就是快速出成果,因此没有写(我也不会。

