独立看门狗和窗口看门狗

独立看门狗(Independent watchdog)和窗口看门狗(Window watchdog)是用于系统监控和保护的两种不同类型的硬件或软件机制。

1. 独立看门狗:
   - 用于监视整个系统的运行状态。
   - 当系统出现故障或停滞时,独立看门狗会触发并重新启动系统,以避免系统永久停止或陷入无限循环。
   - 独立看门狗通常是一个独立的硬件模块,其操作不受主处理器的控制,因此即使主处理器出现故障,独立看门狗仍然能够触发系统的重启。

2. 窗口看门狗:
   - 也称为软件看门狗(Software watchdog)。
   - 与独立看门狗不同,窗口看门狗通常是通过软件实现的一种监控机制。
   - 窗口看门狗监视特定的软件进程或任务,并在该任务的运行时间超出了预设的时间窗口时,重启或采取其他预定义的应对措施。


- 如果需要对整个系统进行监控和保护,并且希望即使主处理器出现故障也能够进行系统的重启,那么可以选择独立看门狗。
- 如果只需要监视特定的软件进程或任务,并在其运行超时时采取措施,那么可以选择窗口看门狗。

 

什么时候用不同的狗?

1. 独立看门狗:
   - 实时控制系统:例如工业自动化系统、嵌入式控制系统等,对实时性要求较高的应用场景。
   - 嵌入式系统:例如用于汽车电子、家电控制、医疗设备等领域,需要保证系统稳定性和可靠性的应用。
   - 遥测设备:例如远程监控、传感器网络等,需要长时间运行且自动化程度较高的项目。

2. 窗口看门狗:
   - 嵌入式软件开发:对于需要在单片机上运行的软件,可以使用窗口看门狗来监视软件的运行情况,确保软件不会陷入死循环或其他异常情况。
   - 通信系统:例如通过串口或网络进行通信的项目,可以使用窗口看门狗监视通信任务的执行情况,避免通信超时或死锁等问题。
   - 数据采集与处理:对于需要定时采集数据并进行处理的项目,可以使用窗口看门狗监视数据采集和处理任务,确保任务能够在预定时间内完成。

 wwdg.c

#include "wwdg.h"
#include "led.h"


void Wwdg_Init(void)
{
	NVIC_InitTypeDef  NVIC_InitStruct;
	
	//使能 WWDG 时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

	//设置分频
	 WWDG_SetPrescaler(WWDG_Prescaler_8); //最长喂狗时间为49.93
	
	//设置窗口值
	WWDG_SetWindowValue(0x7F);
	
	//使能看门狗并重装寄存值:
    WWDG_Enable(0x7F);
	
	//清空中断标志
	WWDG_ClearFlag();	
	
	NVIC_InitStruct.NVIC_IRQChannel						= WWDG_IRQn;  	//选择通道
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority	= 2;			//抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority			= 2; 			//响应优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd					= ENABLE;		//通道使能	
	//5、配置中断分组(NVIC),并使能中断。
	NVIC_Init(&NVIC_InitStruct);
	
	WWDG_EnableIT();

}

u32 i = 0;
//窗口看门狗中断服务程序 每当到达0x40时进行中断喂狗
void WWDG_IRQHandler(void)
{
	
	//重设窗口看门狗值
	WWDG_SetCounter (0x7F); 
	//清除提前唤醒中断标志位
	WWDG_ClearFlag();	
	/*添加执行程序的逻辑代码*/
	GPIO_ToggleBits(GPIOA, GPIO_Pin_7);
	i++;	
	
	
}

README

其他main.c和wwdg.h根据独立看门狗改改名称就行。(在上两篇) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值