STM32窗口看门狗 WWDG

目录

1.什么是窗口看门狗?

2.窗口看门狗工作原理

3.WWDG框图

4.控制寄存器(WWDG_CR)

5.配置寄存器(WWDG_CFR)

6.状态寄存器(WWDG_SR)

7.超时时间计算

8.窗口看门狗实验

9.独立看门狗和窗口看门狗的异同点


1.什么是窗口看门狗?

窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测 程序运行时间的场合。

窗口看门狗的本质是一个能产生系统复位信号提前唤醒中断的6位计数器。

产生复位条件:

  • 当递减计数器值从 0x40 减到 0x3F 时复位(即T6位跳变到0)
  • 计数器的值大于 W[6:0] 值时喂狗会复位

产生中断条件:

  • 当递减计数器等于 0x40 时可产生提前唤醒中断 (EWI)。

在窗口期内重装载计数器的值,防止复位,也就是所谓的喂狗。

2.窗口看门狗工作原理

STM32窗口看门狗 WWDG_第1张图片

3.WWDG框图

STM32窗口看门狗 WWDG_第2张图片

4.控制寄存器(WWDG_CR)

STM32窗口看门狗 WWDG_第3张图片

5.配置寄存器(WWDG_CFR)

STM32窗口看门狗 WWDG_第4张图片

6.状态寄存器(WWDG_SR)

STM32窗口看门狗 WWDG_第5张图片

7.超时时间计算

  • Tout是WWDG超时时间(没喂狗)
  • Fwwdg是WWDG的时钟源频率(最大36M)
  • 4096是WWDG固定的预分频系数
  • 2^WDGTB是WWDG_CFR寄存器设置的预分频系数值
  • T[5:0]是WWDG计数器低6位,最多63

8.窗口看门狗实验

实验需求:

开启窗口看门狗,计数器值设置为 0X7F(127) ,窗口值设置为 0X5F(95)预分频系数为 8 ,程序启动时点亮 LED1 ,300ms 后熄灭。在提前唤醒中断服务函数进行喂狗,同时翻转 LED2 状态。STM32窗口看门狗 WWDG_第6张图片

硬件接线:

  • LED1 -- PB8
  • LED2 -- PB9

编程实现思路:

打开cubemax

配置SYS:

配置RCC:

配置时钟:

配置WWDG:

STM32窗口看门狗 WWDG_第7张图片

打开NVIC:

生成代码之后打开keil5,加入下部分代码:

//WWDG中断回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
	HAL_WWDG_Refresh(hwwdg);
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}

int main()
{
    MX_GPIO_Init();
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
    HAL_Delay(300);
    MX_WWDG_Init();

    while(1)
    {
    	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
		HAL_Delay(40);
    }
}

9.独立看门狗和窗口看门狗的异同点

           对比点                         独立看门狗                       窗口看门狗
时钟源 独立时钟,LSI (40KHz) ,不精确 PCLK1或PCLK3,精确
复位条件 递减计数到0 窗口期外喂狗或减到0x3F
中断 没有中断 计数值减到0x40可产生中断
递减计数器位数 12位(最大计数范围:4096~0) 7位(最大计数范围:127~63)
应用场合 防止程序跑飞,死循环,死机 检测程序时效,防止软件异常

你可能感兴趣的:(51跟32单片机,stm32,单片机)