1.sqlhelper.cs
2.标准库和HAL库到底有什么不同?怎么选?
sqlhelper.cs
说ææ件
/china/MSDN/library/EnterpriseDevelopment/BuildDistApp/Vsdnbdadaab_rm.mspx?mfr=true
ä¸è½½æ件
/downloads/details.aspx?FamilyID=fd1f0a--4a7b-ec-bdf&DisplayLang=en
标准库和HAL库到底有什么不同?怎么选?
通常新手在入门STM时,都会面临选择开发方式的决策,不同的方式对编程架构影响显著。主要选择为标准库和HAL库,而较少选择直接配置寄存器。虽然网络上有大量关于标准库、口红挑战 源码HAL库的描述,但对刚入门的朋友来说,可能难以直观理解这些开发方式之间的差异。本篇将以直白的方式,用作者的理解来阐述标准库、HAL库的区别,如有不妥之处,腾讯校招源码欢迎提出不同意见。
一、配置寄存器
对于熟悉单片机的开发者,可能有一部分会直接使用汇编语言操作寄存器实现功能。但到了STM,这种方法变得不太可行,因为STM的寄存器数量远超单片机的十倍,无法全部记忆。直接操作寄存器变得非常繁琐,需要频繁查阅芯片数据手册。然而,仍有一小部分人偏好直接配置寄存器,dmi源码 14 6因其能更深入理解原理。
二、标准库
面对众多寄存器导致的开发困难,ST公司为每款芯片提供库文件,如stmF1xx...,包含常用宏定义和外设封装结构体。我们只需配置结构体变量成员即可修改外设配置寄存器,实现不同功能。这是目前最常用的方式,也是接触STM开发最常见的方式。
三、HAL库
HAL库是unity智能平台源码ST公司力推的开发方法,全称为Hardware Abstraction Layer(硬件抽象层)。库如其名,功能抽象,一眼难辨其作用。与标准库相比,它更注重节省开发时间,提供更高效的集成功能。例如,标准库可能需要多行代码实现的功能,HAL库只需一行。它还有效解决了程序移植问题,使用相通外设的芋道源码gitee程序可以轻松复制粘贴,前提是遵循相同外设设计。STMcube软件通过图形化配置生成HAL库工程文件,极大方便开发。然而,其高效性也带来了执行效率的低下,常被用户吐槽。
四、总结
综合上述,强烈推荐HAL库,原因有两个:一是自F7系列开始,ST公司已停止更新标准库,F7及以后无法使用标准库,表明公司主推HAL库。二是追求方便、模块化是行业趋势,高效、便捷的HAL库必将迅速发展。
学习HAL库的同时,底层原理同样重要,这是每个学有所成者共识。HAL库并非万能,结合底层理解,开发水准会显著提高。
五、STM HAL库与标准库的区别
1. 句柄
在标准库中,初始化外设(如USART)需要配置多个寄存器,通过结构体变量+初始化函数实现。而在HAL库中,使用全局句柄贯穿初始化流程,不仅包含基本参数,还包含更多与单片机相关的设置,如中断处理、DMA相关变量等。
2. MSP函数
MSP函数负责与单片机相关的初始化,与标准库不同,HAL库在初始化外设时,还会初始化与单片机相关的外设配置,如引脚配置。这使得HAL库具有极强的移植性,但同时增加了代码量和嵌套层级。
3. Callback函数
Callback函数简化应用层代码编写,用户只需设置句柄参数,由HAL库自动处理中断、数据读取等操作,无需手动清除标志位,增强代码逻辑性。
六、HAL库结构
STM的HAL库在STMCubeMX可视化配置工具的支持下,大大节省了开发时间。HAL库结构包含多个层次,从主头文件开始,到具体型号头文件,再到源码文件。其包含三大类API,宏定义用于中断、配置等操作,用户代码分为处理外设句柄、MSP、回调函数等。
整体来看,HAL库通过句柄、MSP、回调等机制,提供了强大的移植性和更清晰的编程结构,但带来了代码量增加和编译速度降低的挑战。开发者需根据项目需求权衡选择。