OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2924|回复: 1

关于串口函数的问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-27
在线时间
2 小时
发表于 2016-4-27 14:27:30 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 liangyf718 于 2016-4-27 14:29 编辑

我要做一个将条形码扫描枪数据通过串口2读取,然后用串口1发送到电脑串口助手的程序,由于条形码最后是以0x0d结束所有对代码做了以下修改:
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  {
  Res =USART_ReceiveData(USART2);//(USART1->DR); //读取接收到的数据
  
  if((USART2_RX_STA&0x8000)==0 )//接收未完成
   {
   if((USART2_RX_STA&0x4000))//接收到了0x0d
    {
    //if(Res!=0x0d)USART2_RX_STA=0;//接收错误,重新开始
    //else USART2_RX_STA|=0x8000; //接收完成了

    USART2_RX_STA|=0x8000;
    }
   else //还没收到0X0D
    {
    if(Res==0x0d)USART2_RX_STA|=0x4000;
    else
     {
     USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
     USART2_RX_STA++;
     if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收  
     }   
    }
   }      
     }
然后再main函数里面这些写:
  if(USART2_RX_STA&0x8000)
  {        
   len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
  //printf("\r\n您发送的消息为:\r\n\r\n");
   for(t=0;t<len;t++)
   {
    USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束   
   }
   //printf("\r\n");//插入换行  
   USART2_RX_STA=0;
  }

第一段串口服务程序红色部分注释掉了,测试了可以,但是在main函数里面 扫码枪扫两次才能传到串口助手一次,如果将main函数里面的蓝色部分注释掉,串口助手接收不到完整的条码数字,测试结果


(条码内容9787512411005) 2411005 2411005 2411005 2411005 2411005 2411005 2411005
求助问题:
1、在接收中断服务程序中的改法是否有问题;
2、为什么 注释了printf函数 就无法正确发送




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
发表于 2016-4-27 16:51:02 | 显示全部楼层
你是以字符形式发送的吗?如果这串字符转换为hex里面有0x0d,你就不会发送成功的,因为判断到0x0d之后不是0x0a,又重新开始了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 08:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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