人若无名 便可潜心练剑.|

hazy1k

园龄:7个月粉丝:14关注:0

2024-09-23 22:06阅读: 126评论: 0推荐: 0

第1章 HAL库简介

第一章 HAL库简介

下面我们将通过一个简单的例子来告诉 HAL 库到底是什么,和寄存器开发有什么关系?其实一句话就可以概括: HAL 库就是函数的集合, HAL 库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。

在 51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些 IO 口的状态,我们直接操作寄存器:

P0 = Ox11;

而在 STM32 的开发中,我们同样可以操作寄存器:

GPIOF->BSRR = 0x00000001; // 这里是针对 STM32F4 系列

这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 而 HAL 库是在标准固件库之后推出的。

比如上面的控制 BSRRL 寄存器实现电平控制,官方 HAL 库封装了一个函数:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
    if(PinState != GPIO_PIN_RESET)
    {
        GPIOx->BSRR = GPIO_Pin;
    }
    else
    {
        GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
    }
}

这个时候你不需要再直接去操作 BSRR 寄存器了,你只需要知道怎么使用 HAL_GPIO_WritePin这个函数就可以了。在你对外设的工作原理有一定的了解之后,你再去看 HAL 库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便很多?

任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是 HAL库不是万能的,您如果想要把 STM32 学透,光读 STM32HAL 库是远远不够的。你还是要了解一下 STM32 的原理, 了解 STM32 各个外设的运行机制。只有了解了这些原理,你在进行 HAL库开发过程中才可能得心应手游刃有余。 只有了解了原理,你才能做到“知其然知其所以然”,所以大家在学习库函数的同时,别忘了要了解一下寄存器大致配置过程。


2024.9.23 第一次修订,后期不再维护

2024.12.16 修补部分内容

本文作者:hazy1k

本文链接:https://www.cnblogs.com/hazy1k/p/18427995

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   hazy1k  阅读(126)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起