新手学STM32的话,先学标准库还是HAL库?

news/2024/10/23 6:05:08/

大家好,我是麦鸽,最近有网友提问

用STM32的话,是学标准库还是HAL库?

对于新手,我想说,不要和自己过不去,一开始不要搞得太难,要循序渐进。

新手经常会问的问题,先学51还是STM32,

或者之前有网友提问,写PC软件是学MFC还是Qt?

其实诸如此类的问题,都不能忽略一个问题就是学习曲线,是否对初学者友好。然后再看后续是否再值得深入学习,是否有学习的价值。

对于单片机而言,标准库还是HAL库,只不过是操作硬件的中间件而已,我们不需要再去生硬地去查芯片手册,去配置寄存器,可以更快地搞定底层的配置,集中精力搞定应用部分的开发。

43d6bfa449466605e2ad15245c059e83.png
image

单片机开发通常是这样架构,或者会再跑个RTOS,一般裸机开发,我们会把一些硬件模块写成单独的驱动模块,向上提供接口给应用层。

而这里会操作到一些芯片的资源,就可以通过调用固件库里的接口,比如配置GPIO,硬件I2C和SPI,或者中断和定时器,使用库函数,或者HAL库,一条函数就够了,自己配置寄存器可能需要十几条语句,而且配置寄存器的话,如果有点粗心配置错了,那么中间所花费的调试时间,也会很长。

  • 直接寄存器配置,代码效率高,开发效率低;

  • 使用标准库,中等代码效率,开发效率中等;

  • 使用HAL库,中间冗余代码会更多,多占用一部分系统性能,但是开发效率高;

另外,STM32的标准库貌似已经不在更新了,如果作为学习的话,也是可以的,学习资源还是很多的。

如果直接学HAL库,也没问题,学习资源也很多。比如CUBEMX直接支持图形化配置了。

关键不管学习哪一个库,不能只停留在表面。

换个库,或者换个硬件平台,就啥都不会了,这样还是不行。其实通过学习标准库,或者学习HAL库,去熟悉STM32这个平台,例如;

通用的一些外设,比如ADC,UART,I2C或者SPI等等;常用的中断,定时器中断,外部中断,如何触发方式;

去了解这些库的封装方式。

调试的时候,可以调入底层去看。到后面我们其实会发现,如果换一个硬件平台,或者换一个库,本质还是相同的,无非是对底层的近一步封装,多看看官方提供的Demo程序,学会自己移植,增加新的功能。

遇到硬件Bug的时候,还是要Debug到底层,对着芯片手册去排查,到这一步,那么你的开发水平其实也算不错了的。实在解决不了,再找原厂的FAE去解决哈。慢慢地,开发水平就提高了。

-END-


往期推荐:点击图片即可跳转阅读

往期推荐

判了,应该三年

看到这100多个软硬件开源项目,真是爽爆了

我这个经验好找嵌入式的工作吗?

学计算机的女生后来都怎么样了?


http://www.ppmy.cn/news/1541249.html

相关文章

88.【C语言】文件操作(5)

目录 文件的随机读写 1.fseek函数 代码示例 运行结果 2.ftell函数 代码示例 运行结果 3.rewind函数 代码示例 运行结果 承接79.【C语言】文件操作(4)文章 文件的随机读写 1.fseek函数 声明:int fseek ( FILE * stream, long int offset, int origin ); 格式:fsee…

itext自定义pdf

pom坐标 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>字体文件可以…

go 包相关知识

在Go语言中&#xff0c;包的引用和搜索路径是由环境变量GOPATH和GO111MODULE共同决定的。 GOPATH环境变量&#xff1a;这个变量定义了默认的工作目录&#xff0c;Go命令行工具将会在这个目录下查找包文件。这个目录通常包含三个子目录&#xff1a;src、bin和pkg。 src目录包含…

解决Eclipse中’Run As’菜单缺少’Run on Server’选项的问题

解决Eclipse中’Run As’菜单缺少’Run on Server’选项的问题 问题描述&#xff1a; 当您在Eclipse中导入一个Web项目后&#xff0c;可能会发现在’Run As’菜单中没有’Run on Server’选项。这可能会让您无法方便地在本地服务器上运行和调试Web应用程序。 可能原因&#…

Qml-CheckBox的使用

Qml-CheckBox的使用 CheckBox属性 CheckBox的继承关系&#xff1a; CheckBox – AbstractButton – Control – Item; CheckBox的属性主要继承于AbstractButton。属性checkState&#xff1a;勾选状态&#xff0c;值为&#xff1a;Qt.Unchecked、Qt.Checked、Qt.PartiallyChec…

iOS弹出系统相册选择弹窗

直接上代码 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {UIImagePickerController *imagePickerController [[UIImagePickerController alloc] init];imagePickerController.delegate self; //设置代理imagePicke…

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

Electron+Vue实现两种方式的截屏功能

本次介绍的截屏功能一共有两种分别是在electron环境中与非electron环境中 非electron环境 这个环境下会有一些限制&#xff1a; 1.只能截浏览器中的画面 2.如果里面有iframe或者base64的图片会加载不出来&#xff08;这个会有解决办法&#xff09; yarn add -D js-web-scree…