STM32F415外部中断触发过后,主函数不再运行,但触发功能正常
时间:10-02
整理:3721RD
点击:
程序没有卡在中断里面,触发函数运行没问题,但触发过后,main中的函数就是不运行了
主函数如下:
有大神能解答么,多谢
主函数如下:
- int main(void)
- {
- /* LED 端口初始化 */
- LED_GPIO_Config();
- delay_init(168);
- // key_config();
- EXTIX_Init();
- /* 控制LED灯 */
- while (1)
- {
- // if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1)
- LED1( OFF ); // 亮
- delay_ms(200);
- // if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
- LED1( ON ); // 灭
- delay_ms(200);
- // LED3( ON ); // 亮
- // Delay(0xFFFF);
- // LED3( OFF ); // 灭
- //
- // LED4( ON ); // 亮
- // Delay(0xFFFFFF);
- // LED4( OFF ); // 灭
- }
- }
- void EXTI0_IRQHandler(void)
- {
- static u8 a = 0;
- u32 b = 0;
- //消抖
- while(b < 0xffff)//注释掉循环问题后正常
- {
- b = 0;
- while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0)
- {
- b++;
- // delay_ms(1);
- }
- }
- a = !a;
- GPIO_WriteBit(GPIOA, GPIO_Pin_10, a); //蜂鸣器翻转
- EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
- }
有大神能解答么,多谢
你还有一句B = 0呢?反复清零,什么时候能达到退出?既然主函数不运行,说明有人霸占了CPU的使用权,你想想
变量b是个U32的变量,他满足这个条件while(b < 0xffff),会一直执行,一直霸占,只要小于65535,这是个死循环,你为什么这么用呢?中断我从没用过死循环,中断的机制你可能没搞懂,不能这么用
一直按住按键b会自增啊,超过后就推出while了,处理防抖的一种方式,这个中断本身是没问题的,控制引脚A10上的LED开关都正常
就不能用普通的延时函数吗?非要要这样的方式去延时消抖?
呵呵,自己的程序要好好检查
我只看到功能是正常的,你说的有道理,我再试试
非常感谢你的指点,多谢
不过:
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0) //消抖
{
delay_ms(20);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0)a = !a;
}
这种消抖经常错误触发啊,有什么更好的消抖方法么
if(...)
{
delay();
if(...)
{
//you code
}
}
额,这跟我发的貌似没什么区别……
加一下延时看看,试一试吧。
好的,谢谢你的回答