为什么串口接收不到数据呢?

2019-08-20 15:18发布

用的是原子的官方例程,找了好久没找到问题,求指点啊,就加了一个判断接收到的数据是不是以ff开头,ee结尾的。USART_RX_STA是u16变量,最高位用来判断是否接收完成,次高位是用来判断是不是接收到了ff头。找了一天多了还是没找出问题。
USART1_IRQHandler(void)                    //串口1中断服务程序
    {
    u8 Res;
    u16 temp;
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
    OSIntEnter();   
#endif
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
        {
        
        Res =USART_ReceiveData(USART1);    //读取接收到的数据
            
             if(Res==0xff)//接收中断(接收到的数据必须是0xff头)
            {   
                USART_RX_STA|=0x4000;//接收0xff标志位
             }
                        
        
        if(((USART_RX_STA&0x8000)==0)&&((USART_RX_STA&=0x4000)!=0))//接收未完成且数据是以0xff开头
            
            {  
                     if(Res==0xee)
                        {
                             
                            USART_RX_STA|=0x8000;    //接收完成了
                            Communication_Decode();                           
                        }
               

                    else //还没收到0Xee
                        {   
                                    
                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
               
                            temp=USART_RX_STA&0x3FFF;
                            USART_RX_STA++;
                            if(temp>(USART_REC_LEN-1))
                                {
                                 USART_RX_STA=0;//接收数据错误,重新开始接收   
                                }                                       
                                             
                        }
                                    
            }            
     }
#if SYSTEM_SUPPORT_OS     //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
    OSIntExit();                                               
#endif
}
#endif   




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
xuande
1楼-- · 2019-08-20 16:54

先确保能正确收到数据,
然后仿真器设断点,很容易查。


七年磨一剑
2楼-- · 2019-08-20 20:10
顶下,刚才只有一次达到目的,后面重新下载进去就又不行了,是什么问题。

一周热门 更多>