OpenEdv-开源电子网

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

窗口看门狗进不了中断,还有问题就是窗口看门狗要在中断中喂狗吗?

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-6-19
在线时间
2 小时
发表于 2014-7-24 21:55:07 | 显示全部楼层 |阅读模式
5金钱
以下是我的代码:
#include "stm32f10x.h" 
#include "delay.h"
#include "LED.H"
#include "KEY.H"
#include "BEEP.H"
#include "usart.h"
#include "BitBand.h"
void NVIC_Configuration(void);
void WWDG_Init(u8 dog);
void WWDG_NVIC_Init(void);
u8 key_up,key_1,key_2,key_0;//用于判断KEY_0 1 2 UP 按下次数
int main (void)
{
NVIC_Configuration();//中断分组设置(仅在最初设置一次,函数执行中一般不改变分组)
led_Init();//LED初始化
beep_Init();
delay_init();//延时初始化
D0=1;
D1=0;
BEEP = 1;
delay_ms(300);
WWDG_Init(0x7F);
while(1)
{
D1=1;
BEEP = 0;
}
}

/*中断分组设置(仅在最初设置一次,函数执行中一般不改变分组)*/
void NVIC_Configuration(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
}

void WWDG_Init(u8 dog)
{
WWDG_NVIC_Init();
RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG,ENABLE);
WWDG_SetPrescaler(WWDG_Prescaler_8);
WWDG_SetWindowValue(0x5F);
WWDG_Enable(dog);
WWDG_ClearFlag();

WWDG_EnableIT();
}
void WWDG_NVIC_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2
   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 
NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(0x7F);  //当禁掉此句后,窗口看门狗将产生复位
WWDG_ClearFlag();  //清除提前唤醒中断标志位
D0=!D0; //LED状态翻转
}


弄了两三个小时还是不行,LED00从来就没有亮过,说明没有进入中断,不过重新上电的时候, BEEP会响 两三次,之后再也不响了,谢谢大神了,

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-24 23:21:01 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-6-19
在线时间
2 小时
 楼主| 发表于 2014-7-25 09:06:12 | 显示全部楼层
昨天晚上弄了好几个小时不行,今天早上起来一看原来错在这里了, RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG,ENABLE);
竟然在开时钟的时候弄成Reset了,改成Set就OK 了,

回复【2楼】正点原子:
---------------------------------
还有一个疑问:
窗口看门狗必须在中断中喂狗吗?为什么呢?
我觉得:
1,在中断中的话,只要程序能正常中断的话,就算程序跑飞了,也不会复位啊?
2,正常情况下,是不是应该在程序的某个语句中,只要算好正常执行时窗口的时间,就应该在这个窗口中复位,是吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-25 23:32:58 | 显示全部楼层
回复【3楼】iampobaby:
---------------------------------
不一定啊,不过在中断喂狗方便,不用想事.
其他地方喂狗,你不能过早,也不能过迟,要判断两次,麻烦.
如果超时不喂狗,或者过早喂狗,就会复位.其他情况不复位.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 20:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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