怎样学习MSP430单片机
使用官方资料
学习使用任何一款芯片,我们要明确最根本最权威的参考资料是官方给出的资料。对于MSP430单片机,也不例外。市面上有各种各样介绍MSP430单片机的书,水平参差不齐。而其中有一大部分基本上就是翻译芯片手册,更大的问题是,很多书上还有大量的印刷错误等(像寄存器写错、程序有问题等的现象很常见)。这样的情况下,很难好好学习。
本文引用地址://m.amcfsurvey.com/article/201611/318292.htm在学习430单片机的过程中,尤其是对于接触过51单片机的人来说,我们最好不要还是像学习51单片机一样,到处找视频教程,指望着完全中文的资料,而应该学会如何去使用官方给出的资料。或许你没有体会到这样有什么好处,但是将来如果要研究一些比较深入的东西,或者你要用一些最新的芯片,这时你唯一能获取的资料,不是各种中文书籍和翻译来的资料,更不是各种视频教程,而往往只是官方给出的一些全英文的手册。
所有的芯片官方都会给出对应的Data Sheet(数据手册,芯片手册),有些会有Application Note(应用笔记),对于一些复杂的芯片,有一些强大的公司可能也会推出一些中文资料,但还是以英文资料为主。因为英语是国际通用的语言,何况很多高科技产业往往又在国外。过分依赖中文资料,就很难学好这些东西。另外,官方给出的资料,就像是说明书一样,经过了很多次的核对修正,还会及时的勘误,比如430的Errata Sheet会专门指出官方各种手册资料中的纰漏和错误。官方手册的权威性,是任何根据官方手册编写的资料视频所不及的。
不要惧怕英文
在技术性的手册中,除了一些专有名词外,都会避免使用复杂的句式,避免复杂的语法,以及一些难以理解的词汇。看不懂的专有名词,我们完全可以通过查词典来克服。久而久之,就会习惯,英文水平长进了,也不再惧怕英文了。这里引用一位同学的话:“TI的文档写的相当好,通俗易懂,而中文翻译水平层次不一,必要的术语也不知道什么意思。而且中文翻译的文档制作的真心太差。我想你们也不甘心学十年英语就为了一个六级吧?”
基本认识
学习MSP430,首先我们应该了解MSP430的特点,分为哪几个系列,这些在官方介绍文档中都有。
大致了解430内部都集成了哪些外设模块,分别有什么作用,比如AD、串口、硬件I2C等。根据实际应用需要,查看官方选型手册,选择合适的430型号,看RAM、ROM大小、定时器数目、最高运行速度、IO管脚数目、封装等就可以。也可以直接在TI官网选择型号(如下图)。
如果不知道选什么型号,或者是想先学学,可以选一些常用型号,如MSP430F149,MSP430G2553(LaunchPad上用的,有DIP直插的封装,比较好用),MSP430F5438(比较高端的一个型号,价格也比较贵)。
参考资料
选好型号后,就可以上TI官网,下载该型号对应的DataSheet,Users Guide,以及Code Examples。
DataSheet介绍了具体某个型号的各种参数,封装格式,管脚分布,性能特点等。
Users Guide是分为几个系列分别去讲各种模块的结构和寄存器,同一个系列的不同型号,含有的同一个模块操作通常都一样,主要是管脚分配不一样,或者一些型号只含有模块中的一部分功能,比如定时器的比较捕获模块数目不同。
而Code Examples则是官方给出的可直接编译执行的程序代码。比如MSP430G2553内部有10位精度的AD,即ADC10模块,而在MSP430x2xx Family Users Guide上就有对ADC10模块的介绍。同样是2xx系列,有些芯片没有ADC10,但是有ADC12,这个模块同样会在Users Guide上介绍。
开发板
我们可能需要一块开发板,官方推出的LaunchPad是一个不错的选择。LaunchPad上使用的是ValueLine超值系列(2xx系列)的430芯片G2553和G2452,对于简单的项目开发绰绰有余,比51单片机常用的型号89C52RC要强大不少,而且是430单片机中有DIP直插封装的很少的几种型号之一,对于我们手工焊接很方便。
LaunchPad更大的优势在于,在几十块钱的开发板上,集成了JTAG调试芯片,可以连接计算机直接进行程序的调试。LaunchPad使用的是两线JTAG,而不少430型号不支持两线JTAG,则需要购买比较昂贵的430标准JTAG仿真器。JTAG仿真器同时可以进行程序的烧写。430也支持价格低廉的BSL方式烧写程序,但BSL就没有JTAG强大的调试功能了。
关于LaunchPad的使用,官方给出了十分详细的介绍文档《Getting Started with the MSP430 LaunchPad》,包括怎么新建工程都有具体到每一步的截图(使用的是CCS软件)。关于具体电路实现,则可以参考官方的《MSP430 Hardware Tools Users Guide》。如果动手能力强,也可以尝试自己焊接简易开发板。
开发环境
然后要安装开发环境。最常用的是官方推出的CCS和IAR公司推出的IAR Embedded Workbench For MSP430。两种软件各有优缺点,CCS的优点是集成Eclipse,还有官方推出的430Ware、Grace插件,用起来比较方便,软件比较稳定,但是由于Eclipse基于Java开发,反应比较迟钝,IAR的优势则是编译效率非常高,能产生高效的代码,缺点是运行不太稳定,有时会死机。总体来说,目前建议用IAR EW430。
程序编写
然后就要开始写程序了。首先我们应该了解最基本的一些东西,时钟、看门狗定时器、以及IO操作。我们并不一定要对它们都掌握透彻,但是应该知道怎么初始化时钟开启外部高速晶振,看门狗是什么,怎么关闭看门狗以免系统复位等。
然后根据我们的实际需求,再进一步去了解定时器、串口、硬件SPI、硬件I2C、Flash读写、AD、DA等的操作。如果是为了做一个项目,我们只要学习要用的模块就足够了,如果是想提前学习以备以后使用,了解常用的模块就可以了。
学习每个模块时,我们应该先看芯片手册,确认自己使用的型号有这个模块,以及相应IO口的分配情况,然后认真详细的看Users Guide中内部结构框图和寄存器的介绍,参考Code Examples去写程序,并进行测试。在学习每个模块时,我们可以把这些模块的程序写成独立的文件,必要的地方自己做一些注释说明,保留好这些程序,方便以后使用。下次再用的时候,即使忘了怎么操作,只要自己之前写好的模块文件,然后根据自己注释的调用规则去调用函数,就可以很轻松的使用,代码得到了重复利用,非常节省时间精力。
学过51或其他单片机的人,就没必要特地花时间在学430的时候又特地把数码管、1602什么的外设重新再学一遍了,因为程序都是一样的写法,只是IO口的操作有点不同而已。
在这里,强烈建议大家学会模块化编程,代码分层。
前面说的把每个模块写成单独的文件,通过调用函数去重复使用,就是模块化编程的思想。
另一方面,学会代码分层,比如同样是驱动数码管,对于不同的单片机,只是IO操作语句写法不同,而IO的高低电平控制是一样的。我们把具体IO操作语句用宏定义写出来(如#defineLED_OFF P1OUT&=~BIT0),更换单片机只需要修改宏定义,这样就可以实现代码复用,节省了精力。
在这里,宏定义根据不同的单片机,写法不一样,属于硬件接口层;而数码管扫描函数始终是调用宏定义过的语句控制IO口电平,不同单片机写法一样,则属于驱动层;这样的做法就叫做代码分层,也是模块化编程很大的一个特点。
这里再说一点,可能有人之前学习51单片机时写过软件模拟I2C程序读写AT24C01等芯片,现在改用430了,我们仍然可以用宏定义操作IO,软件模拟I2C时序,另一方面,430内部集成了硬件I2C,我们也可以学习硬件I2C,通过设置相关寄存器去控制相同的芯片。一般情况下,硬件接口比软件接口会更有优势,因为不需要占用CPU时间去模拟时序。这个时候,可能就需要重新去了解一下了,因为有些接口用硬件实现和用软件模拟还是有一定区别的。
单片机不是用来学的,而是要去用的
用什么学什么,这样能更好的掌握所学知识,也不至于感觉无从下手。MSP430有几百个型号,我们没必要把每种型号每个模块都拿来学一遍,也不可能有那样的精力,即使你打算全部学,还没学完,TI又会推出一款新的产品。对于其它的各种芯片等的使用也是类似的。所以我们要做的,是掌握学习的方法,以不变应万变。
评论