OpenEdv-开源电子网

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

窗口看门狗的问题

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2011-8-11
在线时间
0 小时
发表于 2011-8-19 23:58:36 | 显示全部楼层 |阅读模式

文档里面说当计数器值为0X40时进入中断,在中断中进行计数器的值和窗口寄存器的值(即上窗口的值)的比较。问题是进入中断时计数器的值是0X40,而窗口寄存器的值(即上窗口的值)又规定要大于0X40,那这样结果不是肯定知道了吗?为什么还要比较呢?求解答。多谢了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-8-20 00:18:23 | 显示全部楼层
新版本的看门狗,不需要判断 了.

#include "wdg.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//看门狗 驱动代码    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2011/6/1
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////    
     

//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr) 
{
IWDG->KR=0X5555;//使能对IWDG->R和IWDG->RLR的写     
   IWDG->R=prer;  //设置分频系数   
   IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR  
IWDG->KR=0XAAAA;//reload    
   IWDG->KR=0XCCCC;//使能看门狗
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG->KR=0XAAAA;//reload    
}
//保存WWDG计数器的设置值,默认为最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看门狗
//tr:T[6:0],用于存储计数器的值
//wr:W[6:0],用于存储窗口值
//fprer:窗口看门狗的实际设置
//低2位有效.Fwwdg=PCLK1/4096/2^fprer.
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{   
RCC->APB1ENR|=1<<11; //使能wwdg时钟
WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.    
WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer
WWDG->CFR&=0XFF80;     
WWDG->CFR|=wr;     //设定窗口值     
WWDG->CR|=WWDG_CNT; //设定计数器值
WWDG->CR|=1<<7;  //开启看门狗     
MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2    
WWDG->SR=0X00; //清除提前唤醒中断标志位
WWDG->CFR|=1<<9;        //使能提前唤醒中断
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{
WWDG->CR =(cnt&0x7F);//重设置7位计数器
}
//窗口看门狗中断服务程序
void WWDG_IRQHandler(void)
{     
WWDG_Set_Counter(WWDG_CNT);//只有当计数器的值,小于窗口寄存器的值才能写CR!!        
WWDG->SR=0X00;//清除提前唤醒中断标志位
LED1=!LED1;
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2011-8-11
在线时间
0 小时
 楼主| 发表于 2011-8-20 00:54:51 | 显示全部楼层
多谢原子兄。不过你能解释一下为什么吗?好像你只是单独去掉了判断部分,其他的没怎么改变。另外,上面我提出的问题错在哪里?能帮忙解释一下吗?多谢了。(本人比较菜,见谅哈)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-8-20 01:16:17 | 显示全部楼层
多了两句话.初始化的时候.
WWDG->SR=0X00; //清除提前唤醒中断标志位 
WWDG->CFR|=1<<9;        //使能提前唤醒中断 
这两句.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-11-9
在线时间
0 小时
发表于 2011-11-22 11:03:15 | 显示全部楼层
你好!对应独立看门狗,预分频系因子的有效位是三位,那我们赋值的时候如果不写成IWDG->R=(prep&0x111)<<0,而直接写成
IWDG->R=prep.这样会不会因为prep的值大于0x111而带来错误。还是我们在设置参数的时候就让参数值小于8.
对应窗口看门狗的分频因子也有同样的疑惑。
谢谢
互帮互助,共同进步
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-22 12:34:01 | 显示全部楼层
回复【5楼】shsh516:
---------------------------------
因为其他位都是保留的,你写也没用。
另外0X111不是你要的掩码。
0X07才是。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2012-3-30
在线时间
3 小时
发表于 2012-4-8 15:05:39 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------

多的第一句是清除标志位,不管是复位还是每次喂狗后都清了,这句应该可不要吧!
第二句也没多啊,是从上面移到下面,位置变了一下
原子哥,能否详细说说这个位置的变动的意义?
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2012-8-25
在线时间
1 小时
发表于 2012-8-30 19:58:36 | 显示全部楼层
我也碰到这个问题了,不知解决了没有。想问和LS一样的问题
回复 支持 反对

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-10
在线时间
4 小时
发表于 2012-10-10 13:02:02 | 显示全部楼层
回复【8楼】banye:
---------------------------------
这个问题我也很迷惑,希望有人继续讨论,另外void WWDG_IRQHandler(void) 
函数中使用全局变量WWDG_CNT设置计时器的值喂狗,WWDG_Init(0X7F,0X5F,3)中的0X7F有什么意义?什么时候需要修改这个参数?    
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-12-16
在线时间
0 小时
发表于 2013-12-16 11:40:48 | 显示全部楼层
依我对窗口看门狗的理解:0x7f是计数器的总数,计数周期为:4096*2^分频值。当0x7f自向下减数,减到0x5f(上窗口值)时,开始触发看门狗,在0x5f-0x40期间,要进行喂狗,如果不喂,0x40减到0x3f时就会产生复位了。我是根据原子哥资料里的窗口看门狗示意图分析的:T[6,0]>W[6,0]>0X40。我只是猜测,望大家积极考虑,给我一个明确的答案。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 13:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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