怎样学习MSP430单片机

MSP430是Texas Instrument(TI,德州仪器)推出的一款超低功耗单片机。TI是一个非常有实力的、全球领先的芯片制造公司,MSP430不仅因为其优秀的设计,更因为TI提供的强有力的技术支持,而很快成为今天市场上非常受欢迎的一款单片机。

使用官方资料

学习使用任何一款芯片,我们要明确最根本最权威的参考资料是官方给出的资料。对于MSP430单片机,也不例外。市面上有各种各样介绍MSP430单片机的书,水平参差不齐。而其中有一大部分基本上就是翻译芯片手册,更大的问题是,很多书上还有大量的印刷错误等(像寄存器写错、程序有问题等的现象很常见)。这样的情况下,很难好好学习。

在学习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,User’s Guide,以及Code Examples。

DataSheet介绍了具体某个型号的各种参数,封装格式,管脚分布,性能特点等。

User’s Guide是分为几个系列分别去讲各种模块的结构和寄存器,同一个系列的不同型号,含有的同一个模块操作通常都一样,主要是管脚分配不一样,或者一些型号只含有模块中的一部分功能,比如定时器的比较捕获模块数目不同。

而Code Examples则是官方给出的可直接编译执行的程序代码。比如MSP430G2553内部有10位精度的AD,即ADC10模块,而在MSP430x2xx Family User’s Guide上就有对ADC10模块的介绍。同样是2xx系列,有些芯片没有ADC10,但是有ADC12,这个模块同样会在User’s 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 User’s Guide》。如果动手能力强,也可以尝试自己焊接简易开发板。

开发环境

然后要安装开发环境。最常用的是官方推出的CCS和IAR公司推出的IAR Embedded Workbench For MSP430。两种软件各有优缺点,CCS的优点是集成Eclipse,还有官方推出的430Ware、Grace插件,用起来比较方便,软件比较稳定,但是由于Eclipse基于Java开发,反应比较迟钝,IAR的优势则是编译效率非常高,能产生高效的代码,缺点是运行不太稳定,有时会死机。总体来说,目前建议用IAR EW430。

程序编写

然后就要开始写程序了。首先我们应该了解最基本的一些东西,时钟、看门狗定时器、以及IO操作。我们并不一定要对它们都掌握透彻,但是应该知道怎么初始化时钟开启外部高速晶振,看门狗是什么,怎么关闭看门狗以免系统复位等。

然后根据我们的实际需求,再进一步去了解定时器、串口、硬件SPI、硬件I2C、Flash读写、AD、DA等的操作。如果是为了做一个项目,我们只要学习要用的模块就足够了,如果是想提前学习以备以后使用,了解常用的模块就可以了。

学习每个模块时,我们应该先看芯片手册,确认自己使用的型号有这个模块,以及相应IO口的分配情况,然后认真详细的看User’s Guide中内部结构框图和寄存器的介绍,参考Code Examples去写程序,并进行测试。在学习每个模块时,我们可以把这些模块的程序写成独立的文件,必要的地方自己做一些注释说明,保留好这些程序,方便以后使用。下次再用的时候,即使忘了怎么操作,只要复制自己之前写好的模块文件,然后根据自己注释的调用规则去调用函数,就可以很轻松的使用,代码得到了重复利用,非常节省时间精力。

学过51或其他单片机的人,就没必要特地花时间在学430的时候又特地把数码管、1602什么的外设重新再学一遍了,因为程序都是一样的写法,只是IO口的操作有点不同而已。

在这里,强烈建议大家学会模块化编程,代码分层。

前面说的把每个模块写成单独的文件,通过调用函数去重复使用,就是模块化编程的思想。

另一方面,学会代码分层,比如同样是驱动数码管,对于不同的单片机,只是IO操作语句写法不同,而IO的高低电平控制是一样的。我们把具体IO操作语句用宏定义写出来(如#define LED_OFF P1OUT&=~BIT0),更换单片机只需要修改宏定义,这样就可以实现代码复用,节省了精力。

在这里,宏定义根据不同的单片机,写法不一样,属于硬件接口层;而数码管扫描函数始终是调用宏定义过的语句控制IO口电平,不同单片机写法一样,则属于驱动层;这样的做法就叫做代码分层,也是模块化编程很大的一个特点。

这里再说一点,可能有人之前学习51单片机时写过软件模拟I2C程序读写AT24C01等芯片,现在改用430了,我们仍然可以用宏定义操作IO,软件模拟I2C时序,另一方面,430内部集成了硬件I2C,我们也可以学习硬件I2C,通过设置相关寄存器去控制相同的芯片。一般情况下,硬件接口比软件接口会更有优势,因为不需要占用CPU时间去模拟时序。这个时候,可能就需要重新去了解一下了,因为有些接口用硬件实现和用软件模拟还是有一定区别的。

单片机不是用来学的,而是要去用的

用什么学什么,这样能更好的掌握所学知识,也不至于感觉无从下手。MSP430有几百个型号,我们没必要把每种型号每个模块都拿来学一遍,也不可能有那样的精力,即使你打算全部学,还没学完,TI又会推出一款新的产品。对于其它的各种芯片等的使用也是类似的。所以我们要做的,是掌握学习的方法,以不变应万变。