OpenEdv-开源电子网

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

写了个串口中断接收判断的程序,发现要用串口助手点发送2次才能正确接受,迷惑,请大神指点

[复制链接]

17

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-11-21
在线时间
0 小时
发表于 2014-11-26 16:06:05 | 显示全部楼层 |阅读模式
5金钱
接受不成功返回发送FF,为什么我要点两次发送才会接受成功?求大神指点
void USART1_IRQHandler(void)             //
{
u8 Res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //例程里的
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //


  if(Res==0XED)//数据头
  {
  sta1=1;//置第一位接受成功标志下同
  len-=1;
  USART_SendData(USART1,0X01);//发送第一位接受成功标志便于我在串口助手上看到接受判断成功了下同
  }
  else if(Res==0X0c && sta1==1 && len==10)
{
       sta2=1;
       len-=1;
       USART_SendData(USART1,0X02);
}
else if(Res==0X75 && sta2==1 && len==9)
{
       sta3=1;
       len-=1;
       USART_SendData(USART1,0X03);
}
else if(Res==0X01 && sta3==1 && len==8)
{
       sta4=1;
       len-=1;
       USART_SendData(USART1,0X04);
}
else if(sta4==1 && len==7)
{
       cha=Res;
       len-=1;
       sta5=1;
       USART_SendData(USART1,0X05);  
}
else if(sta5==1 && len==6)
{
       cha=Res;
       len-=1;
       sta6=1;
      USART_SendData(USART1,0X06);
}
else if(sta6==1 && len==5)
{
       grp1=Res;
       len-=1;
       sta7=1;
       USART_SendData(USART1,0X07);
}
else if(sta7==1 && len==4)
{
       grp2=Res;
       len-=1;
      sta8=1;
     USART_SendData(USART1,0X08);
}
else if(sta8==1 && len==3)
{
       grp3=Res;
       len-=1;
      sta9=1;
      USART_SendData(USART1,0X09);
}
else if(sta9==1 && len==2)
{
       ctr=Res;
       len-=1;
       sta10=1;
       USART_SendData(USART1,0X10);
}
else if(sta10==1 && len==1)
{
       wtime=Res;
       len-=1;
       sta11=1;
      USART_SendData(USART1,0X11);
}
else if(sta11==1 && len==0)
{
       chek=Res;
       sta11=0;
       USART_SendData(USART1,0X12);
}
  else 
{
  USART_SendData(USART1,0XFF);
  sta1=0;//清标志位
  sta2=0;
  sta3=0;
  sta4=0;
  sta5=0;
  sta6=0;
  sta7=0;
  sta8=0;
  sta9=0;
  sta10=0;
  sta11=0;
  len=11;
  cha=0;
  grp1=0;
  grp2=0;
  grp3=0;
  ctr=0;
  wtime=0;
  chek=0;
  chek1=0;
  acceptfinish=0;

      }
 
}
 
 }


最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 多谢原子哥指点,解决了,原因是接受成功没初始化
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2014-11-21
在线时间
0 小时
 楼主| 发表于 2014-11-26 16:06:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢原子哥指点,解决了,原因是接受成功没初始化
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-26 23:12:10 | 显示全部楼层
仿真找下问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 17:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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