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

相关推荐
危桥带雨1 小时前
RTC理论知识
stm32·单片机·嵌入式硬件·实时音视频
ElfBoard3 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
踏着七彩祥云的小丑4 小时前
嵌入式——认识电子元器件——二极管系列
单片机·嵌入式硬件
Jack_02204 小时前
基于51单片机的智能电动窗帘控制OLED显示设计
单片机·嵌入式硬件·51单片机·智能家居·oled显示·电动窗帘
sz4972385994 小时前
vscode多种编译环境共存的方法
ide·vscode·stm32·编辑器·esp32
摘星台5 小时前
linux环境对stm32单片机进行程序烧录
linux·stm32·单片机
Joseph Cooper5 小时前
STM32MP157 Linux驱动学习笔记(三):系统级驱动框架(UART/PCIe)
linux·stm32·学习
森G5 小时前
STM32F103C8T6工程---标准库版usart2写回显
stm32·单片机
EVERSPIN6 小时前
基于MCU CH32X035 Type-C PD显示器方案
单片机·mcu·计算机外设
Joseph Cooper7 小时前
STM32MP157 Linux驱动学习笔记(一):驱动基础与设备模型入门(同步互斥/LCD/I2C/Input)
linux·stm32·学习