看门狗这个东西我觉得好好玩啊。
狗狗帮忙看家护院(监测程序),还要定时投喂。
//
你要是真信了就太天真了( ̄_, ̄ )
其实这只狗一点都不会看家护院,反而还挺会捣乱还特能吃。你,也就是主人每隔一端时间就要给他加饭,不然他吃完了就会给你捣蛋。
这样想的话,狗狗不捣蛋说明有人给他加饭,说明你还活着,很正常。万一主人不正常了(你懂的,狗就饿着了,就捣蛋(RESET)了。
基本概念:
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。(以上资料来源于百度百科)
实际上人话就是当“狗狗”监测到程序运行异常的时候就会复位。
// 其实并不是这样的
独立看门狗采用低速内部时钟源。
寄存器
主要有四个:
键值寄存器IWDG_KR: 0~15位有效
预分频寄存器IWDG_PR:0~2位有效。具有写保护功能,要操作先取消写保护
重装载寄存器IWDG_RLR:0~11位有效。具有写保护功能,要操作先取消写保护。
状态寄存器IWDG_SR:0~1位有效
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
==注:==第一次喂狗,狗盆里是满的(从0XFFF)倒计时,你一旦喂过一次,就是你设置的量开始倒计时。
时间如下:
常用库函数
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
操作步骤
取消写保护
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
设置预分频系数和重装载值
IWDG_SetPrescaler(IWDG_Prescaler_64);
IWDG_SetReload(0xFFF);
你可以打开写保护,然后使能即可
//2月1日补充,喂狗会自动打开写保护,所以不需要手动打开
IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
IWDG_Enable();
但是第一次倒计时是从0xFFF开始,所以你可以在使能前喂一次狗,就是重预设值倒计时了。
看门狗这个东西我觉得好好玩啊。
狗狗帮忙看家护院(监测程序),还要定时投喂。
//
你要是真信了就太天真了( ̄_, ̄ )
其实这只狗一点都不会看家护院,反而还挺会捣乱还特能吃。你,也就是主人每隔一端时间就要给他加饭,不然他吃完了就会给你捣蛋。
这样想的话,狗狗不捣蛋说明有人给他加饭,说明你还活着,很正常。万一主人不正常了(你懂的,狗就饿着了,就捣蛋(RESET)了。
基本概念:
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。(以上资料来源于百度百科)
实际上人话就是当“狗狗”监测到程序运行异常的时候就会复位。
// 其实并不是这样的
独立看门狗采用低速内部时钟源。
寄存器
主要有四个:
键值寄存器IWDG_KR: 0~15位有效
预分频寄存器IWDG_PR:0~2位有效。具有写保护功能,要操作先取消写保护
重装载寄存器IWDG_RLR:0~11位有效。具有写保护功能,要操作先取消写保护。
状态寄存器IWDG_SR:0~1位有效
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
==注:==第一次喂狗,狗盆里是满的(从0XFFF)倒计时,你一旦喂过一次,就是你设置的量开始倒计时。
时间如下:
常用库函数
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
操作步骤
取消写保护
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
设置预分频系数和重装载值
IWDG_SetPrescaler(IWDG_Prescaler_64);
IWDG_SetReload(0xFFF);
你可以打开写保护,然后使能即可
//2月1日补充,喂狗会自动打开写保护,所以不需要手动打开
IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
IWDG_Enable();
但是第一次倒计时是从0xFFF开始,所以你可以在使能前喂一次狗,就是重预设值倒计时了。
举报