STM32串口数据发送与接收

2019-08-20 18:07发布

有个问题困扰好久了,怎么写也写不好,向大神们伸个手。现在有这样一组数据:0xFF, 0x01, 0x28, 0xAA。其中0xFF为数据起始判断,相当于报头;0xAA为结束判断,相当于报尾;中间两个 0x01和 0x28是有用的数据。怎样设计才能让单片机在接收这组数据时返回中间那两个数据?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
likunxue
2019-08-20 20:46
本帖最后由 likunxue 于 2016-3-25 21:57 编辑

简单实现方法如下,
定义一个缓存区数级及一个接收指针
#define         SUA_SIZE              10u       //串口接收,发送缓存区大小  

vu8 RX_STR = 0;                                 //串口接收缓存区指针
vu8 RX_Buf[SUA_SIZE];                        //串口接收缓存数据区


void USART2_IRQHandler(void)
     {                     
     if(USART2->SR&(1<<5))       //接收到数据
       {  
       u8 K = USART2->DR;        //读取串口数据  
       USART2->SR &= ~(1<<5);   //清中断接收标志位   
      switch(k)
             {
             case 0XFF:{ RX_STR = 0;   RX_Buf[RX_STR ++]  = K;  }break;  //接收指针清零
             case 0xAA:{
                           if(( RX_Buf[0] == 0xff) && (RX_Buf[3] == 0xaa))
                            {
                            while((USART2->SR & 0x80)==0);       //等待发送区空  
                            USART2->DR = RX_Buf[1];                 
                            while((USART2->SR & 0x80)==0);       //等待发送区空  
                            USART2->DR = RX_Buf[2];           
                           while((USART2->SR & 0x40)==0);       //等待发送结束   
                            }
                          }brak;
             default:{
                       if(RX_STR >SUA_SIZE)RX_STR = 0; //接收缓存区溢出,重置计录指针为零      
                       RX_Buf[RX_STR ++] = k ;//保存接收数据
                       }break;
             }
       }
  }









一周热门 更多>