为防止读者误解,首先申明一点,我不是大佬,亦不是大神,只是众多单片机学习者中的一员而已。我写此文的目的主要是记录自己学习的过程,并借此为一些初学者提供部分参考,或许能让初学者少走一些弯路。
从小我对电子器件有比较浓厚的兴趣,特别是对那些会动的电子玩具更是好奇,好奇它为什么会动,好奇它为什么能无线遥控。但小学、初中、高中的课本无法为我解答,唯一接近的就是物理课了,所以我学的很认真,不为别的,只因它能满足我的部分好奇心。兴趣是最好的老师,或许就是如此吧。
相信很多对电子感兴趣的读者都拆过不少东西,玩具汽车、坏音响、坏DVD……只要你认为它没用了,就会想拆开看看里面是什么构造。但是当你拆开之后你会发现都不认识。唯一可能熟悉的就是电机或者一个喇叭了,但是喇叭这种东西,在什么都不懂的情况下是很难让它发出声音的,更别说让它播放优美的音乐了,所以小时候玩的最多的就是电机了,因为你只要给它供电,它就会不停地旋转,你可以用它打洞,做小车、小船,非常有意思。小时候的我觉得电机是最好玩的东西了,看到家里的DVD、VCD有问题了,就想着能不能拆个电机出来玩,现在想来还真是败家啊。
但是随着年龄的增长、学业的加重,越来越没有心思去玩这些小玩具,而身边也没有人懂,只能将这些东西深埋心底了。但庆幸的是我考上了大学,并加入了实验室,有机会接触到不一样的东西。
犹记得刚进入实验室的时候,在书柜中看到一本关于51单片机的书,很是好奇。不是对内容好奇,而是书名,因为从来没有见过以数字作为书名的书。这就是我和51单片机的第一次见面了。
后来实验室开始对新生进行培训,才渐渐地知道原来世界上还有单片机这种神奇的东西,而随着更深入的学习,才知道这种技术已经发展了几十年了。
当时培训使用的是STC12C5A60S2,听说它是51内核,和51单片机兼容。但是51是什么,内核是什么,我都不明白,但是我想学,我想让它为我点灯,也想用它制作一个电子闹钟(这是我加入实验室的一个目标,现在想来这个目标好低级啊)。所以什么都不懂的我开始跟着学长学习,学习C语言,学习单片机技术。
没有任何基础的小白学习这些东西是很痛苦的事情,就像是让一个完全不懂英语的人去写、去说一样。书上的字倒是都认识,但是连起来就不知什么意思了,还有各种技术名词更是加大了学习难度。电平是什么?高电平、低电平又是什么?为什么不说电压,而说电平?FLASH是什么,RAM又是什么?串行、并行数据?总线?端口?I/O口?……这些名词都要一一弄个明白,否则一句话读下来你根本不知道是什么意思。还好当时自己还知道通过手机上网搜这些东西(幸好以前会用手机搜小说看),否则根本不知道该怎么办才好。
正因为零基础,所以需要付出比别人更多的努力,特别是对我这个连电脑都不怎么会用的人来说更是如此。高中有一段时间沉迷于游戏,虽然不是网游,却也无法自拔。所以下定决心不再玩游戏了,但也正因为如此,我对电脑可谓一窍不通。记得当时学习新建工程的时候,我都不知道要把一个个文件放在一个文件夹里面,所以总是把学长的电脑桌面弄的乱七八糟的。而当我学习了新建文件夹的时候,却总会忘记文件夹所在的路径,所以又得重新来过。因此我在学习单片机技术的时候,要克服的不仅仅是技术问题,还有电脑的操作问题。
为了学习单片机技术,学长要求安装两个软件,一个是KEIL,一个是Altium Designer。但是对于我这个电脑渣渣来说,也是难为我了。不知道该如何安装,更不知到该如何破解。同学说安装软件只要一直点“Next”就可以了,但是我点了几次后发现“Next”变灰了,点不了了,只能请同学帮忙。后来看同学操作才知道,还要同意协议、填写信息之类的才行。后来勉勉强强记住了吧,又发现还要破解软件,但好好的一个软件为啥要破解啊,我也不懂,更不要说动手去破解了,所以又只能请同学帮忙。为了安装这两个软件我可是吃了不少苦头,特别是Altium Designer,因为它的安装时间太久了,但后来我发现对于一个单片机软件开发者来说,这个软件根本就不需要好吧。
大一的时候没有带电脑,所以只能借实验室的电脑学习。而这些软件又是学习的必备软件,所以我就暗自记下安装步骤,并用图书馆的电脑尝试安装。经过多次练习总算记住了。现在想来其实自己很傻,当时如果有写笔记的习惯,直接截图,然后把安装过程记录下来就可以了,干嘛要用脑子去一遍遍的记啊,而且就算记住了,到现在也忘记了啊。事实上上网搜教程也是不错的选择,但对于我一个电脑小白来说,根本就不知道这些东西网上是能搜到啊。
当时下载单片机程序采用的是STC自己开发的一款软件,一直下载不了,问了同学才知道原来还有一个驱动需要安装。但是驱动是什么我又不知道,因为在我的概念里只要把软件安装上了就可以使用了啊,为啥需要驱动。后来上网搜了驱动是什么,但是也没看出个所以然来。
在学长的带领下,磕磕碰碰的学习着51单片机,因为还要学习C语言,所以学长就推荐谭浩强的C语言程序设计那本书。虽然书上的内容现在看来确实很不错,但以我当时的水平来看确实很难理解,所以这本书在前期并没有啃多少,因为根本啃不动啊。
真正让我的单片机学习之路步入正轨的恐怕是郭天祥的《十天学会单片机》视频教程了。当时没电脑,而实验室有些电脑很少有人使用,所以我看到空闲的电脑就会打开来学习。刚好在其中一个电脑的文件夹中看到了一大堆视频文件,打开一看,才知道原来是51单片机的视频教程。当时特别兴奋,因为之前在学长的带领下学习实在是困难重重,很多东西都不懂,又不好意思问(因为问题实在是太多了),所以特别需要一个非常系统的基础视频帮助我入门(如果有一个前辈就更好了,但哪有这样随叫随到的前辈供你请教呢?)。因此当我看到这个视频后,我就把所有的重心都放在视频学习上了,虽然我不能直接向郭老师提问,但是他确实是从非常非常基础的东西讲起,对于我这个菜鸟来说,也能听懂个80%,这就非常不错了。而且视频可以反复看,看完了之后还能跟着视频写代码,非常不错。
在视频中学习时,郭老师一直在说看第几页第几页的,一直没听明白,看了好几集视频才知道原来这个视频还有配套的书籍,也有配套的开发板,所以果断买了一本正版书籍(稍微提一句,书籍和开发板加起来的成本对于学生来说可能有些高了,可以买二手的或者盗版的书籍,当然最好买正版的,毕竟郭老师花了很多心血。而开发板可以买其它公司生产的,核心都一样。当时我们实验室自己设计了一个卡片大小的51开发板供我们新生学习,非常不错。当然也因为和视频中的开发板不同,所以跟着视频学习的时候必然会增加不必要的困难,不能照搬代码,但也因此能学习的更加深刻)。这样一来我的学习资源总算是完整了。一边跟着视频学,一边将书本上的内容看懂,最后通过开发板实际操作一遍,这样互相对照,自我感觉学习效率还是可以的,能明显的感觉到每天都在进步。而也正因为有这样的学习经历,所以我一直建议初学者要以视频学习为主,因为视频学习更直观,能让人更快的了解陌生的事物,否则任你说的天花乱坠,我不能在脑海中建立直观的感受又有什么用呢。
但是视频学习也要选择比较有名的才好,毕竟网上的资源层次不齐,好的视频资源能让你事半功倍,庆幸的是我一开始遇到的就是郭老师的视频教程,否则我的单片机学习之路可能会更加艰难吧。而直到现在,我也一直将视频保存在我的网盘中,因为经典值得收藏。
当我花了半个多月时间将视频教程完整的看完一遍后,对于单片机也就有了初步的认识,而点灯、数码管、定时器等知识也都齐备了,觉得是时候完成我的定时闹钟程序了,所以就开始构思我的闹钟程序了。事实不应该叫构思,只是走一步看一步罢了。虽然当中遇到很多的逻辑问题,也没有掌握很好的调试方法,但因为这个程序功能实在是太简单了,所以还是只花了一个星期时间就通过自行思考解决了所有的问题。而也正因为所有的问题都是自己利用C语言知识自行解决的,并没有向学长求助,所以对我理解C语言知识具有非常大的助益,也是我一直以来把这个程序当做我入门C语言的标志(单片机的入门标志应该是从点亮第一个灯开始的吧)。
实验室对于大一新生处于放养状态,没有人会管你,全靠你的自觉。记得当时有80多新生一起学习,但最终留下来的不到十人,而这十人之中大部分是我们班的(我们是特殊班级,理论少,实践多)。而我能坚持下来的很大一部分原因是因为兴趣,所以当我成了学长,成了大一新生能否进入实验室的面试官的时候,我都会从侧面去观察、了解这个人是否对这个感兴趣,因为我知道,在实验室这种开放的环境下,是否被淘汰取决于自身,而不是实验室。但我还是会给新生一个机会,因为有的时候,兴趣是可以培养的,所以我面试的大部分人都是通过了的,只有一些目的不纯(为了比赛证书)或者态度不好的人才不让他通过。
用了一年时间的时间学习51单片机知识,很多东西并没有完全弄明白,但周围的同学都开始学习STM32单片机了,所以我只能放下51单片机,开始学习更高级的STM32。现在看来这个选择是对的,因为不是所有的东西都一定要弄得清楚清楚的,觉得差不多的时候就该换更高级的东西学习。记得曾经看过这样一个小故事,一个音乐家教人弹琴,开始的时候是很简单的乐谱,在学员弹了一段时间后,虽然弹的不是很好,但这个音乐家还是换了一个更难的乐谱,学员不明白,但还是跟着学习了。过了一段时间,在学员没有练习好的情况下,音乐家又拿了一个更难的乐谱叫学员弹。一段时间后,一个学员忍不住问老师这是为什么。音乐家直接拿了最开始的那张乐谱叫他们弹奏,发现他们弹的特别流畅。这个道理或许和单片机学习是一样的吧,虽然我没有将51单片机所有的东西都弄清楚,但是学了这么久的STM32后,51根本不成问题。事实上现在的我也应该转向更高级的Linux学习的,但是因为现在工作需要,而STM32的很多东西在Linux中也会有,所以还是在STM32领域继续深耕了,不过时间也不会太久。
熟悉我的人都知道我最喜欢《凡人修仙传》,因此我将自己的学习之路也按照修仙界的等级进行了划分:大一刚接触单片机,只是一个凡人,后来因为完成了闹钟程序,算是进入了练气期。在大三的时候完成了一小项目,算是磕了一枚筑基丹,进入筑基期,而筑基期是一个门派中最为重要的力量,也能被人称之为前辈了,所以一般的工作问题不大。到了现在,因为又学习了不少新知识,算是进入了筑基后期,但是要突破金丹期,也只有靠Linux来助我凝结金丹了,任重道远。
作者:鱼鹰谈单片机