OpenEdv-开源电子网

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

独立看门狗的中断响应问题

[复制链接]

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
发表于 2012-10-13 19:35:47 | 显示全部楼层 |阅读模式
原子哥,独立看门狗,没有对应的中断服务程序。
程序是怎么响应中断的?
还有,中断、LED和看门狗之间的关联关系在哪些代码具体实现了?
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-10-13 22:10:26 | 显示全部楼层
回复【楼主位】moline:
---------------------------------
独立看门狗没中断....
到时了直接复位。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-10-14 15:58:27 | 显示全部楼层
我一直很郁闷,看到你的程序,怎么看都看不出LED与复位时改变LED状态的代码。你在哪一段处理了IWDG复位与LED状态变化之间的关系啊?

你的IWDG只有两个设置,一个是Init,一个是Feed。其他看不出有上述关系。

能否教一下啊?
难道是IWDG复位的时候,系统其他外设都复位吗?还是其他情况?
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-10-14 16:04:13 | 显示全部楼层
回复【3楼】moline:
---------------------------------
在main函数啊,你好好看看实验描述!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-10-14 19:11:22 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
int main(void)
{
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化
// uart_init(72,9600);  //串口初始化 
LED_Init();     //初始化与LED连接的硬件接口
KEY_Init();          //按键初始化  
delay_ms(1000);     //让人看得到灭,300ms可以比较好的看清楚
IWDG_Init(4,625);    //与分频数为64,重载值为625,溢出时间为1s    
LED0=0;
LED1=0;  //点亮LED0
while(1)
{
if(KEY_Scan()==3)IWDG_Feed();//如果WK_UP按下,则喂狗(喂狗时,不计数!)
delay_ms(10);
};  
}
从上面是否可以理解为:初始化后(while前),点亮LED灯。当有按键按下的时候,复位了IWDG。程序回复到IWDG_Init()代码段,IWDG继续计数。等价于,按键触发后,执行了一个隐形的goto命令( 从IWDG_Feed()  “goto”  到IWDG_Init() )。

如果对了,给个拇指啊。呵呵。 
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-10-14 20:39:02 | 显示全部楼层
回复【5楼】moline:
---------------------------------
不是goto,就是直接if判断而已。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-10-14 20:53:59 | 显示全部楼层
问题是,我没有按下按键,IWDG一直在循环,LED一直在闪烁。我不知道复位后,程序代码是从什么地方开始循环。
我试图修改第一个Delay_ms和IWDG_Init的时间参数,得到了不同的效果,从实验判断,整个程序会回到第一个Delay_ms(IWDG_Init之前)处进行运行IWDG。
因为我不知道复位会复位那些部件,是单一复位IWDG还是复位了整个MCU。

但IWDG初始化后,IWDG独立自由运行,但复位后会复位那些部件?

我把:
delay_ms(1000);  //让人看得到灭
IWDG_Init(4,625);
的两个参数,1000改为100(单一实验),625改为625/25(另一个实验),闪烁方式不同,可以看出两个参数都起作用了。
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-10-14 21:45:46 | 显示全部楼层
原子哥很忙,有谁看到的,懂的也说一下啊,不管对和错,错了人家会说的,到时自己也学到了啊。
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

96

主题

247

帖子

1

精华

高级会员

Rank: 4

积分
801
金钱
801
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-10-15 10:04:01 | 显示全部楼层
哈哈,听说是IWDG复位的意思是会导致整个程序重新运行。
我把上面的代码的LED1=0;提到LED_Init()后面,并改为LED1=!LED1;LED1也会出现一只闪烁。

咳~!IWDG工作的原理没搞懂啊,复位的意思也没搞明白,所以……
http://blog.tianya.cn/blogger/blog_main.asp?BlogID=4666068
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2015-7-18 22:06:58 | 显示全部楼层
百度:
我也是遇到这个问题


上电复位和看门狗复位区别很大。
  1、上电复位,是为了为程序的开始作好准备,强制的所有的数据清零,它必须要从零开始。
  2、看门狗复位,则是一种对意外的程序跑偏时或者死机时的拯救,不是简单的清零。
  具体来说:在看门狗计数发生溢出时,可以事先选择程序下一步的去向,而不是像清零那样完全从头再来,这样就可以按照实际需要编辑一个溢出后所要求作的工作程序,避免事故的发生,增加程序的可靠性。
  有的看门狗和上电复位共用一个芯片,也就是带看门狗的上电复位芯片。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2014-11-13
在线时间
54 小时
发表于 2015-9-5 17:01:51 | 显示全部楼层
程序开始运行点亮LED,复位后程序重新运行LED自然会灭然后在被程序点亮。由于没有喂狗,程序不断在LED被点亮后复位,就出现了LED闪烁的效果。
1379
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-20 08:35:41 | 显示全部楼层
正点原子 发表于 2012-10-13 22:10
回复【楼主位】moline:
---------------------------------
独立看门狗没中断....
到时了直接复位。

mark,了解了
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-20 09:18:25 | 显示全部楼层
wangyan915205 发表于 2015-7-18 22:06
百度:
我也是遇到这个问题


上电复位和看门狗复位区别很大。
  1、上电复位,是为了为程序的开始作好准 ...

学习了,谢谢!!
回复 支持 反对

使用道具 举报

12

主题

330

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2294
金钱
2294
注册时间
2016-5-21
在线时间
954 小时
发表于 2017-4-22 15:41:41 | 显示全部楼层
moline 发表于 2012-10-15 10:04
哈哈,听说是IWDG复位的意思是会导致整个程序重新运行。
我把上面的代码的LED1=0;提到LED_Init()后面,并改 ...

楼主的理解是有错的,程序的运行方式是这样子的:
1、没有按按键时,独立看门狗是会一直递减,减到0就会触发单片机复位,复位后到LED=0这段时间灯是灭的,然后LED=0就亮了,然后独立看门狗一直递减到0又复位了,灯看起来就一闪一闪的。
2、按键按下就会喂狗一次,使独立看门狗的值重新载入,不会减到0了,所以单片机也没有复位,LED一直亮。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-12-20
在线时间
8 小时
发表于 2020-5-25 14:30:27 | 显示全部楼层
xxssl 发表于 2017-4-22 15:41
楼主的理解是有错的,程序的运行方式是这样子的:
1、没有按按键时,独立看门狗是会一直递减,减到0就会 ...

那他这个复位是相当于掉电重启吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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