1.hal库介绍及开发软件安装

1.什么是hal库

  hal库是ST公司针对STM32单片机推出的全新开发库,旨在取代原来用于开发STM32的标准库。相比于原来的标准库,hal库具有如下优点:
1)hal库开发提供了图形化配置界面,使得外设初始化变得更加简单明了且不容易出错。只需要在图形界面动鼠标点几下,输入几个参数,就可以生成一个点亮LED灯的keil工程或者IAR工程。

2)hal库提供了更高抽象层次的API,因此可移植性更强,便于在基于M3,M4,M7内核的单片机之间移植。

2.为什么要学习使用hal库开发STM32

  理由很简单,因为ST公司不再维护标准库了,而且现在STM32很多mcu只支持使用HAL库开发不支持使用标准库开发。最关键的是,现在网上很多开源的代码都是基于hal库的。因此是时候学习使用hal库来开发STM32了。

3.使用标准库开发和hal库开发的异同

使用标准库,开发步骤如下:
从ST官网下载对应mcu的最新版的标准库—>新建一个keil工程,并将相应的源码文件添加到工程里—>在main.c里写外设初始化代码—>外设初始化完成后再写业务逻辑代码。

使用hal库,开发步骤如下:
安装好STM32CubeMX配置软件和下载对应mcu的hal库—>在STM32CubeMX里使用图形界面设置mcu的时钟以及外设—>生成已经完成时钟设置和外设初始化的keil工程—>打开生成的keil工程,写业务逻辑代码。

可以看到使用hal库开发的好处是,可以利用STM32CubeMX提供的图形界面自动生成时钟和外设初始化代码和keil工程,时钟和外设的初始化代码不需要自己手动写,比较方便且不容易出错。更加方便的是,如果你严格按照规定在给定的地方写用户代码,那么利用STM32CubeMX再次生成的外设初始化代码不会覆盖到写的用户代码,可以很方便随时添加初始化外设的代码。

STM32CubeMX是ST公司为hal库开发而推出的一款配置软件,把hal库作为输入,根据用户设定的配置生成对应的keil工程或者IAR工程。

那么标准库和hal库有没有相同或者相似的地方?答案是肯定的。hal库和标准库其实都是将寄存器操作封装起来的c函数库。里面也提供了启动文件以及相关的外设库文件。你完全可以不用STM32CubeMX,然后按照使用标准库的开发流程来使用hal库开发stm32也是可以的。只不过hal库由于提供了更高层次抽象的API,写外设初始化代码的时候没有标准库那么直观而且也比较麻烦。

4.安装STM32CubeMX及hal库

4.1安装cubemx

安装STM32CubeMX之前,需要先安装64位的Java。注意,一定要是64位的。Java中文官网下载到的Java一般是64位的,因此需要到英文官网去下载,下载地址如下:
java下载地址
下载下图所示的版本,下载下来后,使用默认安装选项安装即可。
1.hal库介绍及开发软件安装
安装完Java之后,到ST官网搜索STM32CubeMX,然后下载最新的版本,使用默认安装选项安装即可。

4.2 安装hal库

安装完成cubemx之后,打开cubemx,然后依次按照下图操作,安装需要的mcu的hal库即可(这里以STM32L0系列的hal库为例):
1.hal库介绍及开发软件安装
1.hal库介绍及开发软件安装

安装完成后便可以利用cubemx来开发stm32了。

当然也可以单独下载hal库,hal库的下载也很简单,比如要下载STM32L1系列的hal库,那么直接在ST官网搜索stm32cubeL1即可。stm32cubeL1对应的就是L1系列的hal库。下载下来解压便可以看到和stm32L1对应的各种.c源文件了。
为什么要单独下载hal库呢?因为解压后,在解压的文件夹/Drivers/STM32xxx_HAL_Driver文件夹里有用户手册,方便查阅hal库里面函数的用法。

hal库的命名规则为stm32cubeXX,其中xx是mcu的具体型号。

关于STM32CubeMX的教程,博主mculover666写得不错,大家也可以参考他的教程来学习。
博主mculover666的STM32CubeMX教程