TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430掉电上电的问题

RT:

我使用MSP430f2132 + NRF905进行数据发送,在Debugger模式下数据发送都正常,运行中从Debugger模式退出也是正常的。从Debugger模式退出后,重新上电,就没有数据发送出来了。已测试接收端正常。代码只是通过定时器定时发送数据,没有低功耗模式。看了很多帖子,大家遇到这个问题的也蛮多,但还是没有解决这个问题。不知道是否是关于POR这一块的问题呢?

kingper wu:

大虾们可以给点解决思路么,现在感觉有些无从下手了。

灰小子:

通讯不正常,一般和POR没啥关系,建议观察一下msp430和nrf之间的通讯时序是否正常

kingper wu:

回复 灰小子:

找到问题了,好像是时钟没有设好。因为设备要求进入低功耗LPM3,外接有32KHz的晶振,我的时钟配置如下:

void InitSys(void)
{unsigned char i;BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0 + DIVA_0;delay();_BIC_SR(OSCOFF);do{IFG1 &= ~OFIFG;// 清除振荡器失效标志for (i = 0xFF; i > 0; i--);//稳定时间}while ((IFG1 & OFIFG) != 0);//如果振荡器失效标志存在BCSCTL2 |= SELM_3 + DIVM_0 + SELS + DIVS_0;
}

低功耗的话,是否是要配置成:ACLK = MCLK = SMCLK = 32KHz

void Init_Timer_A(void)//初始化定时器
{TA0CTL = TASSEL_1 + TACLR;// ACLK, upmode, 不分频,32768HZTA0CCR0 = 65535;//定时2sTA0CTL|= MC_1;TimerA_Interrupt_Enable();//TA0CCTL0|= CCIE;// CCR0 中断使能
}

我用了定时器定时2s发送数据,但是测试发现是在6s左右,不知是哪里出了问题。

Ling Zhu2:

回复 kingper wu:

kingper wu

找到问题了,好像是时钟没有设好。因为设备要求进入低功耗LPM3,外接有32KHz的晶振,我的时钟配置如下:

void InitSys(void)
{unsigned char i;BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0 + DIVA_0;delay();_BIC_SR(OSCOFF);do{IFG1 &= ~OFIFG;// 清除振荡器失效标志for (i = 0xFF; i > 0; i--);//稳定时间}while ((IFG1 & OFIFG) != 0);//如果振荡器失效标志存在BCSCTL2 |= SELM_3 + DIVM_0 + SELS + DIVS_0;
}

低功耗的话,是否是要配置成:ACLK = MCLK = SMCLK = 32KHz

void Init_Timer_A(void)//初始化定时器
{TA0CTL = TASSEL_1 + TACLR;// ACLK, upmode, 不分频,32768HZTA0CCR0 = 65535;//定时2sTA0CTL|= MC_1;TimerA_Interrupt_Enable();//TA0CCTL0|= CCIE;// CCR0 中断使能
}

我用了定时器定时2s发送数据,但是测试发现是在6s左右,不知是哪里出了问题。

kingper wu:

回复 Ling Zhu2:

看手册上使用VLO的条件是LFXT1Sx = 10 when XTS = 0.我看寄存器LFXT1Sx是等于0的。

#pragma vector=TIMER0_A0_VECTOR//定时器中断函数
__interrupt void Timer0_a3(void)
{TimerA_Interrupt_Disable();//屏蔽定时器中断Send_HeartBeat_Flag = TRUE;//发送数据标志位//delay_ms(1000);//TA0CCTL0 &= ~CCIFG;LPM3_EXIT;TimerA_Interrupt_Enable();//开定时器中断
}

我主程序while循环中会进入LPM3,在定时器中断到达时置标志位,退出LPM3,这时是4s一次发送数据(设定2s)。

while(1){LPM3;_NOP();}
}
//定时发送数据#pragma vector=TIMER0_A0_VECTOR//定时器中断函数
__interrupt void Timer0_a3(void)
{TA0CCTL0&= ~CCIE;//屏蔽定时器 中断PWR_UP_HIGH;//上电TX_EN_HIGH;//使能发送SPI_Write(WRITE_TX_PAYLOAD, Tx_buf, TX_PLOAD_WIDTH);// 写数据到PLOADTRX_CE_HIGH;//发送数据while(CheckDR() != 1);// 等待发送完成TRX_CE_LOW;//关闭发送TX_EN_LOW;//待机模式PWR_UP_LOW;//掉电//P1OUT&=~LED;//灭灯TA0CCTL0|= CCIE;//kai 定时器 中断
}
当我把发送数据的过程放在定时器中断函数里面时,这时数据是2s发送一次是正常的。

kingper wu:

回复 kingper wu:

问题解决了,但是具体原因还是没能找到,可能是我把处理数据的程序放在中断外面去处理有影响。

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430掉电上电的问题
分享到: 更多 (0)