打印
[应用相关]

STM32外部中断问题

[复制链接]
514|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Varus|  楼主 | 2016-8-21 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F415外部中断触发过后,主函数不再运行,但触发功能正常

程序没有卡在中断里面,触发函数运行没问题,但触发过后,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上的中断标志位
}
复制代码
但是这句:while(b < 0xffff)//注释掉循环问题后正常
有大神能解答么,多谢
沙发
zhaolei2612| | 2016-8-21 21:12 | 只看该作者
你这消抖有问题呀。PC0下降沿触发吗?中断尽量不这样消抖呀,时间就是金钱呀。再看你这消抖程序。b=0,先清零,如果PC0==0(按键按下),b++,如果b累加到>=0xffff,按键松开,顺序执行,跳出两个while 循环,但如果b没有累加到>=0xffff,松开按键,程序退出第二层while循环,还满足while(b<0xffff)的条件,b清零,一直while循环下去。消抖程序不对呀。

使用特权

评论回复
板凳
lefeng| | 2016-8-21 21:14 | 只看该作者

变量b是个U32的变量,他满足这个条件while(b < 0xffff),会一直执行,一直霸占,只要小于65535,这是个死循环,你为什么这么用呢?中断我从没用过死循环,中断的机制你可能没搞懂,不能这么用

使用特权

评论回复
地板
拉克丝| | 2016-8-21 21:36 | 只看该作者
就不能用普通的延时函数吗?非要要这样的方式去延时消抖?

使用特权

评论回复
5
Snow7| | 2016-8-21 22:02 | 只看该作者
主函数不运行,说明有人霸占了CPU的使用权

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

703

帖子

1

粉丝