我学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+说明文档 ,让你迅速进阶成高手!
教程资料包和详细的学习路径可以看我下面这篇文章的开头。