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

MSP430FR5739串口发送数据出现卡死现象

如题,我实在Timer0中断里面进行数据发送,1S发送一次数据,代码如下:

//Timer0 Interrupt
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) Timer_A (void)
#else
#error Compiler not supported!
#endif
{
INT_FLAG = 1;
LED1_BLINK;
curr_timestp ++;
timestap_count ++;
wdt_count ++;
*(time_t*)FRAM_USER_START_ADDR = curr_timestp;
if(OSW_TEST_FLAG)
{
unsigned long temp1 = (osw_times_count * 1.0 / OSW_SWITCH_TIMES) * 100000;
if(osw_process_rate != temp1)
{
PutString("\t");
PutLong(osw_times_count);
PutString("\n");
}
}
}

,程序运行后每隔十几个小时就会卡死,卡死在

while (!(UCA1IFG&UCTXIFG));这里,每次都是卡死在PutString函数里面,函数代码如下:

void PutString(char *str)
{
unsigned char temp;
unsigned char i=0;
while((temp = str[i++]) != '\0')
{
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF = temp;
}
},

定时器初始化函数:

void TimerAInit()
{
TA0CCTL0 = CCIE; // TACCR0 interrupt enabled
TA0CCR0 = 32768;
TA0CTL = TASSEL_1 + MC_1; // SMCLK, UP mode
}串口初始化函数,开了两个串口,目前只有UCA1串口出问题

void UartInit()
{

// Configure UART pins
P2SEL1 |= BIT0 + BIT1 + BIT5 + BIT6;
P2SEL0 &= ~(BIT0 + BIT1 + BIT5 + BIT6);
// Configure UART 0
UCA0CTL1 |= UCSWRST;
UCA0CTL1 = UCSSEL_1; // Set ACLK = 32768 as UCBRCLK
UCA0BR0 = 3; // 9600 baud
UCA0BR1 = 0;
UCA0MCTLW |= 0x5300; // 32768/9600 – INT(32768/9600)=0.41
// UCBRSx value = 0x53 (See UG)
UCA0CTL1 &= ~UCSWRST; // release from reset
UCA0IE |= UCRXIE; // Enable RX interrupt
// Configure UART 1
UCA1CTL1 |= UCSWRST;
UCA1CTL1 = UCSSEL_1; // Set ACLK = 32768 as UCBRCLK
UCA1BR0 = 3; // 9600 baud
UCA1BR1 = 0;
UCA1MCTLW |= 0x5300; // 32768/9600 – INT(32768/9600)=0.41
// UCBRSx value = 0x53 (See UG)
UCA1CTL1 &= ~UCSWRST; // release from reset
UCA1IE |= UCRXIE; // Enable RX interrupt
}

目前另外一个版本的程序没有在定时器中断里面发送数据,暂时没有出问题,这个发送数据的程序测试了两次都是一段时间后会卡死,求大神解答。

灰小子:

单独看这几段程序看不出有什么问题。建议检查看有没有堆栈或者数据溢出、干扰等情况

YongHong Zhang:

回复 灰小子:

请教一下怎么查看堆栈或者数据溢出

HG:

先把接收中断关掉试试

UCA1IE |= UCRXIE; // Enable RX interrupt

YongHong Zhang:

回复 HG:

今天早上还比较容易出现卡死,后来发现供电电流不太够,现在增大电流在测试,不知道是不是这个原因,还需要进一步测试,只是不太明白,卡死在这一句的时候其他中断能正常进去,此时UCTXIFG标志位一直为0,所以就卡在这一句。

YongHong Zhang:

回复 YongHong Zhang:

最后添加超时判断解决问题,如果等待串口发送标志位时间过长,对串口进行复位操作。

YongHong Zhang:

回复 YongHong Zhang:

最后添加超时判断接觉问题,如果程序等待串口发送标志位时间过长,复位串口。

YongHong Zhang:

回复 HG:

最后添加超时判断接觉问题,如果程序等待串口发送标志位时间过长,复位串口。

YongHong Zhang:

回复 HG:

最后添加超时判断接觉问题,如果程序等待串口发送标志位时间过长,复位串口。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR5739串口发送数据出现卡死现象
分享到: 更多 (0)