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:
问题解决了,但是具体原因还是没能找到,可能是我把处理数据的程序放在中断外面去处理有影响。
TI中文支持网



