UCOSII 串口中断丢字节

2019-07-20 09:15发布

本帖最后由 losin 于 2018-1-27 14:11 编辑

/*****************中断服务函数***************************/

vu16 USART3_RX_STA=0;
vu16 USART3_TX_STA=0;
void USART3_IRQHandler(void)
{
    u8 res;        
    OSIntEnter();   
    if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) != RESET)//接收到数据
    {     
        res=USART_ReceiveData(USART3);              
        if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
        {
            if(USART3_RX_STA<USART3_MAX_RECV_LEN)    //还可以接收数据
            {
                TIM_SetCounter(TIM7,0);                       //计数器清空
                if(USART3_RX_STA==0)                 //使能定时器7的中断
                {
                    TIM_Cmd(TIM7, ENABLE);                     //使能定时器7
                }
                USART3_RX_BUF[USART3_RX_STA++]=res;    //记录接收到的值     
            }else
            {
                USART3_RX_STA|=1<<15;                //强制标记接收完成
            }
        }
    }                                               
    OSIntExit();               
}
//中断优先级已经设置最高
    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        //子优先级0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器


//串口3 跟sim900 通信时 出现 接收丢字节现象   本该是 +CMGR: "REC UNREAD","+8613560491039","@ZF","13/05/01,16:06:53+32"
    ALIENTEK ATK-SIM900A Module   实际 是 +CMR: "REC UEAD","+8613560491039","@ZF","13/05/01,16:06:53+32"
    ALIENTEK ATK-SIM900A Module ,少几个字节数据


















                                
}  

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 12:17
中断服务函数,OSIntExit之后,还有代码?
losin
2楼-- · 2019-07-20 13:55
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 19:09
你的串口发送速率降低一点试试
kbq1950361006
4楼-- · 2019-07-20 21:54
 精彩回答 2  元偷偷看……

一周热门 更多>