学习某个学科,踏入某个行业,佳的动力是兴趣,学习它能给你带来快乐,能够愉悦自己,也就能走的更远;稍次一点的动力是可以带来money,我们每个人都要生活的,赚钱是为了养活自己和家人,所以这个理由也是很充分的;也可以是周围的压力,别人都会,我也要会,补齐和别人的差距,这个范围就有点窄了。
在进入硬件这个行业的时候,更加注重进入的动力,因为它的特殊性,如果你们没有很好的动力支撑,很容易坚持不下来。
什么是嵌入式硬件?(硬件学习)
既然今天咱们的话题是如何学习嵌入式硬件,咱们有必要先了解一下什么是嵌入式硬件。硬件(电子产品),顾名思义就是看的见得东西,是相对于软件这种看不到的东西来说的,一般是指电子产品中的PCB及之上的电子元器件。嵌入式硬件,是硬件的一种,一般是指有微控制器及外部功能实现模块的硬件集合。现在这两种概念几乎相同。
目前可以说,只要是涉及到电子控制的行业,都会用到嵌入式产品,就会包含嵌入式硬件。
如何学习嵌入式硬件?
硬件学习实际上是一个很大的面,你需要学习的知识有很多,需要了解的面也有很多。
大体可以分为两部分:硬件和软件。
1、硬件基础。
学习嵌入式硬件,首先你需要有一定的硬件基础。基本的电磁物理定律,电路,数电,模电等需要了解。
学会使用一种单片机,不论是8位、16位或者是32位,学习单片机接口的应用,向UART、IIC、SPI、USB、CAN、RS232、RS485等。
应当熟练使用一种原理图PCB绘制软件,目前常用的软件有Altium Designer、PADS、OrCAD/Allegro,只要掌握其中的一种即可。
熟练掌握各种元器件的原理及电气特性,并依据此综合特性、成本、供应等各个方面进行器件选型。
好有一定的英语基础,会看各种芯片的数据手册(datasheet),会使用翻译软件看懂也是可以的。
还要有良好的动手能力,熟练使用各种调试仪器如万用表、示波器、逻辑分析仪等,还要会使用EMC测试仪器如雷击浪涌发生器、脉冲群发生器、静电枪等。一个硬件产品,各种电磁兼容实验是要过的。
还需要知道一些标准,这个就要要看你从事什么行业了,一般是看标准/标准,行业标准标,企业标准等。
2、软件基础
软件的要求稍微简单了就。一般嵌入式硬件所使用的是C语言,所以需要会用C语言调试你的硬件。如果是驱动方面,还要了解各种硬件接口的协议。
学习过程参考
如果是初学者,看到如此多的知识学肯定会大吃一惊,实际上完全不用担心,因为硬件学习是一个积累的过程,在应用中学习,用到什么学什么,当然提前储备更好,不容易错过机会。每一个优秀的硬件工程师都是经过时间积累练就的。
当然必备的基础知识还是要学的。如果你是零基础的话,C语言是要学习的,还要学习至少一种单片机的基本结构。C语言,你可以不用全部都学,基本的关键字熟记,基本语句会用,基本的数据结构明白即可;单片机结构可以从51单片机的结构学习,因为比较简单,相对比较容易学习,也可以直接学习ARM单片机的结构,因为目前使用多,需要知道单片机的小系统,了解单片机的中断,会使用基本的外设,像GPIO、定时器等。
学习完C语言及一种单片机的使用,可以对单片机有个大体的了解及简单的应用。
此时可以开始学习简单的原理图PCB绘制软件,有条件可以画一个单片机小系统板,把所有接口引出来,作为后续学习使用。在自己做的板子上运行自己的代码还是很有成就感的,当然你也可以买一个配套的开发板,现在开发板有很多,买一个合适的开发板即可。
接下来就是拓展单片机的外设使用,UART、IIC、SPI等,不仅仅是学习它是如何使用,还要知道它的硬件实现及电气特性,当然学习所有的接口都要这样。同时结合这些接口的使用深入C语言的学习应用。
当这些基本外设都学习完成后,此时就可以依照自己的想法做一些特定功能的硬件了。如果是要找工作的同学,就可以加入相关单片机使用的公司边工作边学习,因为在实际的应用项目中可以加速学习。如果是自学的同学,此时需要寻找一个团队或者参加电子设计大赛来加速自己的学习。
注意此处有一个职位选择的分叉点:硬件工程师&单片机工程师,当然实际应用中可能没有分这么清,具体看公司的职务范围。
硬件工程师偏向于原理图/PCB设计,硬件的调试,关注产品的EMC性能。此时就需要好好学习一种原理图/PCB设计软件,然后开始储备EMC相关的知识了。
单片机工程师偏向应用,主要是如何高效、稳健的实现功能,至于EMC等方面的知识了解即可。
当然,如果有时间,好都学,你掌握的知识越全面,思考的越全面,做出的产品就越好。
PS:学习一定会有一个高原期或者几个高原期,此时一定要坚持下去,应当有一种不经历风雨如何见彩虹的信念。
当这些基本的单片机应用已经不能满足你的求知欲或者公司做的产品越来越复杂,此时可以考虑更高级的应用了。毕竟人总是要进步的,但是前提是你的基础要打的比较牢。可以学习一下多层板的绘制,高频知识的学习、PCB绘制(当然这个是比较费钱的),学习一下DSP、FPGA等相关芯片,用一下RTOS(不论是FreeRTOS还是uCosII/III还是其他)。学习如何使用嵌入式Linux操作系统。有机会可以学习一下操作系统原理相关知识。
这里需要说明一下Linux系统的学习。因为这个是单片机裸跑与使用操作系统的分水岭(RTOS只能算是裸跑的延伸)。Linux操作系统知识比较多,学习的时候可能就需要有侧重点的学习了,可以选择上层应用的开发,此时就是嵌入式软件的开发,也可以做底层驱动,跟硬件接触还是比较密切的。当然还是之前那句话,有时间都学,对于你的发展是好的。无论侧重什么方面,Linux基础都是需要了解的。基本操作命令,系统裁剪等需要掌握。好的学习就是边实践边学习,这应该是贯穿整个硬件学习的全过程。(硬件学习)
当你学习了单片机应用,原理图/PCB绘制,器件选型,Linux系统操作,产品EMC性能等后,恭喜你,你的嵌入式硬件知识面广度已经够啦!你可以自由的选择想要去的公司了(因为你都懂,但是能不能去就要看你的能力了)。当然技术是在不断进步的,所以学习是不能终止的。
接下来你就需要选择一个深度了,一个人的精力是有限的,不管你承认不承认(当然天才除外)。选择一个你感兴趣的方向,注意一定是感兴趣的方向,深入下去,继续学习,购买专业书籍、参加专业培训……,抓住一切能提高你专业技能的机会,并且坚持下去,慢慢你会发现,你已经成为这个方面的专家了。你选择的方向也决定了你的工作的行业,所以需要选择一个有发展前途的公司。
以上学习过程只是一个参考,除了基础知识是必须要学习外,其他顺序是可以改变的,而且也并不一定全部学完,因为包含的内容太多。比如说,我学完C语言,然后直接去学习Linux操作,然后再学习硬件相关的知识,也是可以的。如果项目中用不到DSP、FPGA相关的东西,可以先不学,等以后实际用到了再开始学习。不过应该明白一点,硬件知识的学习是一个积累的过程,越早学习对你后续的发展越好,当然你要立志做一个软件工程师就当我没说。
以上都是我个人的理解,个人能力有限,所以有什么不对之处敬请原谅。另外每个人对于硬件的学习过程可能都不一样,俗话说条条大路通罗马,只希望给刚进入嵌入式硬件行业的人做一个参考,目的就达到了。