刚才我看到一个帖子,回答了一个单片机学习者的问题。但是我个人觉得这个问题比较有普遍性,想谢谢自己的经历,给那些爱好单片机,以及正在学习单片机的朋友们。
我大一的时候,就加入了学校电子实验室,学习51单片机,那个时候没日没夜的学单片机编程。从最简单的LED到后来的各种协议,用51单片机运用自如。后来上了大二,我记得那个时候正逢湖北省电子设计大赛,我有幸被选拔为参赛成员,由于大赛的规定,我不得不转入msp430单片机的学习。由于有熟练的51单片机的基础,所以在学习430的时候,上手很快。熟悉了430的寄存器,基本上就能够上手变成了,就这样,我学习了半年的MSP430单片机。
在学习单片机的同时,自已学习电路以及PCB的设计,从基本的模块到整个大的系统,自己都尝试做PCB。可以说PCB是我一直坚持学习的。从大一到大四,以至于现在我仍然设计一些PCB,但是相比于学校的,公司里面的更为复杂,要求更为苛刻。因为涉及到高频PCB布线,我就不详述了。总之,学习单片机的同时,硬件也在步步跟进。自己做开发板,自己做一些小玩意。
后来,玩430觉得不过瘾,又买了PIC和AVR的开发板学习,可是学来学去,总是那么几个模块,那么几个协议。后来我自己尝试着做了一套AVR的开发板,花了一个暑假的时间,调通了所有的配套模块。当时是在大二下学期的时候,当时还准备把开发板发到淘宝去卖,后来发现,淘宝各种类型的开发板太多了,生活费都赚不来,所以,我把我那些开发板都分给了我的学弟们。后来想学习高速PCB设计,那时候有幸认识了黄文聪博士,是带我进入高频PCB设计的老师,不是他,或许我还永远停留在altiumDesigner的层面,在黄老师的指导下,我学习了cadence以及allegro PCB布线,学习了各种布线要求,以及DDR布线技巧,等长约束等各类约束技巧。以至于后来我大学找工作跟面试官谈起allegro 高速布线,面试官都有些诧异。
后来有幸认识了学校的一个教授,那个时候正是STM32正火热的时候,我第一次接触STM32,感觉很兴奋,当时学的STM32F103能够倍频到72M,当时学习用STM32驱动摄像头等各种模块,因为当时有一个小项目是做视频采集的。所以用51或者430基本上力不从心,速度太慢,刷屏超级慢。所以,我投入了很多精力去学习STM32。从基本的GPIO到各种协议的驱动。都一遍遍的看代码,写代码。那个时候有点傻,第一次学习STM32的时候,竟然是用寄存器编程的。那次写一个ADC的程序,光寄存器就是有好几十个。现在想想,悔不当初,用库开发又快。但是转念想想,学了寄存器也挺实用的。至少现在用库开发的时候,知道寄存器里面是怎么配置的。从大三上学期学习STM32一直到现在,敲过的代码不算少了。但是我总觉得还差点什么。
是的,还差点什么?我在大三的暑假的时候,在与带我的教授聊天中,我知道差点什么了。那就是算法,单片机的核心不是说你能如何熟练的玩转单片机。如何的熟悉每一个寄存器,每一个寄存器的地址。这些都不是的。我后来总结了一下,无论是51,,40,avr,pic,stm32。我们学习的时候,一开始就是点亮发光二极管。后来就是学习I2C,SPI等各种外设。但是驱动这些外设真的不难,有参考代码,有官方的数据手册,这一切都不是问题。特别是我现在工作之后,特别能体会到这点,单片机种类不限于多,在于算法的精。在公司,用什么型号的单片机,完全老大说了算,今天选飞思卡尔,明天用LPC的,后天又用英飞凌的单片机。等等,大学时间有限,你如何能学完所有单片机。单片机种类和型号那么多,你如何能记住全部的寄存器?
再谈谈找工作吧。
当时我满以为我精通4大单片机,4-6层PCBLayout,找工作应该很顺利吧?可是,却也有不尽如人意的时候。我面试的第一家公司是CVTE,广州视源。那待遇是没的说,我当时带着自己厚厚的一本项目集,第一轮面试的时候,我把项目集交给了面试的HR,面试竟然很顺利的通过了。大家都知道CVTE的要求之高,后来我如约收到了CVTE的专业笔试短信,我后来专心准备了一番,功夫不负有心人,笔试竟然过了,笔试考试的全部是模拟电子方面的内容,后来我在专业面试环节挂了。面试我的应该是一名技术大牛,跟我谈了很多的技术问题,我当时还自我感觉良好。最后一句话让我记忆深刻:我觉得你专业技术运用的不够灵活,就这样,我被淘汰了。
之后,我又应聘了台达,应聘的方向是做电源。笔试面试都过了,后来连三方协议都签了,最后我还是违约了。我拒绝了台达,因为后来我发现,不是提供的研发岗位,只是跟我说以后能转研发岗位。我觉得不靠谱,就拒绝了。
后来又陆陆续续面试过几家公司,有人家不同意我的,也有我不满意企业的。就这样来来回回折腾了一个月。由于找工作非常疲惫,当时打算,有研发岗就去。就这样,当时广州数控来武汉理工开宣讲会,我去投了简历,简历上明确写了岗位意向是研发岗位。后来如愿与广州数控签约了。 工作中,经常要设计PCB以及各类模块的调试,有的时候一些底层的代码也要自己写。但是单片机型号就不固定了。各种型号的都有。现在想起来,以前在学校的时候,把太多时间浪费在各种类型单片机的学习中去了。但是另一方面,各种类型的单片机的学习,增加了你在找工作中的筹码。
工作了这么久,想写点心得给未毕业的学弟们,也是我以前认识的一些误区,分享一下。
1、MCU学的种类不在于多,在于精,再设计过程中,什么样型号的单片机都可能被用到,在我看来,只要是不涉及加载系统的,单片机都一回事,从基本的51到ARMv7,没有本质区别。无非是资源的多少,处理速度的问题,以及开发调试便利性的问题。
2、要非常熟练基本的
通信协议,了解本质和原理,I2C、UART、SPI、CAN、485等等这些最最基本的协议。不要纠结于是调试飞思卡尔某型号的SPI,还是STM32的SPI,亦或是MSP430的SPI等等。
3、扎实的C语言基础,多把时间花在对C语言深层次的理解上,说实在的,用51单片机点一个LED,和你用ARM点一个LED,没有区别。切莫成为“一灯大师”。掌握单片机语法和算法,是最重要的。我记得以前在大学,单片机种类自学了很多,基本的51单片机、AVR,MSP430,PIC16F,STM32,现在想想,学的有点过了。单片机种类真的不是问题,重要的是算法。
4,模拟电子和数字电子,这个是最最基本的必须要掌握的。不要局限于课本,课本的知识只能应付考试,在工程设计中,课本上的内容完全不够用,建议买一些小日本或者美国佬编写的模拟电子的书。
5,说到设计PCB的软件,入门用AD,想升级的使用
pads或者Cadence。如果还有用
protel的,趁早转AD或者PADS。AD适合2-4层低速电路板设计,PADS在
手机主板设计领域比较多(以前华强北的手机主板基本都是PADS画的),至于Cadence,中兴华为联想小米等公司现在主流设计软件,就不多说了。
最后我想说的是,学好技术,不会说工作不好找的。待遇不会差的。在大学里,不要太沉迷于单片机的设计,如果有精力,转嵌入式设计,或者安卓开发。这个以后是很好的发展趋势,需求量也大,我找工作那会,安卓开发人才急缺,如果你觉得搞安卓开发和嵌入式linux做不来,那就老老实实学好单片机和模电数电等硬件软件开发。
41