OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 417|回复: 6

窗口看门狗问题

[复制链接]

  离线 

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-3-13
在线时间
5 小时
发表于 2018-3-14 09:34:25 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 静风沐雨 于 2018-3-14 16:44 编辑

硬件:正点原子STM32F407
问题:
      在以下条件下,喂狗失效
      1.使用正点原子提供的窗口看门狗例程
      2.将WWDG中断函数中的LED灯翻转代码注释

现象:
     1.注释掉代码之后,还是会发生中断喂狗,但是系统还是会自动reset
     2.如果不注释代码,正常喂狗,不会发生系统reset
//代码修改处,红色标出;原工程在附件,只需要将以下代码注释就会出现我的现象
//窗口看门狗中断服务函数
void WWDG_IRQHandler(void)
{
        WWDG_SetCounter(WWDG_CNT);//重设窗口看门狗值
        WWDG_ClearFlag();//清除提前唤醒中断标志位
        //LED1=!LED1;
}


实验7 窗口看门狗实验.zip

481.57 KB, 下载次数: 26

回复

使用道具 举报

  离线 

0

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
707
金钱
707
注册时间
2018-2-7
在线时间
75 小时
发表于 2018-3-14 15:07:17 | 显示全部楼层
代码不贴上来,怎么分析?
回复

使用道具 举报

  离线 

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-3-13
在线时间
5 小时
 楼主| 发表于 2018-3-14 16:43:20 | 显示全部楼层
HXYDJ 发表于 2018-3-14 15:07
代码不贴上来,怎么分析?

就是注释行代码,已在帖子里更新
回复

使用道具 举报

  离线 

20

主题

1660

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3255
金钱
3255
注册时间
2014-8-26
在线时间
783 小时
发表于 2018-3-14 19:00:19 | 显示全部楼层
实测有这现象,喂狗之后需要延时(LED取反,延时1us都可以),退出中断才不会复位,不理解为什么,坐等大神回复
回复

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128230
金钱
128230
注册时间
2010-12-1
在线时间
1133 小时
发表于 2018-3-15 01:14:10 | 显示全部楼层
正点原子公众号
你在中断服务函数里面,加上if判断中断标志,再做处理,试试。
回复

使用道具 举报

  离线 

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-3-13
在线时间
5 小时
 楼主| 发表于 2018-3-21 20:06:03 | 显示全部楼层
本帖最后由 静风沐雨 于 2018-3-21 22:14 编辑
正点原子 发表于 2018-3-15 01:14
你在中断服务函数里面,加上if判断中断标志,再做处理,试试。

猜测:
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
}


回复

使用道具 举报

  离线 

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-3-13
在线时间
5 小时
 楼主| 发表于 2018-3-31 11:07:56 | 显示全部楼层
有道友能确定我的猜想或是有新的见解吗?
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-6-22 19:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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