stm32串口中断如何让在while(1)死循环里的跑马灯停止后执行另一个程序

2019-07-20 16:29发布


主函数:u8 flag;
int main(void)
{
        u8 Tx_Buf[8];
        u8 t;
        u8 len;        
        u16 times=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
        delay_init(168);    //3õê¼»ˉÑóê±oˉêy
        uart_init(115200);         //′®¿ú3õê¼»ˉ
        LED_Init();                                  //3õê¼»ˉLED¶Ë¿ú  
        BEEP_Init();        //3õê¼»ˉ·äÃùÆ÷¶Ë¿ú
        EXTIX_Init();       //3õê¼»ˉía2¿ÖD¶Ïêäèë
  KEY_Init();        
        
        while(1)
        {
               
        if(flag ==1)
        while(1){
                          
         LED2=1;delay_ms(500);
         LED2=0;delay_ms(500);
         LED3=1;delay_ms(500);
         LED3=0;delay_ms(500);
         LED7=1;delay_ms(500);
         LED7=0; delay_ms(500);
         LED13=1; delay_ms(500);
         LED13=0;
        
        }
                        
        else if(flag==2)
        {
                LED3=1;
                LED7=0;
                LED13=0;
                LED2=0;}}}


串口中断函数:
extern u8 flag;

void USART1_IRQHandler(void)                        
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                Res =USART_ReceiveData(USART1);//(USART1->DR);        
               
                if((USART_RX_STA&0x8000)==0)
                {if(Res==1) flag =1;
                else if (Res==2) flag =2;
                else flag =0;
                return ;
                }                    

  }
#if SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                          
#endif
}
#endif        


       您好 ,我问一下 ,我这是想用串口中断  发送字符1  然后跑马灯    之后就不能发送字符2了  一直在跑马灯while死循环里了    这起不到我中断的效果呀
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
XUZJWWSZ
1楼-- · 2019-07-20 19:33
把while循环换成for循环,循环次数随你设定。
或者给WHILE循环一个条件
Da Wen
2楼-- · 2019-07-20 21:42
while(1)
{
  switch(flag)
{
    case 1:
    {
       流水灯程序;
       break;
    }
    case 2:
   {
    关灯;
     break;
   }
  default : break;
}
}
仅供参考
1009127284
3楼-- · 2019-07-21 00:47
Da Wen 发表于 2017-3-4 17:42
while(1)
{
  switch(flag)

这跟我的程序效果是一样的呀   流水灯还是不会循环的
Da Wen
4楼-- · 2019-07-21 03:53
1009127284 发表于 2017-3-4 18:01
这跟我的程序效果是一样的呀   流水灯还是不会循环的

你试过了么?你的程序只要flag=1,以后都不会再判断flag,所以才会死循环。
1009127284
5楼-- · 2019-07-21 08:10
 精彩回答 2  元偷偷看……
小猪洛必达
6楼-- · 2019-07-21 13:20
 精彩回答 2  元偷偷看……

一周热门 更多>