stm32如何让一个正在执行的跑马灯中断去执行我另一个程序

2019-07-20 16:23发布

我把跑马灯放在主函数里   如下:while(1){                                   key=KEY_Scan(0);       
                                      if(key)
                                  {                                                  
                                   switch(key)
                                  {                               
                                 case 2:       
                                        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;}

               然后把一盏单独亮的灯放在中断程序里:如下:
                                               void EXTI2_IRQHandler(void)
                                           {
                                        delay_ms(10);       
                                        if(KEY2==0)
                                       {                                 
                                 LED13=0;
                                 LED2=1;
                                 LED3=0;
                                 LED7=0;  
                                              }                 
         EXTI_ClearITPendingBit(EXTI_Line2);}     我想当我按下键2的时候   跑马灯立刻停止 然后执行LED2亮着   (而我现在的程序是跑马灯在运行的时候按下键2并没有停止,一直在运行)这该怎么办
                                                                   求大神回复!!

                               
                               
               
       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
1009127284
1楼-- · 2019-07-21 12:20
fankai 发表于 2017-3-4 11:09
你进入外部中断之后,执行完,马上就退出了啊,然后又去执行while了,可以设定一个标志啊,一般情况下执行w ...

这效果不是我想要的哎
1009127284
2楼-- · 2019-07-21 14:41
肯定执行了,就是太快,程序逻辑跟你要实现的效果不对号
小小速
3楼-- · 2019-07-21 15:53
 精彩回答 2  元偷偷看……
fankai
4楼-- · 2019-07-21 18:37
s8088 发表于 2017-3-4 15:15
任务不多,可以这么做实验

主函数: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死循环里了    这起不到我中断的效果呀

s8088
5楼-- · 2019-07-22 00:31
 精彩回答 2  元偷偷看……

一周热门 更多>