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;  
        }
    }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
baiyu00747
1楼-- · 2019-07-24 14:16
smilingangel 发表于 2016-3-25 16:02
这个跟你进入的低功耗模式有关系的

我试过 把低功耗去掉也是那样子  智能接收一次数据包。。有一种感觉就是貌似串口里接收一组数据完毕后有一个字节数据没有读出来,导致第二个进不了中断。
baiyu00747
2楼-- · 2019-07-24 17:39
 精彩回答 2  元偷偷看……
baiyu00747
3楼-- · 2019-07-24 22:01
angerbird 发表于 2016-3-24 17:19
这个就看是否及时清除掉中断标志位的。

430单片机的中断标志是读完数据后自动清除读标志位的吧
baiyu00747
4楼-- · 2019-07-25 02:46
tongbu2015 发表于 2016-3-24 16:15
这个进一次中断后及时清除相关的中断标志为了么?

430单片机的中断标志是读完数据后自动清除读标志位的
数码小叶
5楼-- · 2019-07-25 06:56
猜测中断处理函数逻辑有问题
dirtwillfly
6楼-- · 2019-07-25 12:42
还是建议楼主观察一下时序,看看是通讯的问题,还是程序出问题了。

一周热门 更多>