void Openmv_Receive_Data(int16_t data)//接收Openmv传过来的数据 { static u8 state = 0; if(state==0&&data==0x2C) //开头 { state=1; RxBuffer1[RxCounter1++]=data; } else if(state==1) { state=2; RxBuffer1[RxCounter1++]=data; } else if(state==2) { RxBuffer1[RxCounter1++]=data; if(RxCounter1>=4||data == 0x5B) state=3; //the last of char is openmv[19] } else if(state==3) //state == 3 检测是否接受到结束标志 { if(RxBuffer1[RxCounter1-1] == 0x5B) { state = 0; // USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); } else //wrong thing { state = 0; RxCounter1=0; } } else //wrong thing { state = 0; RxCounter1=0; } }
时间: 2024-04-13 12:27:34 浏览: 86
USART.zip_usart接收a0_串口 发送
这段代码是用来接收Openmv传过来的数据的函数。它通过判断数据的值和状态来确定接收的过程。
首先,定义了一个静态变量state,并初始化为0。然后通过if语句判断当前状态state和接收到的数据data的值。
如果state为0且data为0x2C(逗号),表示接收到了开头标志,将state设置为1,并将data存入RxBuffer1数组中。
如果state为1,表示已经接收到了开头标志,将state设置为2,并将data存入RxBuffer1数组中。
如果state为2,表示正在接收数据阶段,将data存入RxBuffer1数组中。如果RxCounter1大于等于4(即已经接收了4个数据)或者data等于0x5B(即接收到了结束标志),则将state设置为3。
如果state为3,表示正在检测是否接收到结束标志。如果RxBuffer1数组的最后一个元素等于0x5B,则表示接收到了结束标志,将state设置为0;否则表示接收过程出错,将state设置为0,并将RxCounter1重置为0。
最后,如果state不满足以上条件,则表示接收过程出错,将state设置为0,并将RxCounter1重置为0。
请注意,该代码只是一个函数的片段,可能需要在其他地方使用和调用。
阅读全文