求助大神,你能解决算你牛

2019-08-18 20:15发布

//定时器4中断服务程序
void TIM4_IRQHandler(void)                                             //TIM4中断
{       
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //检查TIM4更新中断发生与否
                {
                        TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIMx更新中断标志
                        n++;
                        V_count=TIM_GetCounter(TIM1);                                                  //读取计数器的值
                        printf("count=%d ",V_count);
                        TIM_SetCounter(TIM1, 0);              //将计数寄存器值清零
                        while(1);     <<<<<<<<<<<<<<<<<<<<<问题在这!!!!!
                        printf("count ");
                }
}


大神们,问题就在这!我配置好定时中断后,每100ms进入一次中断,进入中断后,我先将标志位清除,没毛病吧?清除标志位之后,计数器应该又重新开始计数了,我下边写了一个while(1)。中断里边应该不会卡在这啊。对吗??能明白我意思吗???但是现在的效果是,卡了!!卡在while(1)了。printf("count=%d ",V_count);这句话就执行了一次。printf("count ");这句话,没执行。!!到底是啥问题!!还是32的中断不好使。。。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
会飞的大白猪
1楼-- · 2019-08-24 09:10
mack13013 发表于 2017-5-20 03:45
楼主觉得while会被新的计时器中断打断的吧(如果清除定时器中断是为了重新开启定时器的话)。
正常的情况 ...

明白了。我理解的是中断标志位清除了。就可以触发新的中断,即使在中断服务函数中。我这个程序就是想测试这个的。
会飞的大白猪
2楼-- · 2019-08-24 12:11
rindy 发表于 2017-5-20 08:05
只有当前定时器中断函数执行完以后才会开始下一次定时器中断

这样的话我就明白了。以前理解只要清除标志了。就会触发新的中断,即使在自己的中断服务程序中。
会飞的大白猪
3楼-- · 2019-08-24 15:17
 精彩回答 2  元偷偷看……
会飞的大白猪
4楼-- · 2019-08-24 17:21
mack13013 发表于 2017-5-20 03:45
楼主觉得while会被新的计时器中断打断的吧(如果清除定时器中断是为了重新开启定时器的话)。
正常的情况 ...

我以为自己的中断源可以打断自己的中断服务程序。谢谢你的解释
会飞的大白猪
5楼-- · 2019-08-24 19:55
liang118038 发表于 2017-5-20 03:13
中断里居然写死循环真是醉了,什么神人呀!
人家那些高手的原则,中断处理尽量短少做长时间的运行代码,只 ...

我在那里写while只是测试,你以为就你厉害呗。看不懂我的想法就别瞎扯,
liang118038
6楼-- · 2019-08-24 21:12
会飞的大白猪 发表于 2017-5-20 10:17
我在那里写while只是测试,你以为就你厉害呗。看不懂我的想法就别瞎扯,

嘿嘿,既然是测试,自己连测试结果的概念都没有,还要靠别人给你结论,我倒是想看是谁在瞎扯

一周热门 更多>