野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14439|回复: 4

串口问题,希望各位帮我解决下。

[复制链接]
发表于 2016-8-15 18:06:45 | 显示全部楼层 |阅读模式
首先,我发一个或多个个字符串 或者 数据不带结束标志位 0X0d 0x0a ,此时串口助手不会打印。
接下来,我发一个字符串或者一个数据带结束标志位  0X0d 0x0a ,此时串口助手会把我之前不带标志位的数据也打印处理
QQ图片20160815180032.png
不带结束标志位 的数据123

QQ图片20160815180152.png
带结束标志位的数据,456,会打印第一次不带结束标志位的数据

结果统计是,只要是发 不带结束标志数据,下次就好打印所有不带标志的数据,
如果每次都带结束标志就不会出现这情况。
  1. /*******************************************************************************
  2. * 函数名  : USART1_IRQHandler
  3. * 描述    : 串口1中断服务程序
  4. * 输入    : 无
  5. * 返回    : 无
  6. * 说明    : 1)、只启动了USART1中断接收,未启动USART1中断发送。
  7. *           2)、接收到0x0d 0x0a(回车、"\r\n")代表帧数据接收完成
  8. *******************************************************************************/
  9. void USART1_IRQHandler(void)                       
  10. {
  11.         u8 Res=0;

  12.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  13.         {
  14.                 Res =USART_ReceiveData(USART1); //读取接收到的数据(USART1->DR)
  15.                
  16.                 Usart1_R_Buff[Usart1_R_Count++] = Res;
  17.                 if(Usart1_R_State == 0)//数据接收未完成
  18.                 {
  19.                         if(Res == 0x0d)//接收到0x0d,下一个字节接收到0x0a则接收完成
  20.                         {
  21.                                 Usart1_R_State =2;
  22.                         }
  23.                 }
  24.                 else if(Usart1_R_State == 2)
  25.                 {
  26.                         if(Res == 0x0a)//上一个字节接收到0x0d,这个字节接收到oxoa则接收完成
  27.                         {
  28.                                 Usart1_R_State =1;//数据接收完成
  29.                         }
  30.                         else//接收错误
  31.                         {
  32.                                 Usart1_R_State =0;
  33.                                 Usart1_R_Count =0;
  34.                         }
  35.                 }
  36.                 if(Usart1_R_Count >= USART1_REC_MAXLEN)//接收数据长度走出接收数据缓冲区
  37.                 {
  38.                         if((Usart1_R_Buff[USART1_REC_MAXLEN-2] != 0x0d) || (Usart1_R_Buff[USART1_REC_MAXLEN-1] != 0x0a))
  39.                         {
  40.                                 Usart1_R_Count =0;
  41.                                 Usart1_R_State =0;
  42.                         }
  43.                 }                  
  44.         }
  45. }
复制代码


回复

使用道具 举报

发表于 2016-8-15 21:24:24 | 显示全部楼层
没搞清楚你这是什么意思,是串口调试助手的回车没正常显示?
回复 支持 反对

使用道具 举报

发表于 2016-8-15 22:59:47 | 显示全部楼层
不懂这个,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-16 08:18:45 | 显示全部楼层
flyleaf 发表于 2016-8-15 21:24
没搞清楚你这是什么意思,是串口调试助手的回车没正常显示?

我的判断结束标志就是回车,  如果没有回车就不会打印,等下一个回车,但是下一个回车会打印我那些没有回车的数据。
回复 支持 反对

使用道具 举报

发表于 2016-8-16 10:08:34 | 显示全部楼层
a18270826679 发表于 2016-8-16 08:18
我的判断结束标志就是回车,  如果没有回车就不会打印,等下一个回车,但是下一个回车会打印我那些没有回 ...

这估计是串口调试助手的问题,换一个来试下,可能串口调试助手会缓冲接收到的数据
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-29 02:06 , Processed in 0.033987 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表