STM32 HAL库详细介绍

自从ST公司推出HAL库来替代原有的标准库,HAL库开始慢慢的被广大STM32开发者所接受,现在已经在实际的项目开发中大量使用,HAL库使得项目的移植变得简单容易,但是对于初学者而言,刚开始接触有些晦涩难懂。

本文将详细介绍HAL库的目录结构和功能。


1.1 HAL库下载

  • STM HAL库可以从官方下载(下载链接),展开MCU固件一栏选项。或者从CSDN下载

  • 进入下载页面,点击立即下载,需要登录账号才能下载


1.2 HAL库说明

HAL库下载解压后的目录

 

  • Documentation:文件夹下是HAL库帮助文档
  • Drivers:文件夹下是官方的CMSIS库,HAL库,板载外设驱动
  • Middlewares:中间组建
  • Projects:文件夹下是用驱动库写的针对官方发行 demo 板的例子和工程模板。
  • Utilities:实用的公共组件
  • Release_Notes.html:库的版本更新说明

1.2.1 CMSIS文件说明

  • Include文件夹:内核相关头文件,该文件夹含有核内设备层函数的Cortex-M核通用的头文件,这些文件是为了那些实用Cortex-M核设计的SOC的芯片产商设计的芯片提供提供一个进入内核的接口。
  • Device文件夹:该文件夹放的是具体的芯片直接相关文件,包含启动文件、芯片外设寄存器定义、系统时钟初始化的一些文件,由ST公司提供。
  • Core:Cortex-M内核相关文件
  • DSP:DSP函数源文件
  • RTOS:实时操作系统头文件

几个重要的文件:

  • system_stm32f1xx.c文件:

文件目录:\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates

文件包含了STM32芯片上电后初始化系统时钟、扩展外部存储器用的函数,根据需要编辑该文件

  • 启动文件

文件目录:\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates

该目录下,包含了"arm","gcc'',"iar"等,这些文件夹下包含了对应编译平台的汇编启动文件

  • stm32F103xx.h文件

文件目录:STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Include

该文件非常重要,是一个STM32芯片底层相关文件,包含了STM中所有的外设寄存器地址和结构体类型定义,在会用HAL库的地方都要包含这个头文件。

  • stm32f1xx_it.c文件

文件目录:STM32Cube_FW_F1_V1.8.0\Projects\STM32F103RB-Nucleo\Templates\Src

该文件用来专门编写终端服务函数的,这个文件已经定义了一些系统异常的接口,其他普通终端服务函数由我们自己添加。

  • stm32f1xx_hal_conf.h文件

文件目录:STM32Cube_FW_F1_V1.8.0\Projects\STM32F103RB-Nucleo\Templates\Inc

该文件被包含在stm32f103xx.h文件,可以使用这个文件根据芯片型号增减ST库的外设文件,时钟源也是在这里配置的。

1.2.2 STM32F1xx_ HAL _Driver 文件夹

文件目录:STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver

STM32F1xx_HAL_Driver 文件夹下有inc和src文件夹,在文件夹里的就是ST公司针对每个STM32外设编写的库函数文件,每个外设对应一个.c和.h后缀的文件。我们把这类外设文件统称为:stm32f1xx_hal_ppp.c 或 stm32f1xx_hal_ppp.h文件,PPP 表示外设名称。


最后是HAL库各文件之间的调用关系,熟记此图对理解HAL很重要

                              

  • 13
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库和固件库之间有几个重要的区别。首先,HAL库使用了句柄结构,而固件库没有。句柄是一个指向硬件资源的指针,它允许用户在代码中直接操作硬件资源。这种结构使得HAL库更加模块化和可移植。 其次,HAL库使用了回调函数的机制,这使得用户可以在特定的事件发生时执行自定义的代码。这种机制在处理中断和异步操作时特别有用。而固件库则没有提供类似的机制,用户需要自己编写相应的代码来处理中断和异步操作。 另外,时钟配置也是HAL库和固件库之间的一个区别。在HAL库中,时钟配置是通过CubeMX工具生成的代码进行配置的,用户只需要在工具中进行相应的设置即可。而在固件库中,时钟配置需要用户手动编写相应的代码。 最后,HAL库还提供了一些其他的功能和接口,如HAL_Init()函数以及其他一些辅助函数,这些函数可以帮助用户更方便地进行开发和调试。而固件库则没有提供类似的功能和接口。 综上所述,HAL库相比固件库在句柄结构、回调函数、时钟配置和其他一些功能方面有一些区别。用户可以根据自己的需求选择使用HAL库还是固件库来进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32从固件库到HAL库](https://blog.csdn.net/qq_46554815/article/details/128596266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值