MSP430串口接收数据,只进接收中断一次

2019-07-23 14:27发布

发送字符串:5F0600000200005B510600000C0000060100011603290728004E5F060000030000FEA4
为什么只能进中断一次 ,第二次再发就进不了中断了?而关闭串口助手,再次打开就又可以进中断一次。



#include  <msp430x16x.h>

unsigned char RecBuf[35]; //接收数据缓存
unsigned char Rindex;     //接收数据计数
unsigned char Rinflag;    //接收血糖数据包完毕标志
/*******************************************************/
void Uart_init(void);
/*******************************************************/
void Uart_init(void)
{
    P3SEL |= 0x30;                            // 选择P3.4TX和P3.5RX做UART通信端口
    ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受
    UCTL0 |= CHAR;                            // 选择8位字符
    UTCTL0 |= SSEL1;                          // UCLK = SMCLK时钟源选择8M
    UBR00 = 0x8A;                             // 波特率57600设定
    UBR10 = 0x00;                             //
    UMCTL0 = 0xDE;                            // Modulation
    UCTL0 &= ~SWRST;                          // 初始化UART状态机
    IE1 |= URXIE0;                            // 使能USART0的接收发送中断
}
/*******************************************************/
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;              // 关闭看门狗
    volatile unsigned int i;
    BCSCTL1 &= ~XT2OFF;                       // XT2on
    do
     {
      IFG1 &= ~OFIFG;                        // Clear OSCFault flag
      for (i = 0xFF; i > 0; i--);            // Time for flag to set
     }
    while ((IFG1 & OFIFG));                   // OSCFault flag still set
    BCSCTL2 |= SELM_2 + SELS;                 // MCLK = SMCLK = XT2 (safe)
   
    Uart_init();
   
    while(1)
    {
     _BIS_SR(LPM0_bits+GIE);
     //IE1 |= URXIE0;                            // 使能USART0的接收发送中断
    }
}

#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
    RecBuf[Rindex++] = RXBUF0;
    if(RecBuf[Rindex-2]==0xFE) //接收完毕
    {
        Rindex=0;
        if(RecBuf[0]==0x5F)    //帧头正确
        {
          Rinflag=1;  
        }
    }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。