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)是强符号,而定义为"弱"属性的函数或未初始化的全局变量是弱符号。另外,程序中同名的强符号只能有一个,否则编译器会给出"重复定义"的错误。而弱符号可以有多个,当有多个弱符号相同时,链接器选择占用内存空间最大的那个。

相关推荐
黑猫学长呀7 小时前
存储宝典第2篇:盲封TT wafer是什么意思?
linux·嵌入式硬件·项目·芯片·ufs·晶圆·产测
都在酒里7 小时前
STM32标准库驱动HC-SR04超声波测距模块(定时器输入捕获,附完整工程代码)
stm32·嵌入式硬件·mongodb
qq_3707730911 小时前
梁山派GD32F470ZGT6 FreeRTOS CMake 模板适配指南
单片机·嵌入式硬件·gd32·梁山派
嵌入式小站12 小时前
STM32 零基础可移植教程 03:蜂鸣器响一声,LED 跟着翻转一次
stm32·单片机·嵌入式硬件
星夜夏空9913 小时前
STM32单片机学习(15) —— PC串口通信实验
stm32·单片机·学习
星夜夏空9913 小时前
STM32单片机学习(14) —— STM32的串口外设
stm32·单片机·学习
都在酒里13 小时前
STM32标准库驱动L298N双H桥电机驱动模块(调速/正反转/多模式实战,附完整工程代码)
stm32·单片机·嵌入式硬件
Hello_Embed14 小时前
USB 学习指南+软硬件框架
网络·笔记·stm32·嵌入式·ai编程
key_3_feng14 小时前
鸿蒙车规级MCU开发方案
单片机·华为·harmonyos
踏着七彩祥云的小丑14 小时前
嵌入式测试学习第 13 天:串口助手软件安装、界面认识、参数配置
单片机·嵌入式硬件