HAL
============================
标准外设库(SPL库):典型应用,由汇编级的语句、直接来操作 IO口。
HAL 库(Hardware Abstraction Layer,硬件抽象层库):典型应用,由抽象的 C函数,来间接来操作 IO口。在 C函数的内部,采用汇编语句,即采用标准外设库(SPL库)、来直接来操作 IO口。
HAL 与 SPL 之间的桥梁:stm32 由 CubeMx来完成。
注:N多的寄存器,N多的 IO端口复用,N多的 IO之间的逻辑关系(比如:IIC,当一个 IO口被定义为 IIC之后,同时必然还有一个与之配合的 IO口被用于 IIC)。
a. MCU厂家设计的目标,总是希望兼顾所有的应用场景,以便卖给不同应用场景需求的用户。
b. 具体用户的实际应用场景,只是 MCU所有应用场景中的其中某一个,或两个,反正就是比 MCU所有可能的应用场景要简单,只是其中的一个子集。
c. 小结:这是一个矛盾。对于具体用户来说,只是为了使用 MCU其中的一、或二个应用场景,却需要掌握 MCU所用的应用场景知识之后,才能完成设置出符合子集需要的某个应用场景;这需要浪费很多的时间和精力,对于 复杂 MCU来说,这就是 HAL库存在的意义。
当然,对于很简单的 MCU,HAL是没有必要的。或者说,对于具体用户来说,还是有必要的;但是,对于 MCU厂家来说,由于它们的 MCU太简单了,为了实现 HAL库,就必须还要制作出类似
CubeMx这样的工具,以便将由汇编来设置硬件的语句 --->z转换为 --->由函数来设置硬件的语句,这样的工作,MCU厂家来说,因为太简单,所以没必要。