OpenEdv-开源电子网

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

问一个窗口看门狗的问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-3-22
在线时间
0 小时
发表于 2014-3-22 14:15:12 | 显示全部楼层 |阅读模式
窗口看门狗中断服务程序中有这样一句:
if(tr<wr)WWDG_Set_Counter(0x7f);//如果计数器的值小于上窗口的值,喂狗。
其中tr是计数器的值,wr是上窗口的值。
我有一个问题,当计数器的值为0x40时产生中断,进入到这个中断服务函数,也就是说这时tr应该是0x40,而wr应该是不会变的,仍是原先设定的值,假设是0x5f,那么这个判断是不是多余了?我去掉这个判断后程序运行就不正常了,麻烦大家帮我分析下问题所在,谢谢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-22 15:17:37 | 显示全部楼层
改成这样就可以了:
//保存WWDG计数器的设置值,默认为最大. 
u8 WWDG_CNT=0x7f; 
//初始化窗口看门狗 
//tr:T[6:0],计数器值 
//wr:W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低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_IRQn,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);//重设窗口看门狗的值!         
WWDG->SR=0X00;//清除提前唤醒中断标志位 
LED1=!LED1; 
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-3-22
在线时间
0 小时
 楼主| 发表于 2014-3-23 10:47:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
你貌似没有回答我的问题啊。
void WWDG_IRQHandler(void) 
{      
WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!         
WWDG->SR=0X00;//清除提前唤醒中断标志位 
LED1=!LED1; 
}
这个其实就是删去了if(tr<wr)这个判断条件,和我的一样啊。
我想问的是这个判断条件是否多余,还有,为何去掉了这个条件后程序运行不正常了。>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-23 11:00:45 | 显示全部楼层
回复【3楼】zhangzimou:
---------------------------------
这个我也不知道。
只是初始化顺序变了下,就可以了。
你注意下:WWDG->CFR|=1<<9;        //使能提前唤醒中断
这句话的顺序。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 10:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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