STM32串口数据发送与接收

2019-08-20 18:07发布

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
likunxue
1楼-- · 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;
             }
       }
  }









FreeRTOS
2楼-- · 2019-08-21 01:36
想问下楼主,假如数据是:0xFF, 0x01, 0xAA, 0x28, 0xAA,你觉得是否应该将中间的0xAA进行转义?
745021926
3楼-- · 2019-08-21 04:15
开辟个缓冲区,需要什么取什么
星星王
4楼-- · 2019-08-21 04:44
路过随便看看,貌似应该把通信协议先理清,对数据有效性进行有效判定
likunxue
5楼-- · 2019-08-21 08:19
 精彩回答 2  元偷偷看……
likunxue
6楼-- · 2019-08-21 10:20
星星王 发表于 2016-3-26 13:43
路过随便看看,貌似应该把通信协议先理清,对数据有效性进行有效判定

我只是简单的回复了1楼的要求, 当然工程中使用不紧需要高效稳定的通信协议,还要有超强的处错处理能力, 但这样就不是两三句能说得清的了

一周热门 更多>