独立看门狗(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根据独立看门狗改改名称就行。(在上两篇)