Go最新如何系统地入门学习stm32?_stm32学习方法(3),学生会面试题选择题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

STM32对刚入门的不是那么友好,但是对有一点开发经验的,还是能大大缩短开发周期的。

那新手要如何去学习STM32呢?无际根据自己的经历总结出最有建设性的学习方法,如果你能适应这种学习方法,1周搞定stm32绝对没问题!

1. 改变思维

当你有系统学习stm32的时候,就注定你会走很多弯路,甚至浪费很多时间最后也学不会。

因为内部结构越复杂的单片机,你学习需要花费的时间就越多。

但是你有没有想过,你学单片机的目的是什么?

肯定不可能只是为了学单片机这么简单对吧?而是通过单片机来做产品,或者说DIY一些有趣的项目。

人的一天真正高效工作学习的时间或许8小时都不到,我们怎么利用好这8个小时直接决定你和别人的差距。

比如说我做一件事,我会拆解完成这件事我要做哪些工作,然后把最核心的环节拿出来优先做,就像做产品,先实现功能再优化细节。

同样的方法用在学习stm32也很合适,stm32在整个产品当中其实只是一个工具而已

既然是工具,那当然是能用起来就行了,无非就是用芯片的外设而已,你系统的去研究它干嘛?

2. 正确学习姿势

我一直都比较提倡新手从51单片机学起,把精力放在c编程和培养项目思维上,与其有空去深挖单片机,还不如多做几个项目。

我刚开始是使用stc的芯片做过几个项目,然后产品需要接触到stm32。

我先把产品需要用到的单片机外设整理出来,再买一个开发板,然后把我要的外设先在开发板上跑一遍。

同一个例程我会改一些参数,比如说换个引脚、换个定时时间、换个串口,换个ADC通道,DMA通道等等。

大概知道知道怎么配置以后,我就不会再去研究别的功能了,比如内部时钟树架构,USB、CAN、FSMC这些。

照样不影响我把产品做出来,慢慢地我经验也丰富了,对stm32也熟悉了,就是这么自然而然的过程。

3. 最后总结

一个新鲜事物,我认为正确的顺序应该是先用起来,用熟了你再去研究它原理会事半功倍。



不要去学STM32。

我不是说STM32不好,而是这种为了学习单片机而去学习单片机的思路不对

你问,如何系统地入门学习stm32?

本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习

你要考虑的是, 我可以用stm32实现什么

为什么使用stm32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多?

当你需要使用stm32某些功能,而51实现不了的时候, 那stm32自然不需要学习,你会直接去寻找stm32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等…

关于寄存器vs库

我的观点是:当你debug的时候寄存器很重要,当你需要理解芯片工作细节的时候寄存器很重要,当你开发的时候寄存器不重要。如果你没有遇到非直接配置寄存器不可的情况,那么就不要直接面向寄存器层面开发, 因为面向寄存器开发获得的好处往往抵消不掉这样做的坏处。 面向寄存器开发程序效率高,但是你需要为了提高0.01%的效率浪费10倍、乃至100倍的时间。 既然ST公司已经给你提供了好用的库,没有道理要重新造轮子。

那什么时候必须直接控制寄存器?

第一、某一个代码块调用非常频繁。比如你有一个巨大的for循环,那么这个for循环中的每一步操作都应该被谨慎的优化,优化良好就可以获得更好的性能。这种情况一般常见于图像处理相关的代码中。

第二、库函数有bug。这个遇到的概率非常低,但确实存在。不过一般来说如果mcu表现出预料之外的行为, 你首先要想的应该是你的代码写的有bug,而不是库函数有bug。 如果库函数真的有bug,你去google搜一下,相信你绝对不是第一个踩坑的人。

对于传统的电子工程师来讲,使用库编程可能会感到有一点虚,感觉没有脚踏实地的感觉。 但如果你写过web、写过服务器端代码、写过桌面端代码的话,你就一定会理解API、封装、抽象的意义。



讲一下个人经历,大学学习51的时候无意中发现了stm32的程序,哇,好厉害,好多io,好多寄存器,让后把各个例程都抄了一遍(主要部分),分析一遍功能是如何实现的,分析库函数,找到具体的寄存器实现,与芯片手册一一对应,果然一个不差,从此整个人对嵌入式软件开发感觉就不一样了。

之后买了个开发版,都没怎么用,感觉源码都是现成的,不用跑都知道结果,懒得调了,玩游戏去了。

再之后学了ad软件,学校就教一些基本用法,学的云里雾里,直到毕业找工作,没啥实际经验,碰了几次壁,虚了,毕业设计做个电路板充数吧,翻出以前开发板文件找到了原理图文档,查芯片,阴差阳错在网上找到了stm32元件库文件,一番折腾还真画出了一个stm32f103rbt6系统板,虽然只有最小系统,电源模块和几个接口引出,但经过买元件,投板,焊接,并最终将程序下载成功后,心情还是非常激动的。这也是我硬件开发一个开始。

之后拿着板子招摇撞骗,总结应聘经验,成功混入一家做stm32的初创企业,在这里,我才明白了stm32软件调试的困难所在,不仅仅是外设,而是多个外设共同协调工作,也有诸如lwip,ucos这些大的源码进行分析,想起以前抄程序的自己,咬咬牙,继续一点点进行分析。

再之后,往电子行业深处学习,学习多层板,高速电路的设计,技术看上去高深莫测,但我曾经自己就把stm32整出来了,这些肯定也能行。

现在,还在寻求发展机遇,但我每一份简历的第一句话永远都是:精通stm32单片机开发。



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

img

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

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

img

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

img原子教你玩STM32(库函数版 第2版)京东¥58.60去购买

imgSTM32库开发实战指南(第2版):基于STM32F103京东¥71.00去购买

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

  1. STM32的时钟总线,哪些外设都挂接在哪些时钟线上尽量要清楚;
  2. STM32的时钟树结构/分频设置。我承认很难理解,但是多看几遍多画几遍基本都没啥问题。
  3. STM32的GPIO管脚重映射,复用概念必须弄清楚。
  4. STM32的中断分组,分级管理机制。
  5. STM32的最小系统搭建,配置必须明白。最好能实现开发板的自主移植。

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

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

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

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



如何系统地入门学习STM32?

假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。

你要考虑的是, 我可以用STM32实现什么?

为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多?

当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用Zrtos等等。

img

从菜鸟到牛人的学习步骤

我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档(在文章底部留言即可送网址),以获取最基本的知识点。

英文好的同学,请不要以为你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,建议看英文原版还是有好处的。

STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。翻译了大量的英文文档,迎合了国内的很多工程师的思维。

学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》(在文章底部留言即可送网址)。这是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。

阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。

后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。比如在使用AD的时候,就需要去阅读第10章ADC。其他不举例。相信每个初学者都有自己的研究方向和判断。

阅读《STM32固件库使用手册》,主要是为了简化编程。STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。当然,我们也可以不去碰这些固件库——传说使用它会使得代码效率变低,是有道理的。网络上也出现了很多网友自己写的代码,没有使用带固件库函数。如何取舍,在于您的选择。

这里我主要强调的是,阅读《STM32固件库使用手册》的时候,前面几章也是必须阅读的。比如第一章文档和库规范中的命名规则,编码规则,这些都是需要注意的。第二章是最关键的,希望大家熟读。第二章描述了固件库的架构,我们如何去使用固件库的步骤等。有了第二章的基础,我们就可以借助固件库写出自己的代码了。第四章开始之后,就可以根据大家的需要来阅读。实际上,后续的章节,都是描述某个模块有什么什么函数,每个函数如何使用等。

关于后面的章节,建议对GPIO库函数、中断部分库函数、复位和时钟设置的库函数要比较熟悉,因为平时经常会用到。

以上提到的这两个文档,已经足够您看的了,呵呵。希望您能从中获取大量的STM32基础知识。

设定一个不错的两周入门计划

(1)这里所谓的“入门”,指的是能理解并掌握一些常用的STM32外设,真正想掌握一款处理器,两周根本说明不了什么问题。只能说,你已经有所了解了。但是,这对我们初学者来说已经足够了。

(2)这里所谓的“两周”,根据每个人的时间安排不同而不同。

如果您每天有充足的时间学习,那么可以规定自己尽快地能独立地进行简单的STM32开发。

如果您每天只有业余时间来学习STM32,建议根据您的具体情况安排时间。毕竟计划时间如果安排太紧,反而收不到良好的效果,只能进入恶性循环,这是我们要避免的。

但是建议,不管您有无充足的时间,都必须给自己做一个计划!

我这里列出一个思路,仅供参考

步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM(MDK)、ISP(如果需要从串口下载的话)。这些软件安装的详细步骤,可以参考我们推出的相应教程进行。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-1715895166661)]
[外链图片转存中…(img-WMbAszxF-1715895166661)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值