老司机谈谈如何学习STM32嵌入式系统
一、嵌入式系统的概念
着重理解“嵌入”的概念 ,主要从三个方面上来理解。
首先,从硬件上,“嵌入”是基于CPU的处围器件的,整合到CPU芯片内部,就好比早期基于X86体系结构下的计算机,CPU有的是运算器和累加器的功能,一切芯片要通过外部桥路来扩展实现,象串口之类的都是凭借着外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,而且PC机有独立的显卡,而多数嵌入式处理器都带有LCD控制器,就其意义来说就相当于显卡。
从软件上来说,嵌入就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是软件的“嵌入”。因为嵌入式系统是计算机科学与电子技术交叉的一门综合性学科,在嵌入式这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们。
二、嵌入式系统的分层与专业的分类
嵌入式系统分为硬件层、驱动层、操作系统层和应用层。
硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易。同时,硬件层也是驱动层的基础,有模拟电路与数字电路基础,还要对操作系统内核及其调度性相当的熟悉的。就目前来看,有硬件基础的情况下会软件开发会使你增值。硬件层比较适合于,电子通信、机电自动化类专业的人来学习,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。
驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能执行,要懂得系统内核架构和实时调度性,有良好的驱动编写风格。按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级驱动工程师的水平都达不到,这样所写出来的驱动在应用调用时现在打开的程序中断以前程序的情况,或者要等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,所以工资也是相对最高的。除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。
应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到其他操作系统下只是编译和开发环境有相应的变化而已。但如果涉及嵌入式系统下嵌入式数据库、基于嵌入式系统的网络编程和基于此应用层面的协议应用开发又较为复杂, 并且有难度了。
三、目标与定位
学STM32嵌入式,从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编程。
四、开发系统选择
对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计 与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但嵌入式系统这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。
选择平台还要考察一个处理器的外部资源,你接触外部资源越多,越熟悉他们那你以后就业成功的机率就越高,这就是招聘时 所说的有无“相关技能”,因为一个人不可能在短短几年内把所有的处理器都接触一遍,而招聘单位所用的处理器就可能是我们完全没有见过的。因此开发系统的选择,要看自己的未来从来目标方向、要看开发板接口资源、还要看业界的通用性。
五、高级嵌入式系统硬件工程师要具备的技能
对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,需要积累多年的经验,但是达到一定技术水平后工资十分可观。
数字部分在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类。ARM单片机(STM32属于ARM系列)类的内容就较多,业界产品占用量大,应用人群广,因此就业前景不错。而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师判定水平高低的依据。
想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,从硬件设计工程师中还可以分出ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮助解决EMC的问题。要能用到工具画图画板做逻辑设计、接口设计审图、调试。
硬件是要靠经验,十年磨一剑!但是相对通常的软件开发者来说,可以有更长的职业寿命。