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 小时前
【STM32】预分频因子(Prescaler)和重装载值(Reload Value)
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
riveting1 小时前
明远智睿H618:开启多场景智慧生活新时代
人工智能·嵌入式硬件·智能硬件·lga封装·3506
三万棵雪松2 小时前
【STM32HAL-第1讲 基础篇-单片机简介】
stm32·单片机·嵌入式硬件
玉树临风江流儿2 小时前
炸鸡派-基础测试例程
单片机·嵌入式硬件
板栗焖小鸡3 小时前
STM32-PWM驱动无源蜂鸣器
stm32·学习
智者知已应修善业5 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
智商偏低11 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen12 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森14 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白14 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件