STM32笔记D7.1

窗口看门狗

1.窗口看门狗(WWDG):通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。

2.窗口看门狗工作示意图:

        T[6:0]就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值是自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于0X40。

工作框架:

1.窗口看门狗的必要性

       在跑乱的程序正好执行了刷新看门狗的操作,这种情况下独立看门狗检测不出来。而窗口看门狗保证了不会提前或滞后刷新看门狗,即可检测出程序是否非正常跳过某些程序段。

2.相关寄存器

 1.控制寄存器(WWDG_CR)

2.配置寄存器(WWDG_CFR)

3.状态寄存器(WWDG_SR)

 

3.窗口看门狗配置过程:

  1. 使能看门狗时钟:RCC_APB1PeriphClockCmd();
  2. 设置分频系数:WWDG_SetPrescaler();
  3. 设置上窗口值:WWDG_SetWindowValue();
  4. 开启提前唤醒中断并分组:WWDG_EnableIT();NVIC­_Init();
  5. 使能看门狗:WWDG_Enable();
  6. 喂狗:WWDG_SetCounter();
  7. 编写中断服务函数:WWDG_IRQHandler();

实例:

void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{ 
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);//WWDG时钟使能

	WWDG_SetPrescaler(fprer);设置IWDG预分频值
	WWDG_SetWindowValue(wr);//设置窗口值
	WWDG_Enable(tr);//使能看门狗,设置 counter.                  
	WWDG_ClearFlag();
	WWDG_NVIC_Init();//初始化窗口看门狗 NVIC
	WWDG_EnableIT();//开启窗口看门狗中断
} 

void WWDG_Set_Counter(u8 cnt)//重设置WWDG计数器的值
{
    WWDG_Enable(cnt);	 
}

void WWDG_NVIC_Init()
{
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;//WWDG中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占2,子优先级3,组2	
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//抢占2,子优先级3,组2	
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 
	NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}

void WWDG_IRQHandler(void)
{
	WWDG_SetCounter(0x7F);//当禁掉此句后,窗口看门狗将产生复位
	WWDG_ClearFlag();//清除提前唤醒中断标志位
	LED1=!LED1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值