STM32 独立看门狗

目录

1.独立看门狗介绍

2.独立看门狗本质

3.独立看门狗框图​编辑

4.独立看门狗时钟

5.预分频寄存器(IWDG_PR)​编辑

6.重装载寄存器(IWDG_RLR)

7.键寄存器(IWDG_KR)

8.独立看门狗实验和代码示例

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


1.独立看门狗介绍

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

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

2.独立看门狗本质

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

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

3.独立看门狗框图

4.独立看门狗时钟

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

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

5.预分频寄存器(IWDG_PR)

分频系数算法:

prer是IWDG_PR 的值

6.重装载寄存器(IWDG_RLR)

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

7.键寄存器(IWDG_KR)

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

溢出时间计算公式:

8.独立看门狗实验和代码示例

实验需求:

开启独立看门狗,溢出时间为1秒,使用按键1进行喂狗,不定时喂狗程序重新启动,通过串口检验是否喂狗

硬件接线:

  • KEY1 -- PA0
  • UART1 -- PA9/PA10

溢出时间计算:

  • PSC=64
  • RLR=625
  • f固定为40hz

编程实现思路:

打开cubemax

配置SYS:

配置RCC:

配置时钟:

配置IWDG:

配置串口和PA0引脚:

打开工程管理生成代码:

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

#include 

int main()
{
    //串口发送函数
    HAL_UART_Transmit(&huart1, "程序重新启动\r\n", strlen("程序重新启动\r\n"), 100);
    while(1)
    {
        if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
        HAL_IWDG_Refresh(&hiwdg);//喂狗函数
        HAL_Delay(50);
    }
}

编译烧录代码,打开串口助手,按下key1键时,喂狗,不喂狗串口输出程序重新启动:

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

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

你可能感兴趣的:(STM32)