1;基本原理;
看门狗就相当于一个定时器,当一定时间过后,会产生一个复位信号(溢出),让程序从头开始运行;如果你不在这段时间内喂狗,即让他那个计时器从头开始的话;看门狗溢出时间计算公式是Tout=((4*2^prer)*rlr)/40;Tout为溢出时间,prer是预分频系数,rlr是重装载值;
2:代码wdg.c;(程序里写成wgd了,失误失误)
在这里插入代码片
#include "wgd.h"
#include "usart.h"
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG->KR =0X5555;//擦除RLR,PR的写保护功能;
IWDG->PR =prer;
IWDG->RLR =rlr;
//复位并开启独立看门狗
IWDG->KR =0XAAAA;//复位就是喂狗
IWDG->KR =0XCCCC;
}
void IWDG_Feed()//喂狗
{
printf("2\r\n");
IWDG->KR =0XAAAA;
}
3;wgd.h
在这里插入代码片
#ifndef _WGD_H_
#define _WGD_H_
#include "sys.h
void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);
#endif
4;主函数
在这里插入代码片
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "wgd.h"
int main(void)
{
Stm32_Clock_Init (9);
delay_init(72);
uart_init(71,9600);
LED_Init ();
delay_ms(500);
IWDG_Init(4,625);//设置预分频系数为4,自动重装值是625,Tout=((4*2^prer)*rlr)/40,算出溢出时间为1s;
LED0=0;
while(1)
{
if(KEY_1==0)
{
printf("1\r\n");
IWDG_Feed();//喂狗函数,即复位
}
}
}
新手,有错误请指正;