一,基础知识

1,简介

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运
行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置
的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减
计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在
一个有限的时间窗口中被刷新。

2,看门狗时序图(参考STM32数据参考手册)

stm32cubemx 看门狗配置_单片机

stm32cubemx 看门狗配置_硬件_02


二,设计过程

1,开启窗口看门狗的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
因为窗口看门狗是挂载到APB1时钟线上的,所以这里使能APB1

2,设置窗口看门狗的窗口值和预分频系数(在库函数WWDG中调用)

WWDG_SetWindowValue(wr);//窗口值
WWDG_SetPrescaler(pres);//预分频系数

3,使能初始值,设置看门狗计数器的值(要>=0x40,不然会直接复位)

WWDG_Enable(jishuqi);

4,清除标志位

WWDG_ClearFlag();

5,开启看门狗的中断(开启中断是为了“喂狗”,即在中断的时间内完成计数器的初始化,不然WWDG递减到窗口的下限,则会产生复位)

WWDG_EnableIT();

6,配置中断的分组(因为开启了中断)

NVIC_Init();

7,编写中断服务函数(在终端服务函数中“喂狗”)

WWDG_IRQHandler();

三,WWDG的配置文件

1,WWDG.H文件

在这里插入#ifndef __WWDG_h
#define __WWDG_h
#include <sys.h>
/**
WWDG_Init(u8 wr,u16 pres);//窗口看门狗初始化函数
u8 wr:窗口看门狗窗口上限值,下限值为固定的(0x40)
u8 pres:预分频系数
*/
void WWDG_Init(u8 wr,u16 pres);
#endif

2,WWDG.c文件

#include <stm32f10x.h>
#include <wwdg.h>
#include <led.h>
u8 jishuqi=0x7f;
void WWDG_Init(u8 wr,u16 pres){
	
	NVIC_InitTypeDef NVIC_InitStruct;
	
	//1,开启窗口看门狗的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
	//2,设置看门狗的窗口值,预分频系数
	WWDG_SetWindowValue(wr);//窗口值
	WWDG_SetPrescaler(pres);//预分频系数
	//使能看门狗,设置计数器的值
	WWDG_Enable(jishuqi);
	//清除标志位
	WWDG_ClearFlag();
	//设置中断分组
	NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	//开启看门狗中断
	WWDG_EnableIT();
}
	//中断服务函数
void WWDG_IRQHandler(){
	/**
	注意;这里删除 WWDG_Enable(jishuqi);函数或者将计数器设置为0x3f,
	程序会在计数器完成倒计数后一直复位
	*/
	WWDG_Enable(jishuqi);
	WWDG_ClearFlag();
	LED0=!LED0;
}

在这里插入代码片

3,main.c函数调用

在这里插入代#include <stm32f10x.h>
#include "delay.h"
#include <led.h>
#include <wwdg.h>
int main(){
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	LED_Init();
	delay_init();
	LED1=0;
	delay_ms(300);
	WWDG_Init(0x5f,WWDG_Prescaler_8);
	while(1){
	LED1=1;
	}	
}

4,完成后编译,上机调试。
任务完成啦,可以回家干饭啦,哈哈哈嗝~。