资料目录
TI-MCU专区
MSP430快速入门
发布日期:2011/11/14
因为最近转入MPS430的技术支持工作,所以现在开始学习430的开发。由于之前用过51,也用过TI的ARM CORTEX-M3,但是就是没有用过TI的430,所以将我学习430的过程写出来,给像我一样之前没有430开发经验的工程师快速入门做个参考。
如果你准备学习MSP430,在开始之前需要准备如下资料与工具:
1. 430的开发板与调试仿真工具
我公司有个TI 430 LaunchPan开发板,我正好拿它入门。该开发板上自带一个MSP-EXP430G2的调试仿真工具。MSP-EXP430G2适用于所有带2线调制功能的430。

图 1.1 LaunchPan开发板
2. 开发环境
MSP430的开发平台,主要有IAR和TI的CCS。
IAR 是一款非常优秀的编译调试开发环境,具有业界最高的代码编译效率,而且几乎支持目前所有主流的MCU,如8051\430\ARM\AVR\PIC等。
CCS是一款TI公司自己的开发环境,支持TI所有系列的处理器,如DSP\ARM\430等。
从性能和使用人数来看,IAR是无可争议的主流,所以我一般推荐使用IAR,且我后面的介绍也是基于IAR开发平台的。
3. 如何获得IAR的430版本
IAR是一款收费软件,但是IAR公司有提供30天免费试用版和4K/8K代码限制永久免费版,可以登陆IAR公司官网 http://www.iar.com 获得。需要注意的是,需要先注册一个账号,登陆以后才能下载。
如果你仅仅是用于个人学习,可以使用30天免费试用版+和谐文件,获得无限制使用。IAR的和谐文件,可以从网上获得。
4. 获得430相关资料
登陆TI官网 http://www.ti.com/ ,进入产品中心,选择MCU,选择你使用430型号所属系列,比如LaunchPan开发板,使用的是MSP430G2231,属于G2XX系列,选择G2XX系列,在430型号列表中找到MSP430G2231,双击进入。
在这里你可以获得很多关于MSP430G2231的资料,你必须获得的重点资料如下:
n DataSheet
n MSP430xxxx Family User's Guide
n MSP430 Optimizing C/C++ Compiler User's Guide
DataSheet,是CPU所包含资源的概述,引脚的详细定义,芯片的电气特性等。
MSP430xxxx Family User's Guide,是430时钟系统、外设及外设寄存器的详细介绍,适用于某一个系列的430芯片,比如MSP430x2xx Family User's Guide,适用于MSP430x2xx系列的430芯片。
MSP430 Optimizing C/C++ Compiler User's Guide,是基于该系列MCU的代码例程。有适用于IAR汇编语言版本,适用于CCS汇编语言版本,以及C语言版本等3个版本。
MSP430 Optimizing C/C++ Compiler User's Guide,包含了系统时钟, GPIO, TIMER, ADC, UART, USI, COMP等各种外设的具体应用配置例程。其中有一个Readme.txt文件,简要的介绍了每个例程的设置。

图 1.2 C代码例程
要学习MPS430,首先需要搞清楚他的时钟系统。我们知道MSP430是一个超低功耗的MCU,他的时钟系统以及外设都为实现超低功耗而设计。
我们以MSP430G2231为例进行说明。
MSP430G2231系列有4个时钟源,分别是: LFXT1CLK\ XT2CLK\ DCOCLK\ VLOCLK。
LFXT1CLK: 由低频时钟晶体或外接32768hz时钟源产生的低频/高频振荡器或由标准晶体、振荡器,或外部400KHZ--16MHZ的外部时钟源提供。
XT2CLK: 可供选择的高频振荡器,由标准晶体、振荡器,或外部400KHZ--16MHZ的外部时钟源提供。
DCOCLK: 片内可数字控制的振荡器。
VLOCLK: 片内超低功耗、12KHZ的低频振荡器。
MSP430G2231可提供3个时钟信号,分别是: ACLK\ MCLK\ SMCLK。
ACLK:辅助时钟。ACLK有软件选择来自LFXT1CLK和VLOCLK之一的时钟信号。ACLK经1,2,3,4分频后得到。ACLK可由软件选作各个外围模块时钟。
MCLK: 主时钟。MCLK有软件选择来自LFXTICLK,VLOCLK,XT2CLK(如果片内提供),DCOLCK之一的时钟信号。MCLK由1,2,4,8分频得到。MCLK用于CPU和系统。
SMCLK:子系统时钟。SMCLK由软件选择来自LFXT1CLK,VLOCLK, XT2CLK(片内提供),DCOCLK之一的时钟。SMCLK有1,2,4,8分频得到。由SMCLK看有软件选作各个外围模块时钟。
NOTE: MSP430G2231在复位上电后,MCLK和SMCLK来自DCOCLK的1.1MHZ,ACLK来自内部集成6pF电容的LFXT1CLK的高频模式。使用DCOCLK作为MCLK也是最常用的时钟设置模式。
我们搞清楚了时钟系统后,接下里需要搞清楚各个外设功能模块,包括 GPIO, TIMER, ADC, UART, USI, COMP等。由于这篇文章只是快速入门,我在这里不做详细叙述。
在上节中我们提到,在上电复位后MSP430G2231默认使用DCOCLK作为MCLK和SMCLK。
DCO 数字可控的振荡器,误差较大,一般需要校准。MSP430G2231在出厂时有提供一个1MHZ的校准值。为获得较高的时钟精度,一般推荐使用校准时钟。
当然你也可以自己校准,在MSP430 Optimizing C/C++ Compiler User's Guide软件包中有一个msp430x20xx_dco_flashcal.c的程序,该例程需要外接一个32768的晶体作为LFXT1CLK,然后将校准后值保存在FLASH的数据空间。
使用出厂校准值配置DCO,请看程序清单 1.1。
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
//======================================================================
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */
//=======================================================================
while(1)
{
}
}
MSP430的最小系统其实很简单,因为上电后默认使用DCO,所以不需要外部振荡器,只需要最基本的电源,地,复位3个信号就可工作。
如果需要使用2线调试,只需将GND, RST,TEST 3个引脚与MSP-EXP430G2仿真器相连。
在安装IAR后,下面就手把手的教你如何新建一个工程。
1. 打开IAR

图 1.3 打开IAR
2. 新建工程
选择菜单 Project/ Create New Project... ,弹出如下菜单,点击OK确认,

图 1.4 新建工程
3. 新建一个目录
在步骤2后,会弹出如下菜单,需要为你的新工程新建一个目录,然后填入工程名。

图 1.5 新建工程目录
4. 工程创建完成
工程创建完成后,回到项目工程界面,如图所示。

图 1.6 工程创建完成
5. 添加c文件
如图所示,鼠标右键左上角的工程,选择菜单Add/ Add File, 然后把你自己的C文件添加进工程。

6. 配置工程---之选择芯片型号
加入你自己的C文件后,需要配置工程选项。鼠标右键左上角的工程,选择菜单Options...,在弹出的Options对话框中选择菜单 General Options。在Device选项中选择你芯片的型号。

7. 配置工程---之选择调试工具
工程配置Options内容很多,不过一般按默认值就可以了,只是需要根据你的使用调试工具,需要在Debugger选项中,选中你的调试工具型号。


在工程创建与设置完成之后,就可以开始运行你的第一个程序了。忙活了这么久,很值得期待吧?
程序清单 1.2 为我的一个测试程序frist_demo,该程序用出厂校正值配置DCO,配置P1.0 与 P1.6为IO输出(这两个IO有连接的两个LED),然后在主循环里翻转LED,两个LED一闪一闪。
程序清单 1.2---L1,加入MSP430G2231所需要的头文件,该头文件里包含了MSP430G2231的寄存器地址定义。
程序清单 1.2---L2,关闭看门狗,MSP430上电复位后,默认看门狗开启。
程序清单 1.2---L3,L4,L5 使用出厂校正值配置DCO为1MHZ。
程序清单 1.2---L6 配置两个LED引脚为输出功能。
程序清单 1.2---L8,LED引脚置高电平。
程序清单 1.2---L9,延时0.5秒,void__delay_cycles(unsigned long cycles) 为IAR编译器的库函数(CCS也有),该函数的功能是精确延时n个系统时钟。
程序清单 1.2---L10,LED引脚置低电平。
#include <msp430g2231.h> L1
#define SYS_CLK 1000000
#define MS (SYS_CLK/4/1000)
#define LED_1 (1<<0)
#define LED_2 (1<<6)
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer L2
//=========================================================================
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) L3
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range L4
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */ L5
//=========================================================================
P1DIR = LED_1|LED_2; // LED 为输出 L6
P1OUT = LED_1|LED_2; // 设置 LED 为 1 L7
while(1)
{
P1OUT = LED_1|LED_2; // LED == 1 L8
__delay_cycles(SYS_CLK/2); L9
P1OUT &= ~(LED_1|LED_2); // LED == 0 L10
__delay_cycles(SYS_CLK/2);
}
}
程序清单 1.2 frist_demo程序
--------------------------------------------------------------------------------------------------------