OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5089|回复: 0

中断函数连续执行两次的解决方法

[复制链接]

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2016-1-5 18:16:32 | 显示全部楼层 |阅读模式
[mw_shl_code=c,true]//¶¨ê±Æ÷4ÖD¶Ï·tÎñoˉêy
void TIM4_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //òç3öÖD¶Ï
                TIME_CYCLE++;       
        printf("\r\ntime:%d",TIME_CYCLE);
        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //Çå3yÖD¶Ï±ê־λ
        delay_us(5);                                                                                                                                //èôûóDÑó3ù£¬ÖD¶Ï±êê¶à′2»¼°Çå3y£¬μ¼ÖÂÖD¶ÏÖ′DDá½′Î
}[/mw_shl_code]


由于硬件清除中断标识不及时,中断可能执行两次,解决方法如下:
1:添加延时,如以上代码所示;
2:将清除中断标识的函数往前放,可放在TIME_CYCLE++; 之前,即可解决


总之,要留有清除时间!
本人新人,各位多包涵!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表