WDG看门狗(IWDG)

目录

IWDG(独立看门狗)

1.判断是由RCC上电或者复位键导致的复位 还是有看门狗导致的复位;

2.开启LSI时钟(不需要我们操作,只需要知道有这一步就够了);

3.解除IWDG_PR和IWDG_RLR的写保护;

4.写入预分频器(PR)和重装载寄存器(RLR);

5.启动独立看门狗;

6.主循环中不断执行喂狗;

代码示例

独立看门狗


IWDG(独立看门狗)

1.判断是由RCC上电或者复位键导致的复位 还是有看门狗导致的复位;


RCC_GetFlagStatus();(查看标志位)
RCC_ClearFlag();(清除标志位)

2.开启LSI时钟(不需要我们操作,只需要知道有这一步就够了);

3.解除IWDG_PR和IWDG_RLR的写保护;


IWDG_WriteAccessCmd(); (0x555解除保护 0x000开启保护)

4.写入预分频器(PR)和重装载寄存器(RLR);


IWDG_SetPrescaler();(写预分频器)
IWDG_SetReload();(写重装值)
超时时间:T(iwdg) = T(lsi) × PR预分频系数 × (RL + 1)
其中:Tlsi = 1 / Flsi (0.025ms)

5.启动独立看门狗;


启动看门狗之前可以先喂一次狗
IWDG_Enable();(启动独立看门狗)
开启之后 不用手动打开写保护(喂狗或者启动独立看门狗的过程系统会自动开启写保护)

6.主循环中不断执行喂狗;


IWDG_ReloadCounter();(重新装载寄存器)喂狗

代码示例

独立看门狗

主函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"

int main(void)
{
	/*模块初始化*/
	OLED_Init();						//OLED初始化
	Key_Init();							//按键初始化
	
	/*显示静态字符串*/
	OLED_ShowString(1, 1, "IWDG TEST");
	
	/*判断复位信号来源*/
	if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)	//如果是独立看门狗复位
	{
		OLED_ShowString(2, 1, "IWDGRST");			//OLED闪烁IWDGRST字符串
		Delay_ms(500);
		OLED_ShowString(2, 1, "       ");
		Delay_ms(100);
		
		RCC_ClearFlag();							//清除标志位
	}
	else											//否则,即为其他复位
	{
		OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串
		Delay_ms(500);
		OLED_ShowString(3, 1, "   ");
		Delay_ms(100);
	}
	
	/*IWDG初始化*/
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能
	IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16
	IWDG_SetReload(2499);							//设置重装值为2499,独立看门狗的超时时间为1000ms
	IWDG_ReloadCounter();							//重装计数器,喂狗
	IWDG_Enable();									//独立看门狗使能
	
	while (1)
	{
		Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死
		
		IWDG_ReloadCounter();						//重装计数器,喂狗
		
		OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串
		Delay_ms(200);								//喂狗间隔为200+600=800ms
		OLED_ShowString(4, 1, "    ");
		Delay_ms(600);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小怪大梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值