一、介绍
1、
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造
成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会
造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测
的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称
“
看门狗
”
(watchdog)
。
独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(
LSI
),由 VDD 电压供电, 在停止模式和待机模式下仍能工作。
a、独立看门狗本质
本质是一个
12
位的递减计数器,当计数器的值从某个值一直减到
0
的时候,系统就会产生一个复
位信号,即
IWDG_RESET
。
如果在计数没减到
0
之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们
经常说的喂狗
b、独立看门狗框图
c、独立看门狗时钟
独立看门狗的时钟由独立的
RC
振荡器
LSI
提供,即使主时钟发生故障它仍然有效,非常独立。启用
IWDG
后,
LSI
时钟会自动开启。
LSI
时钟频率并不精确,
F1
用
40kHz
。
LSI
经过一个
8
位的预分频器得到计数器时钟。
2、
a、
预分频寄存器只有低三位有效,八种结果,prer就是预分频因子
b、重装载寄存器
重装载寄存器是一个
12
位的寄存器,用于存放重装载值,低
12
位有效,即最大值为
4096
,这个值
的大小决定着独立看门狗的溢出时间。
溢出时间计算公式:
(频率除以分频)的倒数乘以重载数
独立看门狗实验
需求:
开启独立看门狗,溢出时间为
1
秒,使用按键
1
进行喂狗。
硬件接线:
KEY1 -- PA0
UART1 -- PA9/PA10
溢出时间计算:
PSC=64
,
RLR=625
编程实现:
#
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
);
}