学STM32选标准库还是HAL库?

我学STM32的时候,stm32cubeMX还没推出,HAL库还没出来,主要以标准库为准。

下面讲下我学习STM32的经历,从陌生到应用到项目大概花了2-3周,相信99%的人都能通过这种方法,快速把STM32玩起来。

我是项目需要,才接触的STM32,也是基于同事的介绍,在此之前用的是NXP单片机,需要手动配置寄存器,ARM7的单片机,不要说自己去配置了,光看以前工程师配置好的代码,头皮都发麻。

同事说STM32不用自己配置,价格也很有性价比,正好接了个外单,是做太阳能热水器的控制板,主控芯片我就选了STM32。

项目也比较急(其实那个老板也不急),主要是我想快点做完,赶紧拿钱,做外单这种事,耗的时间越长越亏。

现在这个项目的屎山代码还在,2012年做的了。

那会浮躁啊, 一心只想快点把项目做出来交差。

所以根本没心情像以前学51单片机那样,把每个寄存器每个位基本都研究过一遍。

我就直接买了个STM32开发板,然后项目用到什么外设,我就先在开发板上调,开发板没有教程,只有每个外设的例程,我就打开这个例程先研究下,先在开发板上调通,然后改改参数,再移植到项目里去调。

我刚开始接触固件库,和大家感受应该是一样的,点个灯而已,整个工程怎么这么庞大复杂,为什么配置这个结构体参数,就能把外设用起来,这些结构体是怎么跟外设联系起来的?

我也尝试过用51单片机的玩法,沿着相应寄存器每个位的配置,奈何当初编程基础还不行,顺着源代码都找不到源头。

如果把这些研究明白再做项目,那黄花菜都凉了,不管了,先把功能实现再说,照着开发板配套例程,照葫芦画瓢的方式。

我用到的外设也就GPIO、ADC、UART、Timer、DMA,协议有SPI、IIC。

在有参考例程的基础上,改改结构体参数,大概2-3周就把这些外设全跑通了。

接下来的时间就是做项目的业务功能了。

说出来都有点尴尬,项目都交付了,我连STM32的时钟树,NVIC都没怎么搞明白,反正按照例程来,这些不懂,也不影响使用。

可能就跟开车的原理一样,你不一定非得把车的内部结构,发动机原理这些整明白了,才能学会开车。

而是会踩刹车油门,会掌握方向盘,就可以把车开走了。

剩下的就是熟练度的问题,这得多上路跑跑,各种路段都跑过了,各种停车场都停过了,自然就是老司机了。

其实这也是学STM32最佳的方法,芯片内部虽然复杂,涉及几百个寄存器,但我们只是使用者的角色,想用起来,只要把库学明白,就可以了。

剩下的就是不断做项目,把它应用在各种领域,等经验丰富了,再回过头来深究,很多以前想破脑袋都想不明白的,就扩然开朗了。

下面聊聊先学标准库还是HAL库的问题。

虽然现在ST对于新型号,不再提供标准库了,但这么多年了,我一直用标准库在做产品,因为不一定会用到最新型号,像STM32F103C8T6,用得很多。

对于工程师来说,最忌讳的就是重复造轮子,所以这些库,我们一经在项目中验证,就不会随便去改,免得出问题给自己找麻烦。

我对Cube其实没啥好感,大概6,7年前,想尝试下用stm32cubeMX会不会更方便,没配置好,然后把我桌面的东西全删光了,工作都差点丢了。

我觉得这是一个BUG,哪怕用户操作再不对,也不应该删用户的东西。

不知道现在还有没有这个问题,反正我一直没用过,一直在用标准库。

我觉得学标准库还是Hal库,并不重要,库的底层处理逻辑都是一样的,都是通过配置寄存器使用外设。

标准库更直观,更接近硬件,代码执行效率更高。

HAL库跨芯片兼容性更好,一些错误的处理更完善。

如果为了就业,可以先学标准库,如果为了做项目,可以直接学HAL库,开发效率更高。

不同的库只是代码封装形式不同而已,不管怎么封装,对应的外设,都是配置那几个参数,比如GPIO有端口、引脚、速率、模式等。

本质你还是把编程功底打扎实,因为库里面涉及到大量的位运算、结构体、枚举、指针、回调函数这些。

你把玩熟了,不管什么库,都能很快地适应。

想提高编程功底,还是得多做项目,多接触一些优秀的代码思维和架构,而不是反复地去看基础教程。


最近很多粉丝问我单片机怎么学,我根据自己从业十年经验,累积耗时一个月,精心整理一份「单

片机最佳学习路径+单片机入门到高级教程+工具包」全部无偿分享给铁粉!!!

除此以外,再含泪分享我压箱底的22个热门开源项目 ,包含源码+原理图+PCB+说明文档 ,让你迅速进阶成高手

教程资料包和详细的学习路径可以看我下面这篇文章的开头

单片机入门到高级开挂学习路径(附教程+工具)

单片机入门到高级开挂学习路径(附教程+工具)

单片机入门到高级开挂学习路径(附教程+工具)

相关推荐
-Springer-8 小时前
STM32 学习 —— 个人学习笔记5(EXTI 外部中断 & 对射式红外传感器及旋转编码器计数)
笔记·stm32·学习
LS_learner8 小时前
树莓派(ARM64 架构)Ubuntu 24.04 (Noble) 系统 `apt update` 报错解决方案
嵌入式硬件
来自晴朗的明天9 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT9 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠9 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠20 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg20051 天前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT1 天前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen1 天前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制