了解STM32-WDG看门狗功能及用法

目录

简介

独立看门狗

 键寄存器

窗口看门狗

特点


简介

STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障,当计数器达到给定的超时值时,触发一个中断(仅适用于窗口看门狗)或产生系统复位。

看门狗本质上就是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号。

STM32内置两个看门狗:

        独立看门狗(IWDG):独立工作,对时间的精度要求低。

        窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。

重启解决大部分问题 -_-

看门狗一旦启动就无法关闭

独立看门狗

 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障他也仍然有效。

喂狗时间:计数器减到0之前。

 键寄存器

本质上是控制寄存器,用于控制硬件电路的工作。

在可能存在干扰的情况下,一般通过在整个见寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率。

IWDG_PR和IWDG_RLR寄 存 器 具 有 写 保 护 功 能 。 要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重
新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。

 

窗口看门狗

窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

喂狗时间:必须在一定的时间范围内,不能过早或者过晚。

窗口看门狗计数器和控制器合二为一,没有重装寄存器,直接在CNT写入数值就可以。

配置寄存器写入喂狗的最早时间界限,最晚时间界限写入CNT。

特点

可编程的自由运行递减计数器。 

条件复位:

T5-T0为有效的计数值,T6为溢出标志位。T6=1表示没溢出,T6=0表示溢出。要确认计数器减到0溢出,还是小于0x40溢出,T6=1为0x40。

  •  当递减计数器的值小于0x40, (若看门狗被启动)则产生复位。
  •  当递减计数器在窗口外被重新装载, (若看门狗被启动)则产生复位。
  • 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。

    WDGA为看门狗使能位。

    窗口看门狗的递减计数器会一直运行,开启窗口看门狗的时候需要立刻喂狗一次,避免立刻被复位

    工作特性:

  • 递减计数器T[6:0]的值小于0x40时,WWDG产生复位
  • 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
  • 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位(可以在中断里执行操作进行喂狗阻止复位)
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位
  • PCLK1时钟会先进行一个4096的分频再进入WDGTB

    PCLK1时钟会先进行一个4096的分频再进入WDGTB 

    对比

    代码

    可以通过获取标志位来确认看门狗是否正常启动。

    独立狗

    开启独立看门狗会自动打开LSI的时钟

    /*IWDG初始化*/
    	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能
    	IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16
    	IWDG_SetReload(2499);					//设置重装值为2499,独立看门狗的超时时间为1000ms
    	IWDG_ReloadCounter();							//重装计数器,喂狗
    	IWDG_Enable();									//独立看门狗使能
    
    
    //IWDG_ReloadCounter();						//重装计数器,喂狗
    
    //主循环运行时间超过1000ms便会复位,需要在1000ms内进行喂狗

    窗口狗

    /*开启时钟*/
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	//开启WWDG的时钟
    	
    	/*WWDG初始化*/
    	WWDG_SetPrescaler(WWDG_Prescaler_8);			//设置预分频为8
    	WWDG_SetWindowValue(0x40 | 21);					//设置窗口值,窗口时间为30ms
    	WWDG_Enable(0x40 | 54);							//使能并第一次喂狗,超时时间为50ms
    
    //WWDG_SetCounter(0x40 | 54);					//重装计数器,喂狗

    作者:小陈会发光

    物联沃分享整理
    物联沃-IOTWORD物联网 » 了解STM32-WDG看门狗功能及用法

    发表评论