如何自学stm32

答主作为在嵌入式开发领域奋斗了十多年的老兵 , 其中STM32单片机可以说用得非常多 。今天看到了题主的 , 正好借助这个机会,回顾一下自己是如何开始上手STM32到开发产品的 。希望我的经历能够给大家学习STM32有所帮助和启发 。

如何自学stm32

答主从本科开始接触C51单片机开始,算是正式入行了嵌入式MCU开发的道路 。参加校级的电子设计大赛,因为赞助的原因 , 选择了当时新款的凌阳单片机做了一款智能语音声控门锁 。攻读硕士期间,虽然主要的横向项目都是以西门子/欧姆龙PLC+Intouch/组态王+HMI为主,但是依然还是在课余利用TI的MSP430单片机制作了两款GPS定位和GSM数传产品,并进行了产品化的尝试和探索 。毕业加入到华为公司以后,任职嵌入式的软件驱动开发工程师 。接触了大量的海思自研和各类主流的MCU+SOC芯片,嵌入式Linux能力有了很大的提高 。但是没有接触当时最流行的STM32 。
后来从另一家外企跳出来和别人自主创业,研发基于STM32的视频处理器 。那是我第一次开始真正地接触STM32 。所以说STM32完全是靠前期的MCU基础和编程基础 , 经过项目的历练自学成才的 。同时,我也根据自己的STM32学习经历,整理出MCU软件入门过程的思维导图 。
如何自学stm32

答主当时因为已经具备多年的C语言编码经验,也熟悉多款MCU的基本原理 。使用全套正点原子的教材和开发板 , 并结合一本STM32的配套教材及芯片手册(好多页哇)进行了STM32的学习 。所以前期的MCU的理论基础和KEIL软件的学习使用,进展得很顺利(此处我设定的第一目标是实现最小系统的运行和移植,所以进展很快) 。这里对于基础知识 , 提醒新手朋友们一些细节的地方必须弄清楚明白 , 否则后面使用库函数的时候很容易弄混乱:
  1. STM32的时钟总线 , 哪些外设都挂接在哪些时钟线上尽量要清楚;
  2. STM32的时钟树结构/分频设置 。我承认很难理解,但是多看几遍多画几遍基本都没啥问题 。
  3. STM32的GPIO管脚重映射 , 复用概念必须弄清楚 。
  4. STM32的中断分组,分级管理机制 。
  5. STM32的最小系统搭建,配置必须明白 。最好能实现开发板的自主移植 。
当学完了基本的STM32最小系统之后,在完成了原子精英板的移植后,我又将stm32的最小系统在我们的产品验证板进行了移植和运行 。从而完全掌握了STM32最小系统和基本STM32代码开发流程(其实主要是STM32库函数的使用) 。
【如何自学stm32】
虽然刚开始被STM32的时钟树和中断分级分组搞得有点郁闷,但是攻克了最小系统后还是让我有了更大的信心和动力 。由于创业嘛,没有时间给你充分学习 , 我只好发挥硕士搞科研时候的老办法:拿来主义,用到那个外设就马上研究这块,参考书+芯片手册一起入手 。这样我基本对同一个外设需要看三遍不同的讲解 。IIC(连接视频处理芯片控制用) , SPI(外接存储),DMA(视频数据传输),定时器(OSD调整和红外遥控器解码分析),USB驱动……一个一个模块的啃下来,我发现其实STM32真的是一款性价比很高的MCU 。另外:此处没有提到ucos , 因为在华为的时候就掌握所以ucos的STM32移植和开发并没有耗费太多时间 。同时,学完一个部分的基础知识和代码编程,我肯定要在精英板和开发板做两遍实验才叫合格 。
所以,从答主个人的经历和快速上手的角度来讲,STM32在学习完最小系统后,最好用到哪块学习哪块,毕竟知识的记忆都是遵守记忆曲线的 。总体来说 , 我个人的STM32的学习,完全是按照我上面的思维导图 。从基础->实践,最好以项目或者开发目标为指引 , 这样自学起来会更加目标聚焦动力充足 。
要想学好STM32,不仅仅需要学好程序设计,还要具备一定电子电路的知识 , 不需要太深,对上拉、下拉电阻,LED灯、三极管这些有一个基础的认识就行 。
其次就是要对C语言有一定的理解,不需要太深,把基础语法搞懂了就行 。后期遇到不会的可以直接翻书,这样效果最好 。
如何自学stm32

电子电路
STM32属于COMS集成电路,除了要掌握基本的《模拟电子技术》之外,还需要对《数字电子技术》有一定的了解,比如门电路、触发器这些,一定要明白他们的工作原理 , 才会清楚单片机的工作原理,这样你也会明白软件是如何控制硬件的 。
学习数电的话,最直接、有效的是去看《数字电子技术》这本书,但是要有耐心 , 因为看书很枯燥,这书讲的很正式,很多时候不容易理解,所以我们针对单片机、电子设计这些专门建了一个付费群,资料一直在更新 , 有兴趣的可以私信我们这边 。
如何自学stm32

库函数
有的小伙伴想速成,想直接学STM32的编程,不想学那些电子有关的可以吗?
答案是完全可以的,即使不懂那些电子知识,你也可以学会STM32 , 用STM32开发项目,只不过这样对STM32的工作原理理解的不够到位,如果有时间的话,建议小伙伴们一定要把电子基础学了,再来搞单片机 。
如何自学stm32

学习STM32编程,有两种方式,一种是传统的编程方式:寄存器操作 , 另一种是:库函数操作 。在这里我建议大家用库函数操作,因为STM32的寄存器太多了 , 操作起来不方便,浪费时间 , 编写项目程序还得花大把时间去翻阅数据手册 。
因为库函数把这些寄存器都封装好了,我们只需明白这些库函数的含义,以后用到的时候直接COPY就可以了,大大节约了我们的时间 。
如果没有学过寄存器,可以先学习51单片机,这样你对单片机的寄存器有了了解之后,再来学习STM32,将使你快速理解STM32单片机 。

经验总结扩展阅读