搜索
bottom↓
回复: 36

求助 哪位大侠有 MSP430x2xx 例程 或是资料

[复制链接]

出0入0汤圆

发表于 2012-5-5 18:36:10 | 显示全部楼层 |阅读模式
本帖最后由 asunders 于 2012-5-5 18:40 编辑

用的是MSP430G2553,哪位大侠有 MSP430x2xx 模块例程或是中文手册的能不能发一下?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-5-5 18:36:45 | 显示全部楼层
发到邮箱asunder_love@126.com也可以~

谢谢~~

出0入0汤圆

 楼主| 发表于 2012-5-5 18:41:04 | 显示全部楼层
还有就是论坛的老资料都不能下载,莫大什么时候能够解决呢。。

出0入0汤圆

发表于 2012-5-5 19:02:05 | 显示全部楼层
样例已经发送。。。

出0入0汤圆

 楼主| 发表于 2012-5-5 19:27:39 | 显示全部楼层
风无痕 发表于 2012-5-5 19:02
样例已经发送。。。

已收到,谢谢~~
不过您的是MSPX14XX系列的例程,如果是MSPX2XX或者直接就是MSPG2553的例程就更好了

出0入0汤圆

 楼主| 发表于 2012-5-6 10:54:18 | 显示全部楼层
up...
waiting..

出0入0汤圆

发表于 2012-5-8 09:34:05 | 显示全部楼层
给你一个闪LED灯的,在launchpad上跑的。用户手册,数据手册到TI网站上下载吧,我就不浪费网站资源了。PS,别说你不读英文的文档

/******************************************************************************
*                  MSP-EXP430G2-LaunchPad User Experience Application
*
* 1. Device starts up in LPM3 + blinking LED to indicate device is alive   
*    + Upon first button press, device transitions to application mode
* 2. Application Mode
*    + Continuously sample ADC Temp Sensor channel, compare result against
*      initial value        
*    + Set PWM based on measured ADC offset: Red LED for positive offset, Green
*      LED for negative offset
*    + Transmit temperature value via TimerA UART to PC  
*    + Button Press --> Calibrate using current temperature  
*                       Send character '? via UART, notifying PC
******************************************************************************/
  
#include  "msp430x20x2.h"

#define     LED0                  BIT0
#define     LED1                  BIT6
#define     LED_DIR               P1DIR
#define     LED_OUT               P1OUT



#define     BUTTON                BIT3
#define     BUTTON_OUT            P1OUT
#define     BUTTON_DIR            P1DIR
#define     BUTTON_IN             P1IN
#define     BUTTON_IE             P1IE
#define     BUTTON_IES            P1IES
#define     BUTTON_IFG            P1IFG
#define     BUTTON_REN            P1REN

#define     TXD                   BIT1                      // TXD on P1.1
#define     RXD                   BIT2                      // RXD on P1.2

#define     APP_STANDBY_MODE      0
#define     APP_APPLICATION_MODE  1

#define     TIMER_PWM_MODE        0   
#define     TIMER_UART_MODE       1
#define     TIMER_PWM_PERIOD      10  
#define     TIMER_PWM_OFFSET      20

#define     TEMP_SAME             0
#define     TEMP_HOT              1
#define     TEMP_COLD             2

#define     TEMP_THRESHOLD        5  

//   Conditions for 9600/4=2400 Baud SW UART, SMCLK = 1MHz
#define     Bitime_5              0x05*4                      // ~ 0.5 bit length + small adjustment
#define     Bitime                13*4//0x0D   

#define     UART_UPDATE_INTERVAL  1000


unsigned char BitCnt;


unsigned char applicationMode = APP_STANDBY_MODE;
unsigned char timerMode = TIMER_PWM_MODE;

unsigned char tempMode;
unsigned char calibrateUpdate = 0;
unsigned char tempPolarity = TEMP_SAME;
unsigned int TXByte;
                              
/* Using an 8-value moving average filter on sampled ADC values */  
long tempMeasured[8];
unsigned char tempMeasuredPosition=0;
long tempAverage;

long tempCalibrated, tempDifference;


  
void InitializeLeds(void);
void InitializeButton(void);
void PreApplicationMode(void);                     // Blinks LED, waits for button press
void ConfigureAdcTempSensor(void);
void ConfigureTimerPwm(void);
void ConfigureTimerUart(void);  
void Transmit(void);
void InitializeClocks(void);

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  
  InitializeClocks();
  InitializeButton();
  InitializeLeds();
  PreApplicationMode();                     // Blinks LEDs, waits for button press
  
  /* Application Mode begins */
  applicationMode = APP_APPLICATION_MODE;
  ConfigureTimerPwm();
   
  __enable_interrupt();                     // Enable interrupts.
  
  
  /* Main Application Loop */
  while(1)
  {   

  }
}

void PreApplicationMode(void)
{   
  LED_DIR |= LED0 + LED1;
  LED_OUT |= LED0;                          // To enable the LED toggling effect
  LED_OUT &= ~LED1;
   
  BCSCTL1 |= DIVA_1;                        // ACLK/2
  BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO
  
  TACCR0 = 1200;                             //   
  TACTL = TASSEL_1 | MC_1;                  // TACLK = SMCLK, Up mode.  
  TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare
  TACCR1 = 600;  
  __bis_SR_register(LPM3_bits + GIE);          // LPM0 with interrupts enabled
}

void ConfigureTimerPwm(void)
{
  timerMode = TIMER_PWM_MODE;
  
  TACCR0 = TIMER_PWM_PERIOD;                              //   
  TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.
  TACCTL0 = CCIE;
  TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare
  TACCR1 = 1;
}


// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{

  {
    if (tempPolarity == TEMP_HOT)
      LED_OUT |= LED1;   
    if (tempPolarity == TEMP_COLD)      
      LED_OUT |= LED0;
    TACCTL0 &= ~CCIFG;              
  }
}

#pragma vector=TIMERA1_VECTOR
__interrupt void ta1_isr(void)
{
  TACCTL1 &= ~CCIFG;
  LED_OUT ^= (LED0 + LED1);
   
}

void InitializeClocks(void)
{

  BCSCTL1 = CALBC1_1MHZ;                    // Set range
  DCOCTL = CALDCO_1MHZ;
  BCSCTL2 &= ~(DIVS_3);                         // SMCLK = DCO / 8 = 1MHz  
}

void InitializeButton(void)                 // Configure Push Button
{
  BUTTON_DIR &= ~BUTTON;
  BUTTON_OUT |= BUTTON;
  BUTTON_REN |= BUTTON;
  BUTTON_IES |= BUTTON;
  BUTTON_IFG &= ~BUTTON;
  BUTTON_IE |= BUTTON;
}


void InitializeLeds(void)
{
  LED_DIR |= LED0 + LED1;                          
  LED_OUT &= ~(LED0 + LED1);  
}

/* *************************************************************
* Port Interrupt for Button Press
* 1. During standby mode: to exit and enter application mode
* 2. During application mode: to recalibrate temp sensor
* *********************************************************** */
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{   
  BUTTON_IFG = 0;  
  BUTTON_IE &= ~BUTTON;            /* Debounce */
  WDTCTL = WDT_ADLY_250;
  IFG1 &= ~WDTIFG;                 /* clear interrupt flag */
  IE1 |= WDTIE;  
   
  if (applicationMode == APP_APPLICATION_MODE)
  {
    tempCalibrated = tempAverage;
    calibrateUpdate  = 1;
  }
  else
  {
    applicationMode = APP_APPLICATION_MODE; // Switch from STANDBY to APPLICATION MODE
    __bic_SR_register_on_exit(LPM3_bits);        
  }   
}

#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
    IE1 &= ~WDTIE;                   /* disable interrupt */
    IFG1 &= ~WDTIFG;                 /* clear interrupt flag */
    WDTCTL = WDTPW + WDTHOLD;        /* put WDT back in hold state */
    BUTTON_IE |= BUTTON;             /* Debouncing complete */
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Return to active mode
}


出0入0汤圆

发表于 2012-5-8 09:43:22 | 显示全部楼层
在官网上没有l例程么?自己去下载很方便啊!

出0入0汤圆

发表于 2012-5-8 16:28:54 | 显示全部楼层
TI官网提供的例程代码:MSP430G2x53, MSP430G2x33, MSP430G2x13, MSP430G2x03 Code Examples  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-9 14:32:24 | 显示全部楼层
scty 发表于 2012-5-8 16:28
TI官网提供的例程代码:MSP430G2x53, MSP430G2x33, MSP430G2x13, MSP430G2x03 Code Examples  

  ...

谢谢~~~~

出0入0汤圆

 楼主| 发表于 2012-5-9 14:32:52 | 显示全部楼层
137703056 发表于 2012-5-8 09:43
在官网上没有l例程么?自己去下载很方便啊!

没去官网看过。。学校发的板子。。

出0入0汤圆

 楼主| 发表于 2012-5-9 14:34:14 | 显示全部楼层
yangsen 发表于 2012-5-8 09:34
给你一个闪LED灯的,在launchpad上跑的。用户手册,数据手册到TI网站上下载吧,我就不浪费网站资源了。PS, ...

谢谢~
英文手册也看,一个是MSP430X2XX FAMILY,一个是MSP430G2553。。但是没有例程学起来还是有点慢

出0入0汤圆

 楼主| 发表于 2012-5-9 14:37:55 | 显示全部楼层
scty 发表于 2012-5-8 16:28
TI官网提供的例程代码:MSP430G2x53, MSP430G2x33, MSP430G2x13, MSP430G2x03 Code Examples  

  ...

那个,目前有一个小问题,手册上说用PXSEL,PXSEL2选择外围器件,可是我怎么知道那个器件是主外围还是次外围呢?譬如P1.1有一下功能:P1.1/TA0.0/ A1/CA1,这两个寄存器分别设置什么值的时候分别是哪个功能呢?

出0入0汤圆

发表于 2012-5-9 15:06:22 | 显示全部楼层
asunders 发表于 2012-5-9 14:37
那个,目前有一个小问题,手册上说用PXSEL,PXSEL2选择外围器件,可是我怎么知道那个器件是主外围还是次外 ...

你去看芯片的用户手册,SLAU144,有讲IO的寄存器

出0入0汤圆

发表于 2012-5-9 15:15:42 | 显示全部楼层
asunders 发表于 2012-5-9 14:37
那个,目前有一个小问题,手册上说用PXSEL,PXSEL2选择外围器件,可是我怎么知道那个器件是主外围还是次外 ...

DATASHEET的IO口部分。

出0入0汤圆

 楼主| 发表于 2012-5-9 15:41:10 | 显示全部楼层
lcofjp 发表于 2012-5-9 15:15
DATASHEET的IO口部分。

我用的是MSP430 G2553,TI 的launch pad.
msp430x2xx family 的手册显示如下
8.2.5 FunctionSelectRegistersPxSELandPxSEL2
Portpinsareoftenmultiplexedwithotherperipheralmodulefunctions. Seethe device-specificdatasheet
to determinepinfunctions. EachPxSELandPxSEL2bitis usedto selectthe pinfunction -I/O portor
peripheralmodulefunction.
Table8-1.PxSELandPxSEL2
PxSEL2   PxSEL                     PinFunction
0            0                  I/O function is selected.
0            1                  Primaryperipheralmodulefunction is selected.
1            0                  Reserved.Seedevice-specificdatasheet.
1            1                  Secondaryperipheralmodulefunction is selected.
SettingPxSELx=1doesnotautomaticallysetthe pindirection.Otherperipheralmodulefunctions may
requirethe PxDIRxbitsto beconfiguredaccordingto the directionneededfor the modulefunction. See
the pinschematicsin the device-specificdatasheet.


然后我就去看msp430g2553的“ device-specificdatasheet”

然后只找到芯片图




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-9 15:42:14 | 显示全部楼层
yangsen 发表于 2012-5-9 15:06
你去看芯片的用户手册,SLAU144,有讲IO的寄存器

于是我还是不明白。。。图片上有的一个管脚有五六个功能,是怎么选择的。。

出0入0汤圆

发表于 2012-5-9 16:00:13 | 显示全部楼层
asunders 发表于 2012-5-9 15:41
我用的是MSP430 G2553,TI 的launch pad.
msp430x2xx family 的手册显示如下
8.2.5 FunctionSelectRegist ...

DATASHEET的Port Schematics部分,展开就是详细的引脚说明。

出0入0汤圆

发表于 2012-5-9 16:03:13 | 显示全部楼层
asunders 发表于 2012-5-9 14:37
那个,目前有一个小问题,手册上说用PXSEL,PXSEL2选择外围器件,可是我怎么知道那个器件是主外围还是次外 ...

我试用G2433的时候发现的,它与常见的F2132在设置上还是有点小的区别的,就是IO的功能选择设置,多了一个寄存器PxSEL2,例如需要同时设置P2SEL、P2SEL2的值。
具体请仔细看数据手册吧。

出0入0汤圆

 楼主| 发表于 2012-5-9 16:13:32 | 显示全部楼层
其实MSP430有没有像STM32那样的强大的库呢?以前用STM32的时候都是上来改几个参数就可以跑了。。

出0入0汤圆

 楼主| 发表于 2012-5-9 16:17:58 | 显示全部楼层
lcofjp 发表于 2012-5-9 16:00
DATASHEET的Port Schematics部分,展开就是详细的引脚说明。

呃。。请问是哪个data sheet?找了半天没找到

出0入0汤圆

 楼主| 发表于 2012-5-9 16:19:59 | 显示全部楼层
lcofjp 发表于 2012-5-9 16:00
DATASHEET的Port Schematics部分,展开就是详细的引脚说明。

噢。。找到了

出0入0汤圆

 楼主| 发表于 2012-5-9 16:26:25 | 显示全部楼层
lcofjp 发表于 2012-5-9 16:00
DATASHEET的Port Schematics部分,展开就是详细的引脚说明。

看了一下,终于明白了~~
谢谢~~

出0入0汤圆

发表于 2012-5-9 16:35:01 | 显示全部楼层
asunders 发表于 2012-5-9 16:26
看了一下,终于明白了~~
谢谢~~

不客气。

出0入0汤圆

发表于 2012-5-9 16:38:09 | 显示全部楼层
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  P1DIR = 0x41;                            // Set P1.0 to output direction
  while(1)
  {
    volatile unsigned int i;
    P1OUT ^= 0x41;                          // Toggle P1.0 using exclusive-OR
    i = 0xf000;                              // Delay
    while (i--);
  }
}

出0入0汤圆

 楼主| 发表于 2012-5-10 22:25:56 | 显示全部楼层
dianzichina 发表于 2012-5-9 16:38
int main( void )
{
  // Stop watchdog timer to prevent time out reset

其实我想要的是各模块的程序,组建一个类似STM32的库。。。为啥都给我个LED。。

出0入0汤圆

发表于 2012-5-11 08:25:22 | 显示全部楼层
不是我打击你,你这标题没说清你要干吗啊?连内容也没说要STM32库,,,,小心有人举报你。。。。。。

出0入0汤圆

发表于 2012-5-11 09:10:13 | 显示全部楼层
TI官网上的资料很全的。

出0入0汤圆

 楼主| 发表于 2012-5-11 11:03:38 | 显示全部楼层
dianzichina 发表于 2012-5-11 08:25
不是我打击你,你这标题没说清你要干吗啊?连内容也没说要STM32库,,,,小心有人举报你。。。。。。 ...

我的却不要STM32库阿..我就是要我标题写的那些资料..

出0入0汤圆

 楼主| 发表于 2012-5-11 11:04:05 | 显示全部楼层
avrgogo 发表于 2012-5-11 09:10
TI官网上的资料很全的。

英文不好上英文网站很头痛..

出0入0汤圆

 楼主| 发表于 2012-5-11 11:05:28 | 显示全部楼层
dianzichina 发表于 2012-5-11 08:25
不是我打击你,你这标题没说清你要干吗啊?连内容也没说要STM32库,,,,小心有人举报你。。。。。。 ...

我是要资料,然后资料齐全的话可以自己弄一个齐全的库,然后比喻了一下,"像STM32那样的库"..

出0入0汤圆

 楼主| 发表于 2012-5-11 11:10:30 | 显示全部楼层
lcofjp 发表于 2012-5-9 16:35
不客气。

那个,看数据手册和Laucnpad的例程研究了半天都没搞懂PWM波是怎么用定时器生成的,大侠能不能解释一下?
void pwm_init(void)                                //使用定时器1
{
        P2DIR |=(BIT2+BIT4);                //P2.4和P2.2设置为输出模式
        P2SEL |=(BIT2+BIT4);                //设置P2.4和P2.2为外围模块使用
        TA1CCR0=10000;                                //设定PWM的周期

        TA1CCTL1=OUTMOD_7;                        //设定CCR1单元为复位/置位模式,第一束PWM波
        TA1CCR1=2000;                                //装入CCR1的占空值

        TA1CCTL2=OUTMOD_7;                        //设定CCR2单元为复位/置位模式,第二束PWM波
        TA1CCR2=1000;                                //装入CCR2的占空值

        TA1CTL=TASSEL_2+MC_1;                //计数器0的时钟选择为SMCLK,增计数模式
}


我用这个可以使,但是lauchpad 的例程上也说生成了pwm波,就没找到是哪里控制的,也没发现和上面那个小程序类似的控制模块。所以虽然有个能用的小程序,但是一塌糊涂。。

出0入0汤圆

发表于 2012-5-11 11:14:56 | 显示全部楼层
asunders 发表于 2012-5-11 11:05
我是要资料,然后资料齐全的话可以自己弄一个齐全的库,然后比喻了一下,"像STM32那样的库".. ...

不要总想着库,你已经走入误区了。
430的外设差别太大,库通用不起来。5和6系列好像有库,这两个系列强大一些。
430对外设操作的语句都很精简,没有有多少条,封装成库反而没啥效率了。
TI已经给出了对各个系列的各种外设操作的基本程序,你可以好好看看,愿意封装的话可以自己封一个。

出0入0汤圆

发表于 2012-5-11 11:23:45 | 显示全部楼层
asunders 发表于 2012-5-11 11:10
那个,看数据手册和Laucnpad的例程研究了半天都没搞懂PWM波是怎么用定时器生成的,大侠能不能解释一下?
v ...

仔细看下user's guide的相关部分吧,都有非常详细描述,有很多模式像定时器,输入捕获,比较输出。我对430的外设操作也不是很熟悉。

出0入0汤圆

 楼主| 发表于 2012-5-15 23:42:24 | 显示全部楼层
lcofjp 发表于 2012-5-11 11:23
仔细看下user's guide的相关部分吧,都有非常详细描述,有很多模式像定时器,输入捕获,比较输出。我对43 ...

您好,我这几天一直在看User's guide
看到比较器部分的时候有一点点不大理解的地方。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-15 23:46:01 | 显示全部楼层
lcofjp 发表于 2012-5-11 11:23
仔细看下user's guide的相关部分吧,都有非常详细描述,有很多模式像定时器,输入捕获,比较输出。我对43 ...

就是说,是用来改变采样时间?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-15 23:47:26 | 显示全部楼层
asunders 发表于 2012-5-15 23:42
您好,我这几天一直在看User's guide
看到比较器部分的时候有一点点不大理解的地方。
...

置一和不置一有什么区别呢?上下联通的两端都有CA1,CA2,这两个有什么区别和联系呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 13:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表