当前位置: 首页 > article >正文

STM32 HAL库

1. 相关概念

1.1. 回调函数

Callback()回调函数与普通函数的本质区别在于调用者不同:普通函数由用户代码调用,而回调函数则是由系统在适当的条件下调用。回调函数用于对各种事件的响应和处理,如当指定的EXTI线上发生中断或事件时,HAL_GPIO_EXTI_Callback()函数会自动执行,以完成某些特定的功能。

1.2. 弱函数

使用了“__weak”修饰的函数,其与一般函数没有太大差别,只是当另有一个不带“__weak”的同名函数被定义时,所有对这个函数的调用都会指向不带“__weak”修饰的那个函数。

2. HAL库

2.1. HAL库(Hardware Abstraction Layer)

HAL库是STM32抽象层嵌入式软件,可以实现对STM32系列器件家族的全面支持并可以增加代码的可移植性。另外,STM32CubeMX软件内部还集成有中间件组件,可以提供对RTOS、USB、TCP/IP以及图形功能的中间层支持。

2.2. HAL库的特点

 提供了通用的应用程序编程接口(API),覆盖了外设的常见功能,为不同家族芯片间的软件移植(如F1至F0)提供了可能。
 三种应用程序编程模型——查询、中断和DMA。
 应用程序编程接口与RTOS兼容。
 支持用户回调功能机制,当外设中断或错误产生时,将会调用用户回调(callback)函数来做相应处理。
 支持对象锁定机制,提供了更加安全的硬件访问方式,以防止软件对共享资源的多重访问。
 在阻塞进程中提供了可编程的超时时间,用于提高软件的可靠性和实时性。

2.3. HAL库的构成

HAL驱动程序源代码基于C语言编写,符合ANSIC标准,提供完整的器件功能支持,可以帮助开发者快速、简易地编写出嵌入式应用程序。例如,HAL驱动为SPI模块提供了诸如初始化和功能配置、管理基于查询方式的数据传输、处理中断和DMA以及管理通信错误等功能。
HAL库的文件结构(注:ppp为外设)
在这里插入图片描述

2.4. HAL库的使用

在使用STM32CubeMX建立软件开发项目时,HAL库驱动文件会随之嵌入程序中,并与其他工程文件一起参与编译。
用户程序文件结构
在这里插入图片描述
msp:处理器支持包

2.5. HAL库文件

STM32CubeMX软件在生成开发项目时会自动将HAL库驱动文件复制到开发项目的相关文件路径下。后续在进行工程扩展时,也可以自行复制HAL文件到开发项目。
在对回调(callback)函数进行定义时,使用了“__weak”这样的关键字。“__weak”在这里是一个宏,用于对函数的弱定义。
在C语言中规定,函数和已初始化的全局变量(包括初始化为0)是强符号,而定义为“弱”属性的函数或未初始化的全局变量是弱符号。另外,程序中同名的强符号只能有一个,否则编译器会给出“重复定义”的错误。而弱符号可以有多个,当有多个弱符号相同时,链接器选择占用内存空间最大的那个。


http://www.kler.cn/news/340998.html

相关文章:

  • SQL进阶技巧:SQL中的正则表达式应用?
  • 浙大数据结构:08-图8 How Long Does It Take
  • P1903 [国家集训队] 数颜色 / 维护队列
  • 叉车毫米波雷达防撞技术,保护叉车作业安全
  • 图像分类-demo(Lenet),tensorflow和Alexnet
  • 深度学习基础—残差网络ResNets
  • springboot 整合 rabbitMQ(2)
  • 【SQL】深入了解 SQL 索引:数据库性能优化的利器
  • C#操作SqlServer数据库事务
  • BMS 硬件工程师面试题
  • 【unity进阶知识8】unity场景Scene的使用, 如何封装一个场景管理器
  • HeidiSQL 数据库密码如何恢复
  • [CTF夺旗赛] CTFshow Web13-14 详细过程保姆级教程~
  • 是否可以将缓存的 hashCode 方法添加到原始字符串?
  • 深度学习模型
  • LabelImag标注工具环境配置
  • 【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色
  • 【数据分析】参数检验与非参数检验
  • C语言 | Leetcode C语言题解之第468题验证IP地址
  • 【python 简易入门应用教程】第一部分:Python 基础