This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
无论您是 MSP430 的设计老手,还是初涉 MSP430 应用设计,8 月 30 日到 9 月 16 日,快来分享您认为对您设计有用的资料文档!每一位分享者将获赠一块 MSP430 LaunchPad + MSP430 电容触摸 BoosterPack 。
我们期待您的给力分享!
希望 TI 官方 MSP430 社区为大家提供一个学习、分享的平台!
一次只能贴一个啊?!
1.1 概 述
当前市场上存在很多种微处理器,每种微处理器都各有其特色。针对不同的应用选择合
适的微处理器非常重要。MSP430 的主要特点为:
(1)超低功耗 拥有5 种低功耗模式,以适应不同的需要。CPU 从低功耗模式被唤醒,
这个过程最多只需要6μs,因此,在某些需要迅速作出反应的应用中,CPU 能够及时退出低
功耗模式,进入工作模式。
(2)灵活的时钟使用方式 除了片内集成一个晶体振荡器外,还可外接1~2 个晶体振
荡器。不同的内部功能模块可根据需要使用不同的晶体振荡器,在不需要时可以通过设置寄
存器将其关闭,以降低功耗。
(3)高速的运算能力 16 位RISC 架构,125ns 指令周期。
(4)丰富的功能模块 集成了大量的功能模块,这些功能模块包括:
多通道10~14 位AD 转换器
双路12 位DA 转换器
比较器
液晶驱动器
电源电压检测
串行口USART(UART/SPI)
硬件乘法器
看门狗定时器和多个16 位、8 位定时器(可进行捕获、比较、PWM 输出)
DMA 控制器
FLASH 存储器。它可以在运行过程中由程序控制写操作和段的擦除(In system
programmable),不需要额外的高电压。
(5)廉价专业的开发工具 MSP430 的芯片上包括JTAG 接口,因此在仿真调试程序时,
通过一个廉价的JTAG 接口转换器就可以完成以往用昂贵的仿真器才能完成的功能,如设置
断点、单步执行程序、读写寄存器等。
(6)灵活快速的编程方式 可通过JTAG 和BSL 两种方式向CPU 内装载程序。
(7)高保密性 只需按照特定的方式将MSP430 内部的熔丝熔断,JTAG 口便被物理性
地阻断。BSL 方式所需要的密码长达256 位,排列组合出来的密码量为2 的256 次幂,如此
巨大的数量被破解的可能性微乎其微。
(8)低电源电压范围 1.8~3.6V。
正准备学习一下单片机,找了一些资料,希望大家共同学习!www.amobbs.com/forum.php;wenku.baidu.com/.../5459ea4cf7ec4afe04a1df9b.html;www.52solution.com/.../viewthread.php
这两个文档不错,《A Wireless Sensor Monitor Using the eZ430-RF2500》和《CC2500
Single Chip Low Cost Low Power RF Transceiver 》,对于初学者来说很有帮助,而且配上TI赠送的Demo板,可以很快的上手,一周就能学会MSP430了。只要是具有MCU基本知识的人都能学得会的,430是比较简单,比较好用的一个MCU系列。
文档可以在这里查找:www.ti.com.cn/.../ez430-rf2500
虽然很早就从TI获得MSP430系列的样片,但是把它很好的应用到具体的项目里面还是花了很长的时间。就是在不停的测试和到TI的官网里面查资料的反复中成功的!!
processors.wiki.ti.com/index.php
www.ti.com.cn/.../ccstudio-msp430
以上这些文件都是我学习使用MSP430的资料,当然其他的很多也是非常有用的。
非常不错的活动,作为多年TI DSP的设计开发工程师,早在10多年前就在杭州参加TI&杭州利尔达合作开展的MSP430培训推广行动(好象是第一届吧?)。进入公司后,先后接触了其他公司的一些嵌入式处理器以及一些新兴公司的单片机和其他处理器,给我的感觉没有一家公司在器件的datasheet以及applications以及开发工具套件比TI做得好!!
TI MSP430的功耗和性能相比其他单片机有技术优势,希望有套MSP430开发工具研究一下但一直没有机会获得,希望这次活动等赶上,谢谢!
这里贴一个MSP430和NRF24L01调试的文档,不知道是不是已经有人分享过了,反正自己在设计无线传感器的时候受益颇多。
作为收发测试的话其实一块便宜的launchpad刚好够用,G2231有AD模块,可以用作采集,而G2211相对功能少一些,但用来在接收端做显示和其他控制功能已经足够。
另外很好奇为什么G2231和G2211的头文件里都没有位操作,每次用运算符挺烦人的。
我觉得这篇文档相当好,题目是:MSP430F常用模块应用原理.pdf
对于初学者来说可以说太有价值了,对于MSP430F常用模块的原理和应用进行了讲解。
具体自己看附件,先列一下标题:
1- 复位模块
2- 时钟模块
3- IO端口模块
4- WDT看门狗模块
5- Timer A定时器模块
6- 比较器 A模块
7- ADC12 数模转换模块
8- USART 串行异步通讯模块
9- CPU 模块及全局资料
10-MSP430 其它应用介绍
新浪爱问上有很多msp430资料,注册账号后即可下载。
比如:
http://ishare.iask.sina.com.cn/f/24488386.html
http://ishare.iask.sina.com.cn/f/19620079.html
http://ishare.iask.sina.com.cn/f/33510377.html
等等。
希望能够收到奖品。
这块launchpad在以前参加TI活动中拿到过,后来给人了,这作为430入门还是很好的。我当时就是根据User's Guide for LaunchPad的说明来入门MSP430的
我感觉这个文档相当的好,题目是:MSP430延时函数设计。
学习了这篇文档之后能灵活利用430的寄存器及其超低功耗的特点编写出各种级别的延时函数,如us,ms,s级别的精确的延时,
在编写DS18B20,模拟IIC等对时序严格要求的程序时更加的得心应手,严格控制好延时的时间。
真心希望能得到TI的板子进行更深入的学习!!
我分享一个430硬件工具相关的文章,下载地址:www.ti.com.cn/.../slau278j.pdf
文章标题:MSP430 Hardware Tools User's Guide
对于430相关硬件电路设计很有帮助,该文章提供了全系列原理图和PCB参考设计图纸、BOM清单等,详细讲述了各种下载方式:两线制、四线制JTAG,UIF、PIF的参考设计,BSL等!参数选择注意事项等,是进行硬件电路设计的宝典。
我觉得比较好的文档是:Heart-Rate and EKG Monitor Using the MSP430FG439 以及“通过使用MSP430G2452微控制器的LaunchPad ValueLine开发包实现基于心电图的心率监测“
下载地址是:www.ti.com.cn/.../slaa280a.pdf
其中前一篇文档还有相应的实物可以购买,而且相关文件中有完整的目标代码可以看。我在做ECG监测工程的开始时期,从该应用手册和相关文件中受益颇多。其中对仪表放大器的选择、心率监测的算法都很有借鉴意义。特别是代码中的滤波算法很有意思。
第二个文档中也提到了ECG采用的放大器选择,并对仪表放大器的提出了概念。而且使用了ez430虚拟uart,作为无线链接的手段。
下面贴一下我的做的基于MSP430F149的三导联心电图监测模块的样机。还有传到手机上的示意图
资料名称为:MSP430 32kHz晶体振荡器应用报告
链接为:www.ti.com.cn/.../zhca445b.pdf
通过对32kHz晶体振荡器应用的了解,我对此晶振的选择、电路布局、配置方法有了更加深刻的认识。因为涉及到了高频电子线路里面所讲到的晶体振荡电路,而我在这方面并不是很熟悉,因此这篇文章也让我学到了很多这方面的知识,为我设计无源晶体振荡电路提供了帮助。
文档主要内容如下:
1 32 kHz 晶体振荡器
2 晶振选择
3 印刷电路板 (PCB) 设计注意事项
4 测试晶体振荡器
5 生产中的晶体振荡器
同时,我也把我的资料分享一下。。。
才学单片机没有多久,但是这个资料我一直在看.
他是一本实验教程,除了介绍430单片机的模块功能外,还提供了每个模块的典型应用程序.
实在是不可多得的一本好资料,在这里和大家分享一下,共同学习,共同进步.
www.deyisupport.com/.../6046.aspx
MSP430 LaunchPad 大讲堂
www.deyisupport.com/.../0083.LaunchPad.pdf 这里还有入门资料、例子,很适合初学者。
这里的东西比较全,对我这种初学者来说很有帮助,还在学习中。。。
前一阵子买了一块EXP430FR5739铁电开发板,也找了很多资料学习,资料都很全,但是却很少找到有关于IAR、CCSv5编译器编译完成后该如何下载到单片机中进行调试、以及需要注意的事项等。这是初学者入门的一道阻碍!有一天我在EEword论坛看到有人发帖分享心得《手把手教你使用TI MSP430 LaunchPad》链接:bbs.eeworld.com.cn/thread-303599-1-5.html,作者用图文并茂的方式介绍了在IAR开发环境下程序编译完成后如何下载程序到单片机中进行调试,以及需要注意的地方,非常感谢原文作者David_Lee。我觉得这是最基本也是最重要的一个技能,我觉得不管你程序写如何、有多了解MSP430的架构,首先得下载到单片机中跑跑才算真正的入门。附件是David_Lee写的手把手教你使用TI MSP430 LaunchPad的PDF文档。
2008年底开始学习使用MSP430 刚开始是个比较辛苦的过程。
2010年中开始尝试设计实际的产品
2011年 成功完成光学便携式仪器设计一款
2012年 到目前为止刚完成另一款光学测量便携式仪器。成功体现MSP430的低功耗。在稳压前测量电流为15UA表示满意。
现在msp430 如可以胜任现有的项目 我个人还是很推荐。受此影响公司一些产品上都有MSP430的身影。
以下是个
msp430 查找的连接方便需要的朋友
www.ti.com.cn/.../product_search.page
刚学习需要开发工具连接:
www.ti.com.cn/.../hardware_and_software.page
msp430 官方的技术文档 :
www.ti.com.cn/.../mcuprodtechdoc.tsp
开发都需要什么软件呢 就在这里:看看朋友们是不是有你需要的
估计国内用D版IAR作为C编译器的用户非常多。而MSP430-GCC是一款非常优秀的免费C编译器,编译效率也非常好。但是这个软件包只能编译,没有调试工具。之前曾经有一款msp430-gdbproxy,做GDB和FET的代理,供调试,但是经我实践验证,这个软件太老了,最新的版本也是2006年的,而且我连调试普通的msp430f2272都说不识别的device,在initial device时就异常退出了。
现在好了,有一款更好的:MSP-DEBUG,这个开源软件更新非常快,最新的更新版是2012年7月份的。所以,使用MSP430-GCC + MSP-DEBUG,在开源IDE eclip se下,构成了完整的免费的msp430开发、调试环境。关于MSP-DEBUG的更多详情请参考:
mspdebug.sourceforge.net/manual.html
建议使用D版IAR作为开发环境的用户都转到MSP-GCC + MSP-DEBUG这个环境下。这下自己开发的软件就放心了,再也不怕被被追究版权问题了。
无论是 MSP430 的设计老手,还是初涉 MSP430 设计新手,都会根据所使用的芯片具体型号下载TI官方提供的软件包。具体步骤如下:
1.登陆TI官网。www.ti.com
2.在左上角搜索栏输入想找的单片机型号,例如:MSP430F1611
3.一般情况会直接搜索到产品,进入产品页面,选择Software (6)
4.在里面找到MMSP430x13x, MSP430F14x, MSP430F15x, MSP430F16x Code Examples (Rev. N)
5.下载slac051n.zip
6.解压会得到
//MSP430F14-直接IO口按键检处理程序
/*************************************************************************/
//以下是结合MC430F14开发板来实现的按键检处理程序实验.
//分别使用了采个三个按键接到MSP430的通用IO口,按任意一个按键可以使板上的LED反转.
//例程中,按键采用不断查询方式,以得到键值.并没有使用到低功耗.此程序结构比较适合
//用在非手持设备或非电池供电的设计中.此程序结构比较通用,级用户可参与或套用修改.
//应用目标板:MC430F14x开发板
/*************************************************************************/
#include <msp430x14x.h>
//初级用户要习惯采用宏定义,以方便的编写和修改
#define keyio 0xf8 //定义按键IO口,Px0-Px2 IO口.
#define key_1 0xfe //定义返回键值1
#define key_2 0xfd //定义返回键值2
#define key_3 0xfb //定义返回键值3
//声明子程序
unsigned char key_chcek(void);
void display_update(unsigned char dta);
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
//*************************************************************************
//将单片机初始化程序放在main()前面是方便查看单片机的初始化状态情况.
void MCU_int(void)
{//默认MCLK主时钟频率为DCO=~800K
P1OUT |= BIT1; //设置LED,上电为灭.电路可以查看MC430F14电路图.
P1DIR |= BIT1; //P1.1设置为输出.
//MSP430单片机IO口上电默认方向为输入,所以接按键的IO无需再设为输入.
}
//*************************************************************************
void main (void)
{ unsigned char key_value; //定义键值全局变是
WDTCTL = WDTPW + WDTHOLD; //关狗
MCU_int(); //初始化单片机
while(1) //主程序主循环
{
key_value=key_chcek(); //检测,有键按下并松开,返回一个键值.
switch (key_value) //对键值进行处理.采switch语法结构查询
{
case key_1: key_process_0(); //调用键处理程序1
break;
case key_2: key_process_1(); //调用键处理程序2
break;
case key_3: key_process_2(); //调用键处理程序2
break;
default: ; //调用键处理程序4
break;
}
display_update(key_value); //如果有需要可以在这里加上显示更新程序.
key_value=0x00; //最后清除键值.将继续主循环.
}
}
//*************************************************************************
//按键检测程序
//返回值: 无符号字符型键值
unsigned char key_chcek(void)
{
unsigned int i;
unsigned char timp,active;
active=0;
while(!active)
{
while(0xff ==( P2IN | keyio)); //一直等待有键按下
timp = P2IN | 0xf8; //若有键接下了,则读入IO状态.
for(i=0;i<7000;i++); //延时,是为了去按键抖动.
if (timp ==(P2IN | 0xf8)) //经延时后,还是那键吗?
{ active = 1; //是,则按键有效.
while(0xff !=( P2IN | keyio)); //一直等待按键松开
}
else
{ //去按键抖动后读入的键值与之前不同.则先效.
active = 0; //再循环检测.
}
}
return timp; //返回一个键值.
}
//*************************************************************************
void key_process_0(void) //值处理,用户可以自己修改...
{
P1OUT ^= BIT1;
}
//*************************************************************************
void key_process_1(void) //值处理,用户可以自己修改...
{
P1OUT ^= BIT1;
}
//*************************************************************************
void key_process_2(void) //值处理,用户可以自己修改...
{
P1OUT ^= BIT1;
}
//*************************************************************************
void display_update(unsigned char dta)
{
; //用户可以根据需要来放置显示程序,如LCD,LED,Digital-LED....
//灵活应用,
}
//*************************************************************************
个人认为学习430看一下几分从官方网站上下载的资料就差不多够了,看很多参考书其实必要性不是很大,而且效率不高,很多介绍430的书其实就是USERS' GUIDE的中文翻译版,再加上它的示例例程。建议使用CCS,CCS里有TI Exploer,里面有针对各个型号的430的示例代码,比参考书更加贴近你使用的芯片,也更加权威。碰到不会用的地方如AD或者硬件I2C等直接参考里面的例程就可以了。
就我的学习经验来说这几份文档和CCS就已经能够帮助你轻松上手了。
MPS430的离线烧写FLASH工具MSP430_Flasher,可以脱离IAR和CCS,用在小批量生产时还是不错的
我改了一个例子,可以烧写LaunchPad的G2553芯片,非常方便,支持HEX和TXT文件。
里面有详细使用说明。
教材:MSP430接口技术及系统设计实例
一本初学或查询用书,很早就用了,基础示例逐一学习,会对430的基本掌握有一个提高。
但对于设计,归根到底还要查芯片手册,做硬件会看英文的手册该算是基本功。
MSP430F2xxx的片子就是方便,DIP的封装很适合简单产品的原型设计,有了Launchpad就更方便了。
附件这个文档虽然没有太多的细节,但展示了这个系列MCU的典型应用,很好地利用了硬件资源,有创意。
多看看这样的文档,对产品创新有很多帮助。
感谢TI一直以来的支持。
我在使用中发现MPS430适用的范围很广,虽然I/O有限,但是采用了合理的控制方式后,能实现几乎所有的计算和通信功能.不过相对而言,外围设备的数量和设计比MPS430还要多些.其中电源管理,如果能和MCU集成起来,可能是更紧凑的设计,当然,对性能回有影响,但这样回更适合紧凑型的应用了.分享TI资料,
其中对于EEM的管理需要学习下,和其他MCU是不同的,资料如下
1. Advanced Debugging Using the Enhanced Emulation Module (EEM) With CCE Version 3 (SLAA393),www.ti.com/.../SLAA393
2.MSP-FET430 Flash Emulation Tool (FET) (for Use With IAR v3+) User's Guide (SLAU138), www.ti.com/.../SLAU138
3.MSP-FET430 Flash Emulation Tool (FET) (for Use With CCE v3.1) User's Guide (SLAU157).www.ti.com/.../SLAU157
该文档使我熟练的掌握msp430G2553单片机的使用,当我对一些寄存器不会控制时,我都会查阅它,很全面的。。。
ʵ��������֤��,����notepad++��C���Եķ�ʽ�鿴,��Ϻ����б���,����ῴ������,�������������°� ����û��ֲ�,����Ӧ�ú���������˰�,�ҿ��Ÿо��ȽϺõ��ֲ�,�����������ĵ�������,�Լ������������� ,�����������û��ֲ� ���һ�ݱȽϺõIJ��� ͬ���ǼĴ����ʹ���ʾ�� ���������� ʱ��ģ�飺 void ʱ��Դ(֧���ĸ�ʱ��Դ) { ��Ӿ���ģ�飨����Ӿ���Ƶ�ʸߵͻ��ֵģ� { (1)LFXT1CLK��Ϊ����/���پ���Դ��ͨ����32.768kHz��Ҳ���Խӣ�400kHz��16Mhz���� low frequency ��Ƶ ��ͨ�����������Դ �ӵ�Ƶ����������Ϊ��32768HZ��ʱ�������� ��LFģʽ��XTS=0����ֱ��������XIN��XOUT֮��, ��ʱ��������Ҫ�Ӹ��ص��ݣ��������XCAPxλ������LFģʽ���ڲ��ṩ�ĸ��ص��ݡ� ��ѡ1��6��10��12.5pF�� F2xx������һ���µij����ľ���VLO��12kHz��������500nA�Ĵ���ģʽ������ʹ����LFXT1���⡣BCSCTL3|=LFXT1S1;//ACLK��Դ��VLO (2)XT2CLK����ѡ��Ƶ��������ӱ����پ���ͨ���ǽ�8Mhz��Ҳ���Խӣ�400kHz��16Mhz���� ��450KHZ~8MHZ�ı������������ⲿ��������������XT2IN��XT2OUT֮��,��ʱ��Ҫ�Ӹ��ص��ݣ�����ʱ���Թرա� ��Ƶ������Ҫ���������������ģ���ʹ�õ�ع����ϵͳ����Ƶ�����������¼��������ٷ�Ӧ���߹�CPU���д������� ��HFģʽ��XTS=1�������Խ�450KHZ~8MHZ�ı����������� ��ʱ��Ҫ�Ӹ��ص���.LXFT1������Ƶ���ź�ΪACLK.����ʱ����Ҫ�ϰٺ���Ľ���ʱ������ȶ�����. } �ڲ�����ģ�� { ��1��DCOCLK������������Ϊ�ڲ�������RC��·���ɣ� ��DCO��Digital Control Oscillation����д������ʾ���������� ����RC����������оƬ�ڲ�������ʱ���Թرա� DCO����Ƶ�ʻ�����Χ�����¶Ⱥ�MSP430������ѹ��Ӱ�죬��ͬһ�ͺŵ�оƬ��������Ƶ��Ҳ����ͬ�� ��DCO�ĵ��ڹ��ܿ��Ը����������ܣ����ĵ��ڷ�Ϊ����3���� a��ѡ��BCSCTL1.RSELxȷ��ʱ�ӵı��Ƶ�ʣ� b��ѡ��DCOCTL.DCOx�ڱ��Ƶ�ʻ����Ϸֶδֵ��� c��ѡ��DCOCTL.MODx��ֵ����ϸ���� ʵ��: BCSCTL1 =CALBC1_8MHZ; //�趨DCOΪ1MHZ DCOCTL = CALDCO_8MHZ; //CALBC1_XMHZ��CALDCO_XMHZ��8�����ݱ�����Flash��Ϣ�洢��Segment��0x10F8~0x10FF��ַ�С���������1��8��12��16MHZ�� ��2��VLOCLK���ڲ���Ƶ������12kHz������ } } void ʱ��ϵͳ(�ĸ�ʱ��Դ�ɷֳ�����ʱ��ϵͳ) { ��1��ACLK��Auxiliary Clock������ʱ�ӣ�ͨ����LFXT1CLK��VLOCLK��Ϊʱ��Դ������ͨ��������Ƹ���ʱ�ӵķ�Ƶϵ���� ����Χģ��ʹ�á�����ʹ��ǰ����ͨ����ģ��ļĴ���ʵ�ַ�Ƶ�� ��ACLKֻ����LFXT1����1��2��4��8��Ƶ��Ϊ�ź�Դ��������Ϊ��̨ʱ����������CPU. ��2��MCLK��Master Clock��ϵͳ��ʱ�ӵ�Ԫ��Ϊϵͳ�ں��ṩʱ�ӣ�������ͨ��������ĸ�ʱ��Դѡ�� ��ʵ����CPUʱ�� ����CPU����ʹ�ô�ʱ�����⣬��Χģ��Ҳ����ʹ�á� MCLK����ѡ���κ�һ��������������ʱ���źŲ�����1��2��4��8��Ƶ��Ϊ���ź�Դ�� ��3��SMCLK��Sub-Main Clock��ϵͳ��ʱ�ӣ�Ҳ�ǿ��������ѡ��ʱ��Դ�� ����Χģ��ʹ�á�����ʹ��ǰ����ͨ����ģ��ļĴ���ʵ�ַ�Ƶ�� SMCLK����XT2CLK����DCOCLK������������ʱ���źŲ�����1��2��4��8��Ƶ��Ϊ���ź�Դ�� �����д Basic Clock Module Registers(����ʱ�ӼĴ���) DCO control register DCOCTL Basic clock system control 1 BCSCTL1 Basic clock system control 2 BCSCTL2 Basic clock system control 3 BCSCTL3 SFR interrupt enable register 1 IE1 SFR interrupt flag register 1 IFG1 PUC��λ��(����Ĭ�����)��MCLK��SMCLK���ź�ԴΪDCO��DCO����Ƶ��Ϊ800K��1MHZ��ACLK���ź�ԴΪLFXT1�� } void ʱ����ؼĴ���(���Ƶ�ʵ�ѡ���� �ĸ��Ĵ���) { (1)DCOCTL��DCO���ƼĴ�������ַΪ56H����ʼֵΪ60H�������ڲ�����ʱ�ӣ� DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0 DCO0~DCO2: DCO Select Bit,������8��Ƶ��֮һ����Ƶ����ע��ֱ���������ĵ������塣 MOD0~MOD4: Modulation Bit,Ƶ�ʵ����� һ�㲻��ҪDCO�ij��ϱ���Ĭ�ϳ�ʼֵ�����ˡ� (2)BCSCTL1 ��Basic Clock System Control 1����ַΪ57H����ʼֵΪ84H����������ACLOCK�� XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0 RSEL0~RSEL2: ѡ��ij���ڲ������Ծ������Ƶ��.0��ͣ�7��ߡ� XT5V: 1. DIVA0~DIVA1:ѡ��ACLK�ķ�Ƶϵ����DIVA=0,1,2,3,ACLK�ķ�Ƶϵ���ֱ���1,2,4,8; XTS: ѡ��LFXT1�����ڵ�Ƶ����ģʽ(XTS=0)���Ǹ�Ƶ����ģʽ(XTS=1)�� XT2OFF: ����XT2�����Ŀ���(XT2OFF=0)��ر�(XT2OFF=1)�� ��������°�XT2OFF��λ�Ϳ�����. ��3��BCSCTL2��Basic Clock System Control 2����ַΪ58H����ʼֵΪ00H����������MCLOCKSMCLOCK�� SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR DCOR: Enable External Resistor. 0,ѡ���ڲ����裻1,ѡ���ⲿ���� DIVS0~DIVS1: DIVS=0,1,2,3��ӦSMCLK�ķ�Ƶ����Ϊ1,2,4,8 SELS: ѡ��SMCLK��ʱ��Դ, 0:DCOCLK; 1:XT2CLK/LFXTCLK. DIVM0~1: ѡ��MCLK�ķ�Ƶ����, DIVM=0,1,2,3��Ӧ��Ƶ����Ϊ1,2,4,8. SELM0~1: ѡ��MCLK��ʱ��Դ, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK ���õ�ʱ��һ�㶼��SMCLK��MCLK��ʱ��Դѡ��ΪXT2�����ⲿ����ʱ�ӣ� ������ 1. LFXT1: һ����Ч��PUC�źŽ�ʹOSCOFF��λ������LFXT1���������LFXT1�ź�û������SMCLK��MCLK���������OSCOFF�ر�LFXT1. 2. XT2: XT2����XT2CLKʱ���źţ����XT2CLK�ź�û������ʱ��MCLK��SMCLK,����ͨ����XT2OFF�ر�XT2��PUC�źź���XT2OFF����XT2�Ĺرյġ� 3. DCO����������ʧЧʱ��DCO�������Զ���ѡ��MCLK��ʱ��Դ�����DCO�ź�û������SMCLK��MCLKʱ���ź�ʱ������SCG0λ�ر�DCOֱ���������� 4. ��PUC�źź���DCOCLK��MCLK��ʱ���źţ�������Ҫ�ɽ�MCLK��ʱ��Դ��������ΪLFXT1��XT2������˳�����£� (1)��OSCOFF/XT2 (2)��OFIFG (3)��ʱ�ȴ�����50uS (4)�ٴμ��OFIFG���������λ�����ظ�(1)-(4)����ֱ��OFIFG=0Ϊֹ�� (5)����BCSCTL2����ӦSELM�� MSP430�ڲ����о�������ʧЧ����·����ʱ���źŶ�ʧ50usʱ������·��������ʧЧ�� ���LFXT1�������ڸ�Ƶģʽ���Ƶģʽ����XT2�����ʱ���źţ� ��ʧЧ���ֱ�ΪLFXT1OF��XT2OF��λ������ʧЧ��־λOFIFG��λ�� ���MCLK�ź�����LFXT1����XT2����ôMSP430�Զ���MCLK���ź��л�ΪDCO���������Ա�֤����������С� �����Ե���������ʧЧ��LFXT1OF��XT2OF��ʱ������ʧЧ��־λOFIFG��λ������������POR�� ��OFIFG��λ��MCLK����DCO���������OFIE��λ����ô�����������жϡ� �жϵõ���Ӧ��OFIE�Զ���λ��OFIFG����������㡣ʧЧԴ����ͨ�����Ը���ʧЧλʶ�� ���䣺POR(Power-On-Reset)���ϵ縴λ�źţ���ֻ�����������¼�����ʱ������ 1��оƬ�ϵ硣 2��RST/NMI���óɸ�λģʽ����RST/NMI�����ϳ��ֵ͵�ƽ�źš���Non Maskable Interrupt)�������������жϣ���CPU�������Σ� POR�źŵIJ����ܻ����PUC��Power-UP-Clear���źţ���PUC�źŵķ����������POR�źš�PUC�ź����ϵ�����źţ����������¼�Ϊ�� 1������POR�źš� 2�����ڿ��Ź�ģʽ�£����Ź���ʱʱ�䵽�� 3�����Ź���ʱ��д�����İ�ȫ��ֵ�� 4��RST/NMI���ó�NMIģʽ����RST/NMI�����ϳ��ֵ͵�ƽ�źţ� 5��FLASH�洢��д�����İ�ȫ��ֵ�� } ʵ������ 1��CPU������VLOʱ���£���VLO �ڲ�����ʱ�ӣ� ����������ʱ�ӣ���Լ12ǧ���������С���ˣ����ǽ�ͨ�����ӻ���LED��˸�ĺ�ɫ��������Լÿ3�����ʡ����ǿ�����ʱ��ϵͳĬ������״̬������ר��������VLO�����ǽ���ʹ���κ�ALCK����ʱ���ڴ�ʵ���ҹ���������Ӧ����ʶ����ACLK����VLOʱ�ӡ� #include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // �رտ��Ź���ʱ�� P1DIR = 0x40; // P1.6 ������� P1OUT = 0; // �ر�LED BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO ѡ���Ƶ����Դ ��32768 ����VLO IFG1 &= ~OFIFG; // ���OSCFault ��־ OFIFG=0��ʾ�ȶ� __bis_SR_register(SCG1 + SCG0); // �ر� DCO BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = VLO/8 while(1) { P1OUT = 0x40; // ����LED _delay_cycles(100); P1OUT = 0; // �ر� LED _delay_cycles(5000); } } 2��CPU�����ھ���(32768Hz)ʱ���£����ⲿ����ʱ�ӣ� ����Ƶ��Ϊ32768���ȣ�Լ3����VLO�����������ǰ��Ĵ�����ʹ�þ���ָʾ��Ӧ��˸��Լÿ��һ�Ρ���֪��Ϊʲô32768������һ������������Ϊ���������2��15�η�����˺������ü����ּ�����·����ÿ��һ�λ���� �����ֱ������ʱ��ʱ������ʶ��ACLK�����ⲿ����ʱ�ӡ� #include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // �رտ��Ź���ʱ�� P1DIR = 0x41; // P1.0 ��P1.6������� P1OUT = 0x01; // ����P1.0 BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz ���� while(IFG1 & OFIFG) { IFG1 &= ~OFIFG; // ��� OSCFault ��־ �ⲿ���� �ȴ�50us���� OFIFG=0��ʾ�ȶ� _delay_cycles(100000); // Ϊ�ɼ��ı�־��ʱ } P1OUT = 0; // �ر�P1 __bis_SR_register(SCG1 + SCG0); // �ر� DCO BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = 32768/8 while(1) { P1OUT = 0x40; // ���� LED _delay_cycles(100); P1OUT = 0; //�ر�LED _delay_cycles(5000); } } 3��CPU�����ھ���(32768Hz)��DCOʱ���£� ������Ƶ�ʣ����ǿ�������DCOԼ��1MHz����Ҳ��Ĭ���ٶȣ�����ˣ����ǽ���ʼ�л�MCLK��DCO�¡��ڴ����ϵͳ�У����ϣ��ACLK�����е�VLO��32768���Ⱦ�������ACLK������Ŀǰ�Ĵ������ھ��������У����ǻ��DCO���㡣 #include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // �رտ��Ź���ʱ�� if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { //�����dz���УDCO������,����FALSH����Ϣ�洢��,������Ǽ��FLASH���Ƿ��ڳ���У��ʱ������,��ΪFLASH��������1,����0xFF�ʹ����Ѿ��������� while(1); // If cal const erased, ���� } BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; //����DCOģʽ P1DIR = 0x41; // P1.0 ��P1.6������� P1OUT = 0x01; // P1.0 ���� BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz ѡ���Ƶ����Դ ��32768 ����VLO while(IFG1 & OFIFG) { IFG1 &= ~OFIFG; // ���OSCFault ��־ �ⲿ���� �ȴ�50us���� OFIFG=0��ʾ�ȶ� _delay_cycles(100000); // Ϊ�ɼ���־��ʱ } P1OUT = 0; // P1.6 �ر� // __bis_SR_register(SCG1 + SCG0); // �ر�DCO BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO while(1) { P1OUT = 0x40; // P1.6 ���� _delay_cycles(100); P1OUT = 0; //P1.6 �ر� _delay_cycles(5000); } } 4��CPU������DCOʱ���£����ڲ�����ʱ�ӣ� ������Ƶ�ʣ����ǿ�������DCOԼ��1MHz����Ҳ��Ĭ���ٶȣ�����ˣ����ǽ���ʼ�л�MCLK��DCO�¡��ڴ����ϵͳ�У����ϣ����VLO�����Ǿ���������ACLK������ACLK������Ŀǰ�Ĵ�������VLO�����У����ǻ��DCO���С� #include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // �رտ��Ź���ʱ�� if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { //�����dz���УDCO������,����FALSH����Ϣ�洢��,������Ǽ��FLASH���Ƿ��ڳ���У��ʱ������,��ΪFLASH��������1,����0xFF�ʹ����Ѿ��������� while(1); // If cal const erased,���� } BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // ����DCOģʽ P1DIR = 0x40; // P1.6 ������� P1OUT = 0; // P1�ر� BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO ѡ���Ƶ����Դ ��32768 ����VLO IFG1 &= ~OFIFG; // ��� OSCFault ��־ //__bis_SR_register(SCG1 + SCG0); // �ر�DCO BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO/8 while(1) { P1OUT = 0x40; // P1.6 �ر� _delay_cycles(100); P1OUT = 0; // P1.6 ���� _delay_cycles(5000); } } } �˿�ģ�飺 void �˿�������� { (1)�������: P1DIR|=BIT0; //����Ϊ��� P1OUT|=BIT0; //P1.0����� (2)��������: PIDIR&=~BIT0; //����Ϊ���� P1REN|=BIT0; //ʹ��������������ģʽ P1OUT|=BIT0; //����Ϊ�������跽ʽ //P1OUT&=~BIT0; //����Ϊ�������跽ʽ P1IES|=BIT3;//ѡ�������жϴ�����ʽ ���ش��� 0������ 1 �½��� ��ƽ���� P1IFG&=~BIT3; //����жϱ�־ P1IE|=BIT3; //��������ж�ʹ�� ����Ϊ�жϴ������ �ĸ�ʽ д��main��������������� void main() { .......; } //�жϺ����ĸ�ʽ #pragma vector=PORT1_VECTOR //�ж�������д,vector �ұ���д��Ӧ�����ж�,�½Ӷ�Ӧ�ж��������жϴ��� __interrupt void PORT_1(void)// __interrupt void���� ������ () { P1IFG&=~BIT3; //����жϱ�־ .......; //add your code here! } �ж�ģʽ��ɨ��ģʽ: ʵ������: #include <msp430g2452.h>//����Ϊ�ж�ģʽ void main(void) { WDTCTL=WDTPW+WDTHOLD; P1DIR|=BIT0; P1IE|=BIT3; //��������ж�ʹ�� P1IES|=BIT3;//ѡ�������жϴ�����ʽ ���ش��� 0������ 1 �½��� ��ƽ���� P1REN|=BIT3; P1OUT|=BIT3; P1IFG&=~BIT3;//���������жϱ�־���� __enable_interrupt(); //����ȫ���ж� while(1); } #pragma vector=PORT1_VECTOR //�ж�������д,�½Ӷ�Ӧ�ж��������жϴ��� __interrupt void PORT_1(void)// __interrupt void���� ������ () �Ǹ�ʽ { P1IFG&=~BIT3; while((P1IN&BIT3)==0); //���ּ�� P1OUT^=BIT0; } (3)ʹ�����ŵڶ�����: ��P1SEL.X P1SEL2.X USIP.X JTAG MODE CAPD.Y ADC10AE.X ��ͬ���� JATG ����TEST �� RST������ʵ�����ص��Ե� �����ڵ�Ƭ���Ĵ��� (1)����ģ�飺 �������� #include <msp430g2553.h> #define uchar unsigned char #define uint unsigned int void delay(uchar x) { uchar a,b; for(a=x;a>0;a--) for(b=100;b>0;b--); } void uart_init() { UCA0CTL1|= UCSWRST;//��ʾ�������ô��ڼĴ��� //UCA0CTL0|=UCMSB; UCA0CTL1|=UCSSEL_2; UCA0BR0=104; //������Ϊ9600 UCA0BR1=0;//������Ϊ9600 UCA0MCTL=UCBRS0; P1SEL|=BIT1+BIT2; //��P1.1 P1.2��Ϊ�ڶ����� P1SEL2 = BIT1 + BIT2; //��P1.1 P1.2��Ϊ�ڶ����� UCA0CTL1&=~UCSWRST;//���ڼĴ����������,�Ժ�㲻��д��,�������´� UCA0CTL1|= UCSWRST; IE2|=UCA0RXIE;//��������ж� ע��������˷����ж�,����д�����жϴ������ �жϺ�����жϱ�־ ����������� } //����Ϊ����һ���ַ��ij��� void send(uchar c) { UCA0TXBUF=c; while(!(IFG2&UCA0TXIFG)); IFG2&=~UCA0TXIFG; } //����Ϊ����һ���ַ����ij��� void Uart0Sends(char *s) { while(*s!='\0') { UCA0TXBUF=*s; while((IFG2&UCA0TXIFG)==0); //��ѯ�����Ƿ���� IFG2&=~UCA0TXIFG; //�������һ��־λ s++; } } void port_init() { P1DIR&=~BIT3; //���÷���Ϊ��� P1REN|=BIT3;//ʹ��������ģʽ P1OUT|=BIT3;//ѡ������ P1IES|=BIT3;//������ʽΪ�½��� P1IFG&=~BIT3;//����жϱ�־ P1IE|=BIT3;//�����ж�ʹ�� } void main() { WDTCTL=WDTPW+WDTHOLD; //�رտ��Ź� DCOCTL=CALDCO_1MHZ; //��DCO��Ϊ1mhz BCSCTL1=CALBC1_1MHZ; //��DCO��Ϊ1mhz uart_init(); //��ʼ������ port_init(); //��ʼ���˿� _BIS_SR(GIE); //����ȫ���ж� while(1) { Uart0Sends("b"); delay(20); } } #pragma vector=USCIAB0RX_VECTOR //���ڽ����ж� __interrupt void get() { while(!(IFG2&UCA0RXIFG)); //��־λ�� 1 ������� uchar c; c=UCA0RXBUF; //�����ַ� IFG2&=~UCA0RXIFG; //��������жϱ�־ //UCA0TXBUF=c; // ���ü���ʱ ͬʱ������ͱ�־λ //IFG2&=~UCA0TXIFG; send(c); send('m'); } #pragma vector=PORT1_VECTOR __interrupt void key() { send('k'); send('e'); send('y'); P1IFG&=~BIT3; } } ��ʱ��ģ�飺 ʵ������: #include <msp430g2553.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If calibration constants erased, trap CPU!! } BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag ʹ���ⲿ���� ��ü��ϵȴ����� BCSCTL1 |= DIVA_3; // ACLK = VLO/8 BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3; // MCLK = DCO/8, SMCLK = DCO/8 P1DIR = 0x40; // P1.6 output (green LED) P1OUT = 0; // LED off //TACTL = TASSEL_2 + MC_1; // SMCLK, UP mode TACTL = TASSEL_1 + MC_1; // ACLK, UP mode ���ö�ʱ��ʱ����Դ CCR0 = 5100;//Timer count 5100 ��ʱ����ʱʱ�� CCR1 = 2000;//Timer count 100 //�Ƚ������� CCTL0 = CCIE; //interrupt enabled ��ʱ��ʹ�� //CCTL1 = CCIE; //interrupt enabled �Ƚ���ʹ�� _BIS_SR(LPM0_bits + GIE);//Enter Low Power Mode //����CPUOFF ģʽ �����ж� for(;;); } // Timer A0 interrupt service routine #pragma vector=TIMER0_A0_VECTOR //��ʱ���ж� __interrupt void Timer_A0 (void) { P1OUT |= BIT6; // P1.6 output High } // Timer_A2 Interrupt Vector (TA0IV) handler #pragma vector=TIMER0_A1_VECTOR//�Ƚ����ж� __interrupt void Timer_A1(void) { switch( TA0IV ) //TA0IV=TAIV �Ƚ�����־λ { case 2: P1OUT &= ~BIT6;break;// P1.6 output Low //Ϊ2Ϊ CCR1�ж� case 4: break; //Ϊ4ΪCCR2�ж� case 10: //Ϊ10Ϊ����ж� default : } } } �Ƚ���ģ��: {ʵ������: #include<msp430g2553.h> /***************************************************** * �������� compare_init() * ���ܣ� ��ѹ�Ƚ��� ��ʼ�� **************************************************/ void compare_init() { CACTL1 =CARSEL+CAON+CAREF_2; // CAEX=0 CARSEL =1 �Ƚ��� Ϊ����Ƚ� ��ֵΪ0.5vcc �Ƚ��� CACTL2 =P2CA0; //���ñȽ������ P1.0ΪCOMP+ //CAPD |=CAPD0; //�Ͽ���IO������ } /***************************************************** * �������� compare() * ���ܣ� ��ѹ�Ƚ��� ���ܺ��� **************************************************/ int compare() { if((CACTL2 | 0xFE)==0xFF) //CACTL2 COUT ��1 { CACTL1 &= 0xfe; // CAIFG = 0 return 1; } else return 0; } void main() { compare_init() ; P1DIR|=BIT6; //д��֮��Ĭ�����1 P1OUT=0; while(1) { if(compare()) P1OUT|=BIT6; else P1OUT&=~BIT6; } } AD�ɼ�: #include <intrinsics.h> #include <msp430g2553.h> #include <msp430.h> void delay_1ms(void); void delay_nus(unsigned int n); void delay_nms(unsigned int n); void lcd_diaoyong(); void lcd_diaoyong1(); void uart_init() { UCA0CTL1|= UCSWRST;//��ʾ�������ô��ڼĴ��� //UCA0CTL0|=UCMSB; UCA0CTL1|=UCSSEL_2; UCA0BR0=104; //������Ϊ9600 UCA0BR1=0;//������Ϊ9600 UCA0MCTL=UCBRS0; P1SEL|=BIT1+BIT2; //��P1.1 P1.2��Ϊ�ڶ����� P1SEL2 = BIT1 + BIT2; //��P1.1 P1.2��Ϊ�ڶ����� UCA0CTL1&=~UCSWRST;//���ڼĴ����������,�Ժ�㲻��д��,�������´� UCA0CTL1|= UCSWRST; IE2|=UCA0RXIE;//��������ж� ע��������˷����ж�,����д�����жϴ������ �жϺ�����жϱ�־ ����������� } void send(unsigned char c) { UCA0TXBUF=c; while(!(IFG2&UCA0TXIFG)); IFG2&=~UCA0TXIFG; } unsigned int j=0,i=0; unsigned int shuzhi=0,qushu=0; void main() { WDTCTL = WDTPW + WDTHOLD; // �رտ��Ź� DCOCTL=CALDCO_1MHZ; //��DCO��Ϊ1mhz BCSCTL1=CALBC1_1MHZ; //��DCO��Ϊ1mhz ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled ����������ʱ������ ��ADC10���أ�ADC�ж�ʹ�� ADC10CTL1 = INCH_1; // input A1ģ���ź�����ѡ��ͨ��A1��p1.1 ADC10AE0 |= 0x02; // PA.1 ADC option selectʹp1.1����ADģ�������ź� P1DIR |= 0x01; // Set P1.0 to output direction TA0CCTL0 = CCIE; // CCR0 1ms�ж� TA0CCR0 = 312; TA0CTL = TASSEL_2 + MC_1; // SMCLK, upmode //_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt TA1CCTL0 = CCIE; // CCR0 1ms�ж� TA1CCR0 = 31200; TA1CTL = TASSEL_2 + MC_1; // SMCLK, upmode uart_init(); _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt while(1); } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A (void) { ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start��ʼת�� qushu=ADC10MEM; send(qushu/256); send(qushu%256); delay_1ms(); j++; __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) } #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1_A (void) { P1OUT ^= 0x01; __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) } #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) } void delay_1us(void) { asm("nop"); } void delay_nus(unsigned int n) { unsigned int i; for (i=0;i<n;i++) delay_1us(); } void delay_1ms(void) { unsigned int i; for (i=0;i<1140;i++); } void delay_nms(unsigned int n) { unsigned int i=0; for (i=0;i<n;i++) delay_1ms(); } #pragma vector=USCIAB0RX_VECTOR //���ڽ����ж� __interrupt void get() { unsigned char c; c=UCA0RXBUF; //�����ַ� IFG2&=~UCA0RXIFG; //��������жϱ�־ //UCA0TXBUF=c; //while(!(IFG2&UCA0TXIFG)); ���ü���ʱ ͬʱ������ͱ�־λ //IFG2&=~UCA0TXIFG; send(c); send('m'); }
下面是我们设计的一个MSP430的最小系统板,由于是第一次设计里面有一些地方设计的还不是很合理,但是是能用的。
我们的LaunchPad很难满足一个大系统的需要,就算兼容最强大的G2553也只有很少的RAM和FLASH,十几个可用的IO口,给设计带来很大麻烦,所以我们决定设计找一款功能强大一点的430,下面给大家介绍一下怎样可以以最节约的方式自己制作一个匹配更强大功能的430小系统板。
-上官方网站上搜索430的样片申请,其中包括了很多型号,我们对比了很多参数下来,认为MSP430F6638在所有可申请样片中是各方面性能最好的,一次还能申请2片哦!
-自己用Altium Designer设计一个小系统板,当然可以参考下我们的设计,并改进这个板子的不足。
-投板,大概只需100元左右就能弄到10块板子,大家可以组团投板,这样板子做好以后有什么问题也可以交流。
-自己焊接,如果你和我们一样在大学的创新基地,那么一块板子的成本基本就只要10元,因为需要的器件都可以免费拿,排针,跳线帽,座子,USB口应该都有提供。
注:由于原文件太大,所以导出PDF上传,如果需要原文件,请回复您的邮箱。
太给力了,刚刚在爱板网上买了launchPad,准备开始学习430,现上传我在网上搜集到的一些资料。
目录如下,希望我能申请成功,谢谢德仪的活动
1:430电容式触摸库使用手册
http://www.ti.com.cn/cn/lit/an/slaa491b/slaa491b.pdf
2:如何开始电容式触摸屏设计
http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?literatureNumber=zhcu033&fileType=pdf
3.MSP430各种详尽资料,基于launchPad
http://www.ideyi.org/bbs/article_1077_410845.html
4。MSP430 中文参考设计技术文献汇总(内容多)
http://www.ideyi.org/bbs/article_1077_445386.html
5.【MSP430程序库】整理
http://www.ideyi.org/bbs/article_1077_374597.html
6.【MSP 430 Launch Pad】基于Launch Pad资料大全(含学习笔记)
http://www.ideyi.org/bbs/article_1077_300138.html
Msp430自己的学习心得和一些常用的资料!是在江苏省电子设计竞赛时准备的资料,希望给更多的人用处把。。。。。。。
希望更多的人参与到这样的比赛和学习MSP430单片机中。。。。。。
MSP430最大的优势就是在保证高性能的同时还能很好控制最低功耗,超低功耗也得益于丰富的低功耗模式。
该文章来自利尔达网站,图文并茂详细介绍MSP430F5xx系列芯片通过低功耗4.5模式(LPM4.5)实现最低功耗的调试方法。
对MSP430低功耗设计开发具有很好的指导作用,同时文章对深入理解低功耗过程实现也有很好帮助!
故推荐之~
自己编写的各模块集成
#include <msp430g2553.h>
int i,j,k;
int temp =15;
int temp1 =10;
int temp2 =20;
int temp3 =2;
int temp4 =8;
void setuart(void);
void settimeA(void);
void compare(void);
void ADC(void);
void PO1(void);
//void settimeA1(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
DCOCTL =CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
P1DIR |= BIT0 + BIT6; // P1.0 output
setuart();
settimeA();
compare();
ADC();
PO1();
//ADC10CTL1 = INCH_4 + CONSEQ_3; // A1/A0, repeat multi channel
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
//串口初始化
void setuart(void)
{
P1SEL |= BIT1 + BIT2;
P1SEL2 |= BIT1 + BIT2 ;
UCA0CTL1 |= UCSSEL_2; // MCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0;
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
}
//定时器A初始化
void settimeA(void)
{
TACCTL0 = CCIE; // CCR0 interrupt enabled
TACCTL1 = CCIE; // CCR0 interrupt enabled
TACTL = TASSEL_2 + MC_2 ; // SMCLK, contmode ;
CCR0 =10000;
CCR1 =50000 ;
}
//比较器初始化
void compare(void)
{
CACTL1 = CAREF_1 + CAON + CAIE; // 0.5 Vcc = +comp, on 内部参考
CACTL2 = P2CA3 + P2CA2 + P2CA1; //通道7 P1.7
}
//ADC初始化
void ADC(void)
{
ADC10CTL0 = SREF_0 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE ; // 参考电压0.5V
ADC10CTL1 = CONSEQ_0 + INCH_5;
ADC10AE0 |= BIT5;
}
//外部中断初始化
void PO1(void)
{
P1OUT |= BIT3; // P1.4 set, else reset
P1REN |= BIT3; // P1.4 pullup
P1IE |= BIT3; // P1.4 interrupt enabled
P1IES |= BIT3; // P1.4 Hi/lo edge
P1IFG &= ~BIT3; // P1.4 IFG cleared
}
// Timer A interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
j++;
if(j>=10)
{
j=0;
//CCR0 += 50000; // Add Offset to CCR0
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = temp1; // TX -> RXed character 10
}
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void COMPARATOR (void)
{
switch( TA0IV )
{
case 2: // CCR1
{
// P1OUT ^= BIT0;
}
break;
case 4: break; // CCR2 not used
case 10: break; // overflow not used
}
i++;
if(i>=10)
{
i=0;
//CCR0 += 50000; // Add Offset to CCR0
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = temp; // TX -> RXed character 10
}
}
#pragma vector=COMPARATORA_VECTOR
__interrupt void COMPARATORA (void)
{
/* if ((CAOUT & CACTL2))
{
} // if CAOUT set, set P1.0
else
P1OUT &= ~0x01; // else reset
*/
for(k=0;k<5;k++)
P1OUT ^= BIT0;
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = temp2; // TX -> RXed character 20
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{ // temp++;
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
//ADC10CTL0 &= ~ENC ;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10(void)
{ // temp++;
temp3 = ADC10MEM;
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = temp3; // TX -> RXed character 2
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)
{
P1OUT ^= BIT6;
//P1IFG &= ~BIT3;
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = temp4; // TX -> RXed character 8
}
以前主要用C51与AVR系列,最近准备学习MSP430,收集的资料主要在阿莫电子论坛
http://www.amobbs.com/forum.php?mod=forumdisplay&fid=3064
http://www.amobbs.com/thread-4719380-1-1.html
这是MSP430F20系列的示例代码,我使用的就是F20系列的,看示例代码比看参考书来得更加直接,更贴近,如果是使用同一系类的430,您可以下载这份资料,如果不是,我也建议您去官方网站上下载示例代码。