stm32事件中断

2019-03-23 16:41发布

本帖最后由 青城山下 于 2018-1-22 18:24 编辑

变量CurrntStatus是从UART口收到的数据,假设第10s的时候收到的数据是0,则执行函数的最下面部分的falt_light函数,但是如果在第11秒执行falt_light函数的时候,从UART串口收到的数据是1,我想从falt_light跳出来,立即去执行CurrntStatus==1下面的指令,请问该怎么处理好呢?


  1. void light_carmaker(){
  2.          int i =0 ;
  3.                  if(Flag==1)
  4.                 return;

  5.         if(CurrntStatus == 2){         
  6.                 ControlYellowLigh();  //控制和发送黄灯的状态
  7.         }
  8.         else if(CurrntStatus == 3){

  9.             GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);
  10.                GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
  11.             GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
  12.                 delay_ms(1000);
  13.         }
  14.         else if(CurrntStatus == 1){

  15.              GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
  16.             GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致                        
  17.             GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);//给高电平,关其他方向的灯
  18.         GPIO_SetBits(GPIOB,GPIO_Pin_8);         //东西绿灯亮EW秒,南北红灯亮EW秒        
  19.                 delay_ms(1000);

  20.         }
  21.          else if(CurrntStatus == 0){

  22.                 falt_light();


  23.         }
  24. }


  25. void falt_light(){
  26.              //PB6连接的是南北绿东西红灯  PB7接的是黄灯 PB8接的是南北红东西绿灯
  27.          GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);//给高电平,关其他方向的灯
  28.          GPIO_ResetBits(GPIOB,GPIO_Pin_5); //先让状态指示灯灭

  29.      snblu1=5;
  30.          ewblu1=5;

  31.          path = 0;
  32.          w = 0;
  33.          for(i=1;i<=snblu1;i++)
  34.          {  
  35.          if(Flag==1)
  36.                 return;
  37.         
  38.          GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
  39.          GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
  40.          if(Flag==1)
  41.                 return;
  42.          delay_ms(1000);  //延时1s
  43.          }
  44.          
  45.          if(Flag==1)
  46.                 return;
  47.         GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
  48.         GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致

  49.                                                                            
  50.         GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_6);//给高电平,关其他方向的灯  
  51.         for(i=1;i<=ewblu1;i++)
  52.                 {         
  53.                                 if(Flag==1)
  54.                 return;

  55.                   GPIO_SetBits(GPIOB,GPIO_Pin_8);         //东西绿灯亮EW秒,南北红灯亮EW秒        
  56.                                         if(Flag==1)
  57.                 return;
  58.                   delay_ms(1000);
  59.                 }
  60.         GPIO_ResetBits(GPIOB,GPIO_Pin_8);//灭东西绿灯
  61. }
复制代码
                                                                           


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。