电子产业一站式赋能平台

PCB联盟网

搜索
查看: 155|回复: 0
收起左侧

学STM32选标准库还是HAL库?

[复制链接]

269

主题

269

帖子

1540

积分

三级会员

Rank: 3Rank: 3

积分
1540
发表于 2024-10-29 11:08:00 | 显示全部楼层 |阅读模式
关注公众号,回复“入门资料”获取单片机入门到高级开挂教程
开发板带你入门,我们带你飞

文 | 无际(微信:2777492857)
全文约1945字,阅读大约需要 5 分钟
我学STM32的时候,stm32cubeMX还没推出,HAL库还没出来,主要以标准库为准。
下面讲下我学习STM32的经历,从陌生到应用到项目大概花了2-3周,相信99%的人都能通过这种方法,快速把STM32玩起来。
我是项目需要,才接触的STM32,也是基于同事的介绍,在此之前用的是NXP单片机,需要手动配置寄存器,ARM7的单片机,不要说自己去配置了,光看以前工程师配置好的代码,头皮都发麻。
同事说STM32不用自己配置,价格也很有性价比,正好接了个外单,是做太阳能热水器的控制板,主控芯片我就选了STM32。
项目也比较急(其实那个老板也不急),主要是我想快点做完,赶紧拿钱,做外单这种事,耗的时间越长越亏。
现在这个项目的屎山代码还在,2012年做的了。

mlbzhp2p31i64063043651.png

mlbzhp2p31i64063043651.png

   
那会浮躁啊, 一心只想快点把项目做出来交差。
所以根本没心情像以前学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有端口、引脚、速率、模式等。   
本质你还是把编程功底打扎实,因为库里面涉及到大量的位运算、结构体、枚举、指针、回调函数这些。
你把玩熟了,不管什么库,都能很快地适应。
想提高编程功底,还是得多做项目,多接触一些优秀的代码思维和架构,而不是反复地去看基础教程。
end

qvw03dnmrz264063043751.jpg

qvw03dnmrz264063043751.jpg

下面是更多无际原创的个人成长经历、行业经验、技术干货。
1.电子工程师是怎样的成长之路?10年5000字总结
2.如何快速看懂别人的代码和思维
3.单片机开发项目全局变量太多怎么管理?
4.C语言开发单片机为什么大多数都采用全局变量的形式
5.单片机怎么实现模块化编程?实用程度让人发指!
6.c语言回调函数的使用及实际作用详解

7.手把手教你c语言队列实现代码,通俗易懂超详细!

8.c语言指针用法详解,通俗易懂超详细!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表