STM32 看门狗详解

STM32 看门狗详解目录1、IWDG1.1独立看门狗简介1.2独立看门狗的特点1.3独立看门狗功能描述1.4硬件看门狗1.5寄存器访问保护1.6调试模式2、WWDG2.1简介2.2窗口看门狗主要特点2.3窗口看门狗功能说明2.4如何设置看门狗超时2.5调试模式3、区别1、IWDG1.1独立看门狗简介IWDG(Independentwatchdog)独立看门狗,可以用来检测并解决由于软件错误导致的故障,当计数器到达给定的超时值时,会触发

大家好,又见面了,我是你们的朋友全栈君。

目录

1、IWDG

1.1 独立看门狗简介

1.2 独立看门狗的特点

1.3 独立看门狗功能描述

1.4 硬件看门狗

1.5 寄存器访问保护

1.6 调试模式

2、WWDG

2.1 简介

2.2 窗口看门狗主要特点

2.3 窗口看门狗功能说明

2.4 如何设置看门狗超时

2.5 调试模式

3、区别


1、IWDG

1.1 独立看门狗简介

IWDG(Independent watchdog)独立看门狗,可以用来检测并解决由于软件错误导致的故障,当计数器到达给定的超时值时,会触发一个中断或产生系统复位

独立看门狗的时钟是它专用的低速时钟(LSI),所以它能保持工作及时主时钟出现问题。窗口看门狗的时钟是有APB1时钟分频得到得到,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。

1.2 独立看门狗的特点

①自由运行递减计数器

②时钟来自通过独立的RC振荡器(可以工作在待机和停止模式下)

③当向下计数器值达到0时,会产生复位(如果看门狗已经激活)

1.3 独立看门狗功能描述

STM32 看门狗详解

上图红框显示,看门狗功能由 VDD 电压域供电,所以在停止模式和待机模式下仍能工作

向关键字寄存器(IWDG_KR)写入0XCCCC,独立看门狗就会启动,计数器开始下降从复位值0XFFF。当计数器值到达0,会产生一个复位信号(独立看门狗复位)

无论何时向关键字寄存器写入0XAAAA,IWDG_RLR的数值会重载进计数器,避免看门狗复位

1.4 硬件看门狗

如果通过器件选项位使能“硬件看门狗”功能,上电时将自动使能看门狗;如果在计数器计数结束前,若软件没有向关键字寄存器写入相应的值,则系统会产生复位

1.5 寄存器访问保护

IWDG_PR 和 IWDG_RLR 寄存器具有写访问保护。若要修改寄存器,必须首先对 IWDG_KR寄存器写入代码 0x5555。而写入其他值则会破坏该序列,从而使寄存器访问保护再次生效。这意味着重装载操作(即写入 0xAAAA)也会启动写保护功能。

状态寄存器指示预分频值和递减计数器是否正在被更新

1.6 调试模式

当微控制器进入调试模式时( Cortex™-M3 内核停止), IWDG 计数器会根据 DBG 模块中的 DBG_IWDG_STOP 配置位选择继续正常工作或者停止工作

下图是LSI在不同分频情况下IWDG超时周期的最小值和最大值。

STM32 看门狗详解

2、WWDG

2.1 简介

窗口看门狗(Window watchdog)通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。如果在递减计数器达到窗口寄存器值之前刷新控制寄存器中的 7 位递减计数器值,也会产生 MCU 复位。这意味着必须在限定的时间窗口内刷新计数器

2.2 窗口看门狗主要特点

①可编程自由向下计数器

②复位条件,激活看门狗的情况下,当递减计数器值小于 0x40 时复位;在窗口之外重载递减计数器时复位。

③提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)

2.3 窗口看门狗功能说明

如果窗口看门狗启动(WWDG_CR寄存器的WDGA位置1),7位向下计数器从0X40向0x3F滚动(T6已经清零),会导致一个复位。如果软件重载计数器,当计数器值大于窗口所存储的值时,就会产生复位

STM32 看门狗详解

应用程序必须在正常操作期间写WWDG_CR寄存器去组织MCU复位。这个操作必须发生在计数器值小于窗口寄存器值。窗口寄存器值存储在WWDG_CR寄存器,必须在0XFF和0XC0之间。

使能窗口看门狗

复位之后,窗口寄存器经常是禁止的。通过设置WWDG_CR寄存器的WDGA位去使能,不能被禁止除了通过复位。

控制向下计数器

递减计数器处于自由运行状态:即使禁止看门狗,递减计数器仍继续递减计数。当使能看门狗时,必须将 T6 位置 1,以防止立即复位

T[5:0] 位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入 WWDG_CR 寄存器时,预分频值是未知的。配置寄存器 (WWDG_CFR) 包含窗口的上限:为防止发生复位,当递减计数器的值低于窗口寄存器值且大于 0x3F 时必须重载

注意:可使用 T6 位产生软件复位(将 WDGA 位置 1 并将 T6 位清零)

STM32 看门狗详解

看门狗中断高级特性

如果在产生实际复位之前必须执行特定的安全操作或数据记录,则可使用提前唤醒中断(EWI)。通过设置 WWDG_CFR 寄存器中的 EWI 位使能 EWI 中断。当递减计数器的值为0x40 时,将生成 EWI 中断。在复位器件之前,可以使用相应的中断服务程序 (ISR) 来触发特定操作(例如通信或数据记录)。

在某些应用中,可以使用 EWI 中断来管理软件系统检查和/或系统恢复/功能退化,而不会生成 WWDG 复位。在这种情况下,相应的中断服务程序 (ISR) 可用来重载 WWDG 计数器以避免 WWDG 复位,然后再触发所需操作。

通过将 0 写入 WWDG_SR 寄存器中的 EWIF 位来清除 EWI 中断

2.4 如何设置看门狗超时

STM32 看门狗详解

例子:APB1的频率是24MHZ,WDGTB[1:0]设置3,T[5:0]设置成63

t = 1/24000*4096*2*2*2*(63+1)= 24.85ms

有关 TWWDG 的最小值和最大值

STM32 看门狗详解

2.5 调试模式

当微控制器进入调试模式时( Cortex™-M3内核停止),WWDG计数器会根据DBG模块中的DBG_WWDG_STOP配置位选择继续正常工作或者停止工作

3、区别

应用场景不同

IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序

为什么要窗口看门狗?

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;

如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。

看门狗代码开源地址:

https://github.com/strongercjd/STM32F207VCT6

点击查看本文所在的专辑,STM32F207教程

关注公众号,第一时间收到文章更新。评论区不能及时看到,需要交流可以到公众号沟通

STM32 看门狗详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131537.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云打码注册以及使用「建议收藏」

    云打码注册以及使用「建议收藏」这里用云打码演示:http://www.yundama.com/about.html需要注册两个账号,1.普通用户(充值金额),2.开发者用户(创建软件使用)题分和价格表链接:http://www

    2022年8月2日
    9
  • 用C#制作计算器_基于c51简易计算器设计

    用C#制作计算器_基于c51简易计算器设计在一些问题中有时会用到计算器,今天我们可以用C#做一个简易的计算器用到的开发工具为VisualStudio2019(我用的是2019,其他版本的也可以)1.首先新建一个项目文件.2.在Form1.cs文件(Winform框架基础文件)中添加所用到的控件.3.添加TextBox和ComboBox以及Button控件4.对Button以及ComboBox进行一些简单的设置……

    2025年10月12日
    7
  • rsyslog日志管理[通俗易懂]

    rsyslog日志管理[通俗易懂]文章目录简介基本维护核心概念实例配置客户端日志服务器输出日志到mysql简介rsyslog是一个快速的日志处理系统,具有卓越的性能和出色的安全性,采用模块化设计,他可以从各种数据源中接收输入、转换数据再将结果输出到指定的位置。他不仅适用于企业,也适用于小型系统。rsyslog是一个c/s架构,既可以作为日志客户端上报日志,也可以作为服务端接收日志rsyslog是模块化设计,因此很多功能需要…

    2022年9月24日
    4
  • java语言打印出菱形_java怎么打印菱形

    java语言打印出菱形_java怎么打印菱形Java典型例题(打印菱形)题目:利用*号打印出一个菱形图样分析:下面逐步分析菱形打印的推演过程推演过程利用单独的方法演示,使用时直接在主方法中调用对应的方法即可。第一步,打印一行*号/**打印出如下图形: ********/publicstaticvoidprint01(){//每次打印一个星星for(inti=1;i<=7;i++){…

    2022年9月29日
    5
  • 华为太极magisk安装教程_教程:如何升级太极内部的应用

    华为太极magisk安装教程_教程:如何升级太极内部的应用使用过太极的小伙伴都知道,要把应用添加到太极(magisk版除外)中是个麻烦事儿:首先得花费大量的时间来创建应用,然后还必须卸载原来的应用,安装完毕之后又要花很长的时间来优化。如果待创建的应用安装包比较大并且你手机的CPU不在工作状态,那这个流程就不是一般的长了。这时候就有童鞋会问了,如果我在太极里面创建的应用要升级了怎么办?是不是每次升级都需要卸载原应用?实际上,在太极内部升级应用…

    2022年6月3日
    165
  • sql模糊查询like并使用concat拼接

    sql模糊查询like并使用concat拼接模糊查询insure_company,左起0104开头,右边模糊匹配。(like搭配%表示模糊匹配,concat拼接),claim_date同。放入mapper.xml文件中时,只需用#{参数名}代替sql查询中的具体数据即可。

    2022年4月30日
    245

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号