目录
- IWDG的相关代码
- iwdg.c
- iwdg.h
- main.c
说明:以下内容参考正点原子资料
IWDG的相关代码
iwdg.c
//初始化独立看门狗
//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_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64IWDG_SetReload(rlr); //设置IWDG重装载值IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器IWDG_Enable(); //使能IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{ IWDG_ReloadCounter();//reload
}
iwdg.h
#ifndef __WDG_H
#define __WDG_H#include "sys.h"
void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);#endif
main.c
在配置看门狗后,DS0 将常亮,如果 WK_UP 按键按下,就喂狗,只要 WK_UP 不停的按,
看门狗就一直不会产生复位,保持 DS0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,
那么将会导致程序重启,这将导致 DS0 熄灭一次。
int main(void){ delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口KEY_Init(); //按键初始化 delay_ms(500); //让人看得到灭IWDG_Init(4,625); //与分频数为64,重载值为625,溢出时间为1s LED0=0; //点亮LED0while(1){if(KEY_Scan(0)==WKUP_PRES){IWDG_Feed();//如果WK_UP按下,则喂狗}delay_ms(10);};
}