• 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,加入下部分代码:

    1. #include
    2. int main()
    3. {
    4. //串口发送函数
    5. HAL_UART_Transmit(&huart1, "程序重新启动\r\n", strlen("程序重新启动\r\n"), 100);
    6. while(1)
    7. {
    8. if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
    9. HAL_IWDG_Refresh(&hiwdg);//喂狗函数
    10. HAL_Delay(50);
    11. }
    12. }

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

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

               对比点                        独立看门狗                      窗口看门狗
    时钟源独立时钟,LSI (40KHz) ,不精确PCLK1或PCLK3,精确
    复位条件递减计数到0窗口期外喂狗或减到0x3F
    中断没有中断计数值减到0x40可产生中断
    递减计数器位数12位(最大计数范围:4096~0)7位(最大计数范围:127~63)
    应用场合防止程序跑飞,死循环,死机检测程序时效,防止软件异常
  • 相关阅读:
    手机进水声音变小怎么办
    MATLAB算法实战应用案例精讲-【优化算法】小龙虾优化算法(COA)(附MATLAB代码实现)
    python利用joblib进行并行数据处理
    10年程序员职业生涯感悟—写给正在迷茫的你
    libusb-win32使用问题
    字体的基础知识:英文字体的特征及结构(终于找到了)
    ES6 Set数据结构
    Truncation Sampling as Language Model Desmoothing
    mysql如果忘记密码怎么办
    零信任SPA工作流程 已完成未发布
  • 原文地址:https://blog.csdn.net/m0_74712453/article/details/134429344