• 嵌入式系统开发【深入浅出】 IWDG 与 WWDG


     目录

    简介

    IWDG

    工作流程:

    键寄存器(IWDG_KR)【w  KEY[15:0]】

    预分频寄存器(IWDG_PR)【rw  [2:0]】

    重装载寄存器(IWDG_RLR)【rw  [11:0]】

    状态寄存器(IWDG_SR)【r  [1:0]】

     IWDG 配置函数

    WWDG

    工作流程:

    条件复位

    IWDG与WWDG的区别:

    IWDG和WWDG的相同点:


    1. 简介

      1. 独立看门狗和窗口看门狗都可用来检测和解决由软件错误引起的故障;当计数器达到给 定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
      2. IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
      3. 简单来说,看门狗属于定时器资源,可以检测程序是否异常, 可以帮助人们重启系统
    2. IWDG

      1. 工作流程
      2. 通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减
        到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET,如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。【IWDG 属于单片机内部资源,某些芯片没有集成了看门狗,需要自行添加】
      3. 寄存器(IWDG_KR)【w  KEY[15:0]】
        1. 写0XAAAA    把 RLR 的值重装载到 CNT 【喂狗】
        2. 写0X5555     使PR 和 RLR 这两个寄存器可写
        3. 写0XCCCC   启动 IWDG
        4. 一旦独立看门狗启动,它就关不掉,只有复位才能关掉。
      4. 预分频寄存器(IWDG_PR)【rw  [2:0]】
        1. 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供,即使主时钟发生故障它仍然有效
        2. 预分频系数越大, 频率越小
      5. 重装载寄存器(IWDG_RLR)【rw  [11:0]】
        1. 计数值的范围:0 ~ 4095
        2. 超时时间 Tout = (prv)Hz / 40KHz * (rlv),prv 是预分频器寄存器的值,rlv 是重装载寄存器的值
      6. 状态寄存器(IWDG_SR)【r  [1:0]】
        1. RVU:看门狗计数器重装载值更新
        2. PVU: 看门狗预分频值更新
      7.  IWDG 配置函数

        1. /*
        2. TODO 在功能模块中
        3. IWDG 配置函数有两个形参
        4. prv 用来设置预分频值 可以为IWDG_Prescaler_4、IWDG_Prescaler_8等
        5. rlv 用来设置重加载值 ----> 初始值
        6. */
        7. void IWDG_Configuration(uint8_t prv ,uint16_t rlv)
        8. {
        9. // 使能 预分频寄存器 PR 和重装载寄存器 RLR 可写
        10. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        11. IWDG_SetPrescaler(prv); // 设置预分频器值
        12. IWDG_SetReload(rlv); // 设置重装载寄存器值
        13. IWDG_ReloadCounter(); // 把重装载寄存器的值放到计数器中
        14. IWDG_Enable(); // 使能 IWDG
        15. }
        16. /*
        17. 喂狗函数:把重装载寄存器的值放到计数器中,喂狗,防止 IWDG 复位
        18. 当计数器的值减到 0 的时候会产生系统复位
        19. */
        20. void IWDG_Feed(void)
        21. {
        22. IWDG_ReloadCounter();
        23. }
        24. /*
        25. TODO 在main模块中
        26. 先检查 IWDG_Check();
        27. 后配置 IWDG_Configuration(IWDG_Prescaler_64 ,625);
        28. */
        29. /* 检查是否为独立看门狗复位 */
        30. void IWDG_Check(void)
        31. {
        32. if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET){
        33. /* 独立看门狗复位 */
        34. // 工作内容
        35. // ....
        36. RCC_ClearFlag(); // 清除标志
        37. /*如果一直不喂狗,会一直复位 | 在 1s 时间内喂狗 */
        38. }else{
        39. /*不是独立看门狗复位(可能为上电复位或者手动按键复位之类的) */
        40. // 工作内容
        41. // ....
        42. }
        43. }
    3. WWDG

      1. 工作流程:
      2. 窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义
      3. 条件复位
        1. 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。
        2. 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。
      4. 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可 以被用于重装载计数器以避免WWDG复位。
      5. 等。【IWDG常用】
    4. IWDG与WWDG的区别:

      1. 时钟源不同
        1. IWDG 的时钟源LSI 40KHz
        2. WWDG 的时钟源由APB1 分频后得到
      2. 产生的中断不同
        1. IWDG 不会产生中断信号, 只要触发IWDG, 直接重启系统
        2. WWDG 是有中断的,当计数器达到超时时间可以产生中断信号 
      3. 计数值的范围不同
        1. IWDG 使用了12b的计数器
        2. WWDG 使用了7b的计数器 
      4. 喂狗的范围不同
        1. IWDG 只要在计数器计到0之前, 任意时间都可以喂狗 
        2. WWDG 喂狗存在上阙值和下阙值(0x40)
    5. IWDG和WWDG的相同点:

      1. IWDG和WWDG 都属于STM32提供的外设资源
      2. 当程序跑飞或者设备死机的时候,都可以使系统复位 
      3. 可以自行调节喂狗的时间 
  • 相关阅读:
    go基础学习笔记
    944页40万字智能矿山项目建设整体解决方案(煤矿)2021
    转录组测序学习第二弹
    经典算法之快速排序
    中秋节的月亮怎么拍?不用手机和相机,程序员照样能拍出大片的感觉
    Java8新特性:stream()流的巧妙用法总结
    springboot+vue宠物医院诊所管理系统源码
    SOME/IP学习笔记3
    js两个数组对象进行合并去重
    银行基于云原生架构下的 DevOps 建设实践经验
  • 原文地址:https://blog.csdn.net/weixin_51984896/article/details/133755474