学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+说明文档 ,让你迅速进阶成高手

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

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

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

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

相关推荐
FreakStudio4 小时前
全网最适合入门的面向对象编程教程:58 Python字符串与序列化-序列化Web对象的定义与实现
python·单片机·嵌入式·面向对象·电子diy
Tp_jh5 小时前
推荐一款非常好用的C/C++在线编译器
linux·c语言·c++·ide·单片机·unity·云原生
小狗爱吃黄桃罐头7 小时前
江协科技STM32学习- P40 硬件SPI读写W25Q64
stm32·江科大
inputA10 小时前
【LwIP源码学习4】主线程tcpip_thread
c语言·笔记·单片机·嵌入式硬件·学习
Whappy00113 小时前
6. STM32之TIM实验--编码器接口()--(实验5:PWM驱动直流电机)
stm32·单片机·嵌入式硬件
东芝、铠侠总代1361006839314 小时前
TOSHIBA 74VHC00FT COMS汽车、工业企业的选择
嵌入式硬件
银科院-计算机与人工智能18 小时前
单片机原理及应用笔记:C51数组与项目实践
单片机
WIZnet18 小时前
W55RP20-EVB-Pico评估板介绍
单片机·嵌入式硬件·wiznet·w55rp20·以太网开发板
极客小张19 小时前
基于STM32的实时监测环境系统设计:Flask、SQLite、Vue.js、HTTP/TCP技术
c语言·stm32·单片机·物联网·毕业设计·课程设计·python后端
Wx120不知道取啥名19 小时前
微控制器(MCU)如何运行存储在Flash的程序???
单片机·嵌入式硬件·mcu