HTM32看门狗

 

1、独立看门狗

目录

1、独立看门狗的介绍(IWDG)

什么是看门狗

独立看门狗的本质

独立看门狗框架图

独立看门狗时钟

 重装载寄存器

键寄存器

溢出时间计算公式

独立看门狗的实验

 使用STM32CubeMX创建工程

1、配置SYS

2、配置RCC

 3、配置时钟

4、配置GPIO-选按键对应的GPIO口

5、配置IWDG

6、配置串口

7、配置工程名称、工程路径

8、选择固件库

代码实现

效果图

2、窗口看门狗(WWDG)

窗口看门狗介绍

WWDG框图

控制寄存器

配置寄存器

状态寄存器

超时时间计算

窗口看门狗的实验

 使用STM32CubeMX创建工程

1、配置SYS

2、配置RCC

3、配置时钟

4、配置GPIO

5、配置WWDG

6、配置工程名称、工程路径

7、选择固件库

代码实现

3、独立看门狗和窗口看门狗的异同点

的介绍(IWDG)

什么是看门狗

        在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到外界电磁场的干扰,造成程序跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog)。

        独立看门狗工作在主程序之外能够完全独立工作,他的时钟是专用的低速时钟(LSI),由VDD电压供电,在停止模式和待机模式下仍能工作。

        简单举一个例子来说就是有一个程序员叫张三,老板养了一条狗用来监督张三持续工作,张三需要定时喂养这条狗以确保老板知道自己一直在努力工作,如果有一次没有喂养这条狗,那么狗就会反骨咬死张三,张三就会重新升天投胎为程序员继续工作,同时老板还是派这条狗来监督张三的工作,张三同样也需要定时喂养他,往复持续

独立看门狗的本质

本质是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET

如果在计时器没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。

独立看门狗框架图

HTM32看门狗_第1张图片

独立看门狗时钟

独立看门狗的时钟由独立的RC震荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。启用IWDG后,LSI时钟会自动开启。LSI时钟频率并不精确,F1用40kHz。

LSI经过一个8位的预分频器得到计数器时钟。

HTM32看门狗_第2张图片

 重装载寄存器

重装载寄存器是一个12位的寄存器,用于存放重装载值,低12位有效,即最大值为4096,这个值的大小决定着独立看门狗的溢出时间。

HTM32看门狗_第3张图片

键寄存器

键寄存器IWDG_KR可以说是独立看门狗的一个控制寄存器,主要有三种控制方法,往这个寄存器写入下面三个不同的值有不同的效果。

HTM32看门狗_第4张图片

溢出时间计算公式

HTM32看门狗_第5张图片

独立看门狗的实验

开启独立看门狗,溢出时间为5秒,使用按键进行喂狗,不喂狗时反复执行main函数,导致串口一反复输出“程序开始执行”,喂狗时只执行一次main函数,只会往串口发送一次“程序开始执行”

独立看门狗喂狗函数HAL_IWDG_Refresh();

原型:HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)

参数:IWDG_HandleTypeDef *hiwdg:独立看门狗句柄

实例:HAL_IWDG_Refresh(&hiwdg);

 使用STM32CubeMX创建工程
1、配置SYS

HTM32看门狗_第6张图片

2、配置RCC

HTM32看门狗_第7张图片

 3、配置时钟

HTM32看门狗_第8张图片

4、配置GPIO-选按键对应的GPIO口

HTM32看门狗_第9张图片

5、配置IWDG

HTM32看门狗_第10张图片

6、配置串口

HTM32看门狗_第11张图片

7、配置工程名称、工程路径

HTM32看门狗_第12张图片

8、选择固件库

HTM32看门狗_第13张图片

代码实现
//main函数里面
	//这里设置的看门狗是5秒,如果5秒内没有进行喂狗就会复位
	HAL_UART_Transmit(&huart1,(uint8_t*)"程序开始运行》》》\r\n",strlen("程序开始运行》》》\r\n"),100);
  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET){
			//按下key1就开始喂狗
			HAL_IWDG_Refresh(&hiwdg);
		}
  }
效果图

HTM32看门狗_第14张图片

2、窗口看门狗(WWDG)

窗口看门狗介绍

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

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

产生复位的条件:

  • 当递减计数器值从0x40减到0x3F时复位(即T6位跳变到0)
  • 计数器的值大于W[6:0]值时喂狗会复位(其实就是在非窗口期喂狗会产生复位)

产生中断的条件:

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

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

HTM32看门狗_第15张图片

WWDG框图

HTM32看门狗_第16张图片

控制寄存器

HTM32看门狗_第17张图片

配置寄存器

HTM32看门狗_第18张图片

状态寄存器

HTM32看门狗_第19张图片

超时时间计算

HTM32看门狗_第20张图片

窗口看门狗的实验

开启窗门看门狗,计数器值设置为0x7F(127),窗口值设置为0x5F(95),预分频器的时基为8,。不喂狗时反复执行main函数,导致LED1闪烁,喂狗时只执行一次main函数,LED1常亮。在提前唤醒中断服务函数进行喂狗,防止程序复位,LED1常亮,同时翻转LED2的状态。

HTM32看门狗_第21张图片

 使用STM32CubeMX创建工程

1、配置SYS
2、配置RCC
3、配置时钟

以上三步和上面一样,这里就不重复了

4、配置GPIO

HTM32看门狗_第22张图片

5、配置WWDG

HTM32看门狗_第23张图片

HTM32看门狗_第24张图片

6、配置工程名称、工程路径
7、选择固件库

这里两步与上面的也是一样的

代码实现

//中断函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{   //发生中断喂狗
	HAL_WWDG_Refresh(hwwdg);
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//发生中断对小灯的状态进行翻转	
}

//mian函数部分
  MX_GPIO_Init();
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);//在窗口看门狗初始化之前把led1拉低使它亮起来
	HAL_Delay(300); 	
    MX_WWDG_Init();
  while (1)
  {
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//窗口看门狗初始化完成之后就把led2拉高变暗,后续中断发生就产生翻转然后点亮
	HAL_Delay(40);
  }

3、独立看门狗和窗口看门狗的异同点

HTM32看门狗_第25张图片

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