| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 从代码层面分析STM32 标准库和HAL库的差异 -> 正文阅读 |
|
[嵌入式]从代码层面分析STM32 标准库和HAL库的差异 |
??如果用过STM32系列单片机的朋友会比较清楚,一般在开发STM32单片机程序的时候首先要考虑选用那种方式来写代码。常见的有三种方式,寄存器版、标准库版、HAL库版。现在选用后两种的比较多,选择寄存器开发的可能比较少了。而后两种方式到底选用那种好呢?现在都是公说公有理,婆说婆有理,每个人的判断标准都不同。今天我不探讨这两种方式的优缺点,单纯的从代码的角度去分析对比这两种方式写代码的相同点和差异。 ??为了更有对比性,我选择了功能一模一样的LED灯程序,一个是用标准库写的,一个是HAL库写的。
??通过对比可以看出,HAL库和标准库都是操作寄存器来实现端口输出高低电平的,唯一的区别就是HAL库将标准库的两个函数合成为一个,通过参数来区别。而标准库是参数不变,而调用的函数名发生了变化。 ??接下来对比对LED端口的初始化。
??接下来看GPIO口的初始化函数。
??通过代码可以看出HAL库中端口中断模式和事件模式这块是空的,说明这个信号的单片机没有这种模式,也许其他型号的单片机就会有这种模式。继续往下看时,会发现HAL在GPIO初始化的时候,将IO的的中断模式也顺便配置了。而在标准库中,对中断的设置是堵路配置的。 ?? 在找两个程序进行对比。
?? 通过上面的这些分析可以看出,标准库函数是对寄存器简单的进行了一次封装。将每个功能都独立的封装成一个函数。每个函数的功能比较单一。而HAL库相当于对寄存器进行了二次或者三次的封装,它将能合并的功能都合并在了一起。减小了写代码的难度。但是库函数本身阅读起来要比标准库要费劲一些。这样就对导致,如果程序出错的话调试起来要比标准库难一点。但是HAL写程序却比较简单,函数的名字也更容易理解。更接近于面向对象的思想。 ??通过对比可以看出,没有那种方式更好,每种都有自己的优缺点,根据实际情况,自己喜欢用哪种就用那种。通过对官方的这两种库的对比,可以看出在产品开发中代码永远都有优化和改进的空间。以后自己在开发项目的时候,也可以用这两种不同的方式对自己的代码进行优化升级。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 17:03:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |