最近重新整理了一下过去几年学习的51单片机、stm32、dsp和嵌入式linux的知识,重新审视了一下这几种MCU的学习过程,仔细想来,其实学习这些东西并不复杂,这里将一般的学习方法整理下来,供初学者学习体会:
首先,学习MCU的首要必备的基础是C语言和模拟电路及数字电路的基础,必备资料主要是数据手册和官方提供的编程指导,当然,有时候一本优秀的教材还是有必要的,但是不必很多,有些初学者会在图书馆借上琳琅满目的一推书,我觉得没有必要,这样无疑耽误了很多宝贵的时间。另外一个需要准备的就是官方或者网友提供的例程,这点也很重要,作为MCU的学习,例程必不可少。有了这些基础的材料(最重要要的是官方的数据手册和例程)。接下来就是学习的过程了。学习的过程贵在掌握学习的方法,MCU的学习本身难度并不大,大家可以想,MCU本身只是处理器,如果处理器的学习都耗费了巨大的经历,那么怎么用处理器去解决问题呢,其实把相关的算法和实现思想放在处理器上才应该是学习者需要主要考虑的问题。我总结的MCU的学习方法有三条,可以用七个字概述:一看二仿三学习。
首先说说“一看”,所谓一看就是了解MCU的整体功能,比如说有多少IO口,多少可以复用,多少只能专用。MCU提供了什么接口,各有多少个,这个MCU主要针对的处理对象是什么(是控制系统或者图像处理),这个处理器的特点是什么,应用背景是什么。针对于这一环节不能留有疑问,比如如果不明白SPI是什么东西,就应该详细的弄清楚,弄清楚三个问题就可以:第一,什么是SPI;第二,为什么要用SPI;第三,语言概述如何使用SPI(SPI使用的要素有什么?速率等)。总之,“看”的过程就是要把MCU整体有个初步的认识,把MCU的外设弄清楚。
下面说说“二仿”,所谓二仿就是配置好开发环境后,阅读官方的例程代码,官方的例程具有典型性和针对性,先阅读官方给出的例程代码,在“一看”的基础上,弄清楚外设各个功能代码实现的方案,一般的代码实现过程有一定的规律性,只要充分掌握了每个外设的实现过程,那么使用MCU完成一定的组合功能设计问题就不大了。“二仿”的关键在于能够总结出各个模块实现的编程步骤,比如先初始化,再设置相关量(波特率、位数等),最后进行功能应用。熟练的掌握这些过程之后,实际上对于一些基本的开发已经没有问题了,下面的“三学习”的过程实际上深入和融会贯通的过程了。
最后介绍一下“三学习”,有了前两步的工作,其实对于MCU的开发来讲已经足够了,但是作为高级的研发人员来讲,最好能够理解MCU的工作机制,从而可以融汇贯通,比较不同MCU之间的不同,从而为MCU的选型提供帮助,“三学习”的内容实际上就是阅读和了解芯片手册的内容了,在阅读中,体会MCU的工作机制,时钟配置,及其他功能组件的配置过程,详细了解相关寄存器的功能,这时候重新阅读官方例程代码,深究代码内容,把相关的实现函数深入理解,对比寄存器功能,仔细研究每个功能的实现过程,从而深入了解MCU的整个工作机制,至此,MCU的学习工作已经完成,如果有充分的时间,可以多学习几类MCU,横向比较各类MCU的特点,这样更有利于整个知识体系的形成。
本人用此类学习方法,对于一款MCU的学习时间一般不超过1个月,像51单片机之类的学习一般在1个星期左右可以学习完成(当然这个时间看个人基础而定,尤其是C语言基础),相对效率比较高。