大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-7-20
|
首先,我发一个或多个个字符串 或者 数据不带结束标志位 0X0d 0x0a ,此时串口助手不会打印。
接下来,我发一个字符串或者一个数据带结束标志位 0X0d 0x0a ,此时串口助手会把我之前不带标志位的数据也打印处理
不带结束标志位 的数据123
带结束标志位的数据,456,会打印第一次不带结束标志位的数据
结果统计是,只要是发 不带结束标志数据,下次就好打印所有不带标志的数据,
如果每次都带结束标志就不会出现这情况。
- /*******************************************************************************
- * 函数名 : USART1_IRQHandler
- * 描述 : 串口1中断服务程序
- * 输入 : 无
- * 返回 : 无
- * 说明 : 1)、只启动了USART1中断接收,未启动USART1中断发送。
- * 2)、接收到0x0d 0x0a(回车、"\r\n")代表帧数据接收完成
- *******************************************************************************/
- void USART1_IRQHandler(void)
- {
- u8 Res=0;
- if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- Res =USART_ReceiveData(USART1); //读取接收到的数据(USART1->DR)
-
- Usart1_R_Buff[Usart1_R_Count++] = Res;
- if(Usart1_R_State == 0)//数据接收未完成
- {
- if(Res == 0x0d)//接收到0x0d,下一个字节接收到0x0a则接收完成
- {
- Usart1_R_State =2;
- }
- }
- else if(Usart1_R_State == 2)
- {
- if(Res == 0x0a)//上一个字节接收到0x0d,这个字节接收到oxoa则接收完成
- {
- Usart1_R_State =1;//数据接收完成
- }
- else//接收错误
- {
- Usart1_R_State =0;
- Usart1_R_Count =0;
- }
- }
- if(Usart1_R_Count >= USART1_REC_MAXLEN)//接收数据长度走出接收数据缓冲区
- {
- if((Usart1_R_Buff[USART1_REC_MAXLEN-2] != 0x0d) || (Usart1_R_Buff[USART1_REC_MAXLEN-1] != 0x0a))
- {
- Usart1_R_Count =0;
- Usart1_R_State =0;
- }
- }
- }
- }
复制代码
|
|