STM32F415外部中断触发过后,主函数不再运行,但触发功能正常

2019-07-14 20:29发布

程序没有卡在中断里面,触发函数运行没问题,但触发过后,main中的函数就是不运行了

主函数如下:
  1. int main(void)
  2. {
  3.         /* LED 端口初始化 */
  4.         LED_GPIO_Config();
  5.         delay_init(168);       
  6. //        key_config();
  7.         EXtiX_Init();


  8.         /* 控制LED灯 */
  9.         while (1)
  10.         {
  11. //                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1)
  12.                         LED1( OFF );                         // 亮
  13.                 delay_ms(200);
  14. //                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
  15.                         LED1( ON );                  // 灭
  16.                 delay_ms(200);

  17. //                LED3( ON );                         // 亮
  18. //                Delay(0xFFFF);
  19. //                LED3( OFF );                  // 灭       
  20. //               
  21. //                LED4( ON );                         // 亮
  22. //                Delay(0xFFFFFF);
  23. //                LED4( OFF );                  // 灭       
  24.         }
  25. }
复制代码中断函数:
  1. void EXTI0_IRQHandler(void)
  2. {
  3.         static u8 a = 0;
  4.         u32 b = 0;
  5.                 //消抖
  6.         while(b < 0xffff)//注释掉循环问题后正常
  7.         {
  8.                 b = 0;
  9.                 while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0)         
  10.                 {
  11.                         b++;
  12. //                        delay_ms(1);
  13.                 }
  14.         }
  15.         a = !a;
  16.         GPIO_WriteBit(GPIOA, GPIO_Pin_10, a); //蜂鸣器翻转        
  17.         EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
  18. }
复制代码但是这句:while(b < 0xffff)//注释掉循环问题后正常
有大神能解答么,多谢



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zpzdd
1楼-- · 2019-07-15 08:28
 精彩回答 2  元偷偷看……
dabing89
2楼-- · 2019-07-15 11:46
zpzdd 发表于 2016-8-14 22:16
一直按住按键b会自增啊,超过后就推出while了,处理防抖的一种方式,这个中断本身是没问题的,控制引脚A10上的LED开关都正常

就不能用普通的延时函数吗?非要要这样的方式去延时消抖?
S相遇的邂逅S
3楼-- · 2019-07-15 14:05
呵呵,自己的程序要好好检查
zpzdd
4楼-- · 2019-07-15 16:09
dabing89 发表于 2016-8-14 22:21
就不能用普通的延时函数吗?非要要这样的方式去延时消抖?

我只看到功能是正常的,你说的有道理,我再试试
zpzdd
5楼-- · 2019-07-15 16:59
dabing89 发表于 2016-8-14 21:11
你还有一句B = 0呢?反复清零,什么时候能达到退出?既然主函数不运行,说明有人霸占了CPU的使用权,你想想

非常感谢你的指点,多谢
zpzdd
6楼-- · 2019-07-15 22:54
 精彩回答 2  元偷偷看……

一周热门 更多>