如何系统地入门学习stm32?

如何系统地入门学习stm32?

答主在前面的很多关于STM32以及其他单片机相关问题的回答中,更多是根据个人的经历经验给出了抽象的方法论,现在想想可能真的过于抽象和难以理解。正好看到了题主的这个问题,正好那就借助这个机会,也来回顾一下自己是如何开始入手STM32,开发产品的。希望我的经历能够给大家学习STM32有所帮助和启发。

答主从本科开始接触C51单片机开始,算是正式入行了嵌入式MCU开发的道路。参加校级的电子设计大赛,因为赞助的原因,选择了当时新款的凌阳单片机做了一款智能语音声控门锁。攻读硕士期间,虽然主要的横向项目都是以西门子/欧姆龙PLC+Intouch/组态王+HMI为主,但是依然还是在课余利用TI的MSP430单片机制作了两款GPS定位和GSM数传产品,并进行了产品化的尝试和探索。毕业加入到华为公司以后,任职嵌入式底软驱动开发工程师。接触了大量的海思自研和各类主流的MCU+SOC芯片,嵌入式Linux能力有了很大的提高。但是没有接触当时最流行的STM32。

后来从另一家外企跳出来和别人自主创业,研发基于STM32的视频处理器。那是我第一次开始真正的接触STM32。所以说STM32完全是靠前期的MCU基础和编程基础,经过项目的历练自学成才的。同时,我也根据自己的STM32学习经历,整理出MCU软件入门过程的思维导图。

答主当时因为已经具备多年的C语言编码经验,也熟悉多款MCU的基本原理。使用全套正点原子的教材和开发板,并结合一本STM32的配套教材及芯片手册(好多页哇)进行了STM32的学习。具体如下图所示:

所以前期的MCU的理论基础和KEIL软件的学习使用,进展的很顺利(此处我设定的第一目标是实现最小系统的运行和移植,所以进展很快)。这里对于基础知识,提醒新手朋友们,有一些细节的地方必须弄清楚明白,否则后面使用库函数的时候很容易弄混乱:

当学完了基本的STM32最小系统之后,在完成了原子精英板的移植后,我又将stm32的最小系统在我们的产品验证板进行了移植和运行。从而完全掌握了STM32最小系统和基本STM32代码开发流程(其实主要是STM32库函数的使用)。

虽然刚开始被STM32的时钟树和中断分级分组搞的有点郁闷,但是攻克了最小系统后还是让我有了更大的信心和动力。由于创业嘛,没有时间给你充分学习,我只好发挥硕士搞科研时候的老办法:拿来主义,用到那个外设就马上研究这块,两本书+芯片手册一起入手。这样我基本对同一个外设需要看三遍不同的讲解。IIC(连接视频处理芯片控制用),SPI(外接存储),DMA(视频数据传输),定时器(OSD调整和红外遥控器解码分析),USB驱动......一个一个模块的啃下来,我发现其实STM32真的是一款性价比很高的MCU。另外:此处没有提到ucos,因为在华为的时候就掌握所以ucos的STM32移植和开发并没有耗费太多时间。同时,学完一个部分的基础知识和代码编程,我肯定要在精英板和开发板做两遍实验才叫合格。

所以,从答主个人的经历和快速上手的角度来讲,STM32在学习完最小系统后,最好用到那块学习那块,毕竟知识的记忆都是遵守记忆曲线的。总体来说,我个人的STM32的学习,完全是按照我上面的思维导图。从基础->实践,最好以项目或者开发目标为指引,这样自学起来会更加目标聚焦动力充足。

附上答主当年创业时候呆过的办公位,虽然时隔多年依然深深怀念那个时候的一切。虽然创业失败了,但是至少我们还有很多产品问世。也许他们一文不值却也饱含我们的努力和心血。至少我们曾经都年轻过并为理想奋斗过。

另外:答主一直在通过专栏记录的方式,完成个人的嵌入式技能栈知识的整理和总结。感兴趣的朋友有空可以来看看,一起来学习和体验嵌入式开发之美。

以上,仅仅是答主的个人学习STM32的整理和总结,因为答主在接触STM32前已经对MCU/SOC开发积累的一定的基础,所以跳过了一些知识学习步骤(比如了解单片机,比如C语言基础等)。新学习的朋友,请一定按照基础知识->动手实践的步骤,认真打好理论基础。通过设定一个一个的小目标,不断的激励自己,鼓励自己。学会STM32,真的不是问题!

以上,仅供题主参考。不喜勿喷。