初级会员

- 积分
- 80
- 金钱
- 80
- 注册时间
- 2018-3-13
- 在线时间
- 16 小时
|

楼主 |
发表于 2018-3-21 20:06:03
|
显示全部楼层
本帖最后由 静风沐雨 于 2018-3-21 22:14 编辑
猜测:
1.可能是由于某种原因使开门狗唤醒中断产生多个,刚清除中断标志紧接一个异常中断,致使出现提前喂狗情况
2.因为这些中断的优先级都相同所以不存在打断,但是必须都要触发且清除中断,不然不能及时处理正确的喂狗中断,因此延时只能在清除中断后面
尝试了几种方式,测试现象:
1.变量定义全局或内部定义静态变量,使用1,2处均异常,3处正常;【使用局部变量均异常】
u32 k = 0;
void WWDG_IRQHandler(void)
{
//static u32 k = 0;
//k++;//1
WWDG_SetCounter(WWDG_CNT); //ÖØéè′°¿ú¿′ÃÅ1·Öμ
//k++;//2
WWDG_ClearFlag();//Çå3yìáǰ»½DÑÖD¶Ï±ê־λ
k++;//3
// LED1=!LED1;
}
2.使用"LED1=!LED1;"或"if(SET == WWDG_GetFlagStatus()){}"代替1中的"k++"相同结果
3.使用中断标志位,使用1处异常,使用2,3处正常
void WWDG_IRQHandler(void)
{
if(SET == WWDG_GetFlagStatus()){
// }//1
WWDG_SetCounter(WWDG_CNT); //ÖØéè′°¿ú¿′ÃÅ1·Öμ
}//2
WWDG_ClearFlag();//Çå3yìáǰ»½DÑÖD¶Ï±ê־λ
// }//3
}
|
|