目录
独立看门狗介绍
什么是看门狗?
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造 成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会 造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测 的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称 “ 看门狗” (watchdog) 。
独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(
LSI
),由
VDD
电压供电, 在停止模式和待机模式下仍能工作。
独立看门狗本质
本质是一个
12
位的递减计数器,当计数器的值从某个值一直减到
0
的时候,系统就会产生一个复
位信号,即
IWDG_RESET
。
如果在计数没减到
0
之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们
经常说的喂狗。
独立看门狗框图
独立看门狗时钟
独立看门狗的时钟由独立的
RC
振荡器
LSI
提供,即使主时钟发生故障它仍然有效,非常独立。启用
IWDG
后,
LSI
时钟会自动开启。
LSI
时钟频率并不精确,
F1
用
40kHz
。
LSI
经过一个
8
位的预分频器得到计数器时钟。
重装载寄存器
重装载寄存器是一个
12
位的寄存器,用于存放重装载值,低
12
位有效,即最大值为
4096
,这个值
的大小决定着独立看门狗的溢出时间。
键寄存器
键寄存器
IWDG_KR
可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器
写入下面三个不同的值有不同的效果。
溢出时间计算公式:
独立看门狗实验
需求:
开启独立看门狗,溢出时间为 1 秒,使用按键 1 进行喂狗。
硬件接线:
KEY1 -- PA0UART1 -- PA9/PA10
溢出时间计算:
PSC=64 , RLR=625这样设置出来的是1000ms,也就是1秒,基于上面的公式
编程实现:
#include <string.h>
main函数:
HAL_UART_Transmit(&huart1, "####即将自爆####\n", strlen("####即将自爆####\n"), 100);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
HAL_IWDG_Refresh(&hiwdg);
HAL_Delay(50);
}