看门狗WDT与WWDT使用场景对比

看门狗WDT与WWDT使用场景对比,第1张

看门狗简介 

  看门狗通常用来提高系统的稳定性。当因为一些特殊的情况导致程序跑飞,或者运行逻辑错误,而没有及时喂狗时,看门狗会将MCU重新复位,以达到自动从异常中恢复的效果。建议用户在所有应用中都使用看门狗,以提高系统稳定性。 AT32单片机有两个看门狗:看门狗(WDT)和窗口看门狗(WWDT):

看门狗(WDT):一个12位的递减计数器,当计数器从某个值递减到0的时候,系统会产生复位,如果在计数器递减到0之前刷新了递减计数器,那么就不会产生复位。

窗口看门狗(WWDT):一个7位的递减计数器,当计数器从某个值递减到0x3F的时候,系统会产生复位,如果在规定时间刷新了计数器(窗口时间内),那么就不会产生复位。

各个型号差异

  各型号的窗口看门狗(WWDT)相同,程序兼容。

各型号的看门狗(WDT)基本功能相同,只是各个型号之间,可能去掉了更高级的窗口功能或者低功耗下可选的停止运行功能,其余功能相同并且程序兼容。

表1. 各型号看门狗(WDT)差异 看门狗WDT与WWDT使用场景对比,2abd417e-1eeb-11ed-ba43-dac502259ad0.png,第2张 √:表示支持该功能,且功能相同。 ×:表示不支持该功能。  

使用场景对比

  看门狗(WDT)和窗口看门狗(WWDT)作为两种不同类型的看狗,有着不用的适用环境。 图1. WDT与WWDT使用场景对比 看门狗WDT与WWDT使用场景对比,2ad5c6ae-1eeb-11ed-ba43-dac502259ad0.png,第3张

特点对比

  图2. WDT与WWDT特点对比 看门狗WDT与WWDT使用场景对比,2aef5d44-1eeb-11ed-ba43-dac502259ad0.png,第4张

看门狗WDT 

寄存器访问

  状态寄存器 看门狗功能位于两个不同的区域,寄存器部分位于1.2V电压域,计数逻辑部分位于VDD电压域,所以看门狗能够在SLEEP、DEEPSLEEP、STANDBY模式下运行。

对看门狗寄存器的写 *** 作位于1.2V电压域,所以当写了寄存器之后,还需要将寄存器值同步到VDD电压域。每一个寄存器都有一个同步标志指示同步 *** 作是否完成。每一次同步时间最多需要4个LICK时钟,大约125us。当写了寄存器之后对应的同步标志自动置1,当同步完成了之后标志自动清0,在同步标志清零之前,不允许再写此寄存器。

图3. 看门狗框图 看门狗WDT与WWDT使用场景对比,2affc03a-1eeb-11ed-ba43-dac502259ad0.png,第5张

RLDF:当该位为1时,表示重装载值的同步正在进行中;当为0时,表示该过程执行完成。

DIVF:当该位为1时,表示预分频器值的同步正在进行中;当为0时,表示该过程执行完成。 WINF:当该位为1时,表示窗口值的同步正在进行中;当为0时,表示该过程执行完成。

标志获取函数:

看门狗WDT与WWDT使用场景对比,2b12e5fc-1eeb-11ed-ba43-dac502259ad0.png,第6张

寄存器写保护

看门狗寄存器受到写保护,在写寄存器前需要先解锁写保护,写命令寄存器CMD=0x5555解锁写保护。当写一个其他值,将重新开启读保护。受读保护的寄存器如下表所示: 表2. 看门狗寄存器 看门狗WDT与WWDT使用场景对比,2b1f448c-1eeb-11ed-ba43-dac502259ad0.png,第7张

寄存器解锁写保护函数:

看门狗WDT与WWDT使用场景对比,2b2fefc6-1eeb-11ed-ba43-dac502259ad0.png,第8张    

时钟结构

  图4. 看门狗时钟 看门狗WDT与WWDT使用场景对比,2b3e5566-1eeb-11ed-ba43-dac502259ad0.png,第9张

看门狗计数器由LICK时钟驱动,经过8位的预分频器得到递减计数器时钟。LICK是内部RC时钟,其典型值为40kHz,范围为30kHz~60kHz之间(详情请见对应型号的数据手册)。所以超时时间也是在一定区间内,使用时应注意在超时时间配置上应该留有余量,如果需要获得较为精确的看门狗超时时间,可以先通过定时器测量出LICK频率,然后再根据实际的LICK频率计算超时时间。

通过寄存器DIV[2:0]配置配置不同的预分频值,可配置预分频值为4、8、16、32、64、128、256。

看门狗WDT与WWDT使用场景对比,2b5149d2-1eeb-11ed-ba43-dac502259ad0.png,第10张

分频设置函数:

看门狗WDT与WWDT使用场景对比,2b61ed5a-1eeb-11ed-ba43-dac502259ad0.png,第11张

计数器

  看门狗的计数器是一个12位的递减计数器,最大值为0xFFF。当开启看门狗后,计数值将从设定的值开始递减,当递减到0时,产生系统复位。 图5. 看门狗重载 看门狗WDT与WWDT使用场景对比,2b70403a-1eeb-11ed-ba43-dac502259ad0.png,第12张

计数值通过重载寄存器RLD设置,在分频值确定的情况下,该值的大小决定了看门狗复位的时间长 短,每当往命令寄存器WDT_CMD写入0xAAAA时,该寄存器的值便会更新到递减计数器中(此 *** 作通常称为喂狗),喂狗的 *** 作需要在计数器递减到0之前进行,不然会发生复位。

看门狗复位时间计算如下:

看门狗WDT与WWDT使用场景对比,2b87778c-1eeb-11ed-ba43-dac502259ad0.png,第13张

表3. 看门狗复位时间(LICK=40kHz)

看门狗WDT与WWDT使用场景对比,2b95c9a4-1eeb-11ed-ba43-dac502259ad0.png,第14张

重载值设置函数:

看门狗WDT与WWDT使用场景对比,2ba6c59c-1eeb-11ed-ba43-dac502259ad0.png,第15张

重载看门狗计数器(喂狗)函数:

看门狗WDT与WWDT使用场景对比,2bb9933e-1eeb-11ed-ba43-dac502259ad0.png,第16张

窗口功能

  当WIN[11:0]设置为非默认值(0xFFF)将开启窗口功能。当在计数值大于窗口值时重载计数器值将会产生系统复位,例如将WIN值设置成800时允许重载的窗口时间如下图所示。 图6. 窗口功能 看门狗WDT与WWDT使用场景对比,2bc5327a-1eeb-11ed-ba43-dac502259ad0.png,第17张

窗口设置函数:

看门狗WDT与WWDT使用场景对比,2bd735e2-1eeb-11ed-ba43-dac502259ad0.png,第18张

低功耗停止计数

  看门狗能够在SLEEP、DEEPSLEEP、STANDBY模式下运行,用户可选择进入DEEPSLEEP、STANDBY模式后计数器是否停止计数,可由用户系统数据区中的nWDT_DEPSLP、nWDT_STDBY位配置。

如果设置了停止计数,当进入了DEEPSLEEP、STANDBY模式后,看门狗计数器停止递减,意味着看门狗在这两种低功耗模式下不会发生复位,当从这两种模式唤醒后,计数器从进入时的值继续递减。

图7. 低功耗停止计数功能

看门狗WDT与WWDT使用场景对比,2bf09cee-1eeb-11ed-ba43-dac502259ad0.png,第19张

用户系统数据擦除函数:

看门狗WDT与WWDT使用场景对比,2c08c49a-1eeb-11ed-ba43-dac502259ad0.png,第20张

用户系统数据配置函数:

看门狗WDT与WWDT使用场景对比,2c1aa76e-1eeb-11ed-ba43-dac502259ad0.png,第21张

低功耗停止功能使用示例:

看门狗WDT与WWDT使用场景对比,2c2ade54-1eeb-11ed-ba43-dac502259ad0.png,第22张    

启动看门狗

  看门狗启动方式分为硬件启动和软件启动,当看门狗启动了之后不能被关闭,除非发生复位。

软件启动方式

向命令寄存器写入0xCCCC,启用看门狗。

看门狗软件使能函数:

看门狗WDT与WWDT使用场景对比,2c3e090c-1eeb-11ed-ba43-dac502259ad0.png,第23张

硬件启动方式

硬件启动则需通过配置用户系统数据区的nWDT_ATO_EN位来实现,使能硬件看门狗后,看门狗将在上电复位后自动开始运行。

硬件启动看门狗使用示例:

看门狗WDT与WWDT使用场景对比,2c4a8290-1eeb-11ed-ba43-dac502259ad0.png,第24张    

使用方法

  看门狗一般用于检测程序跑飞或者死循环,比如一个正常的程序运行完的时间是10ms,可以设置看门狗超时的时间为20ms,当程序运行完便立即进行喂狗 *** 作,这样便不会产生复位,超过20ms还未喂狗时,说明产生了故障,此时会复位MCU。

例如:要设置WDT超时时间为20ms,那么可以设置预分频值为4,计数值为200

看门狗WDT与WWDT使用场景对比,2c5c222a-1eeb-11ed-ba43-dac502259ad0.png,第25张

  配置步骤: 1. 禁止寄存器写保护 看门狗WDT与WWDT使用场景对比,2c7983b0-1eeb-11ed-ba43-dac502259ad0.png,第26张

2. 设置预分频值为4

看门狗WDT与WWDT使用场景对比,2c940cc6-1eeb-11ed-ba43-dac502259ad0.png,第27张

3. 设置重载值为200

看门狗WDT与WWDT使用场景对比,2ca59df6-1eeb-11ed-ba43-dac502259ad0.png,第28张

4. 启用看门狗

看门狗WDT与WWDT使用场景对比,2cb549ae-1eeb-11ed-ba43-dac502259ad0.png,第29张

5. 在应用程序中重载计数器

看门狗WDT与WWDT使用场景对比,2cc59b7e-1eeb-11ed-ba43-dac502259ad0.png,第30张    

窗口看门狗WWDT 

  窗口看门狗(WWDT)主要作用是用来检测软件逻辑是否按照预期执行,其喂狗时间是一个有上下范围内,可以通过相关的寄存器,设定其上限时间和下限时间,喂狗的时间不能过早也不能过晚(当递减计数器的值小于0x40,或者当递减计数器在窗口外被刷新时产生复位)。  

时钟结构

  图8. 窗口看门狗时钟 看门狗WDT与WWDT使用场景对比,2cd1dc68-1eeb-11ed-ba43-dac502259ad0.png,第31张

窗口看门狗时钟由APB1时钟分频而来,由于APB1_CLK的精确性,因此窗口看门狗时间精度很高。APB1时钟先经过4096分频后,再送到预分频器,最后提供给7位递减计数器CNT[6:0]。可以配置不同的预分频值来获得不同的时钟,通过DIV[1:0]可配置预分频值取值范围为1、2、4、8。

看门狗WDT与WWDT使用场景对比,2ce37ba8-1eeb-11ed-ba43-dac502259ad0.png,第32张

分频设置函数:

看门狗WDT与WWDT使用场景对比,2cf399ac-1eeb-11ed-ba43-dac502259ad0.png,第33张

计数器

  窗口看门狗的计数器是一个7位的递减计数器,最大值为0x7F,当开启看门狗后,计数值将从设定的值开始递减,当递减到0x3F时,产生系统复位。

看门狗WDT与WWDT使用场景对比,2d027d00-1eeb-11ed-ba43-dac502259ad0.png,第34张

表4. 窗口看门狗复位时间(PCLK=72MHz)

看门狗WDT与WWDT使用场景对比,2d0fbd9e-1eeb-11ed-ba43-dac502259ad0.png,第35张

计数值设置函数:

看门狗WDT与WWDT使用场景对比,2d33d954-1eeb-11ed-ba43-dac502259ad0.png,第36张    

窗口功能

  窗口的值(WIN[6:0])可以自由设定,最大值为(0x7F),最小值必须大于下窗口的0x40,所以取值范围为64~127(即:0x40~0x7F);只有当递减计数器的值小于等于窗口值时,才允许刷新递减计数器,否则将会产生复位。

为了便于喂狗,应用程序也可以利用重载计数器中断(RLDIEN)进行喂狗。当递减计数器到达0x40时,则产生中断,在相应的中断服务程序中重新设置计数器。

图9. 窗口功能 看门狗WDT与WWDT使用场景对比,2d468a7c-1eeb-11ed-ba43-dac502259ad0.png,第37张

如上图所示当配置窗口值为0x4F时,不允许刷新的窗口为0x7F~0x50,允许刷新的窗口为0x4F~0x40。

重载标志清除函数:

看门狗WDT与WWDT使用场景对比,2d55dcfc-1eeb-11ed-ba43-dac502259ad0.png,第38张

重载标志获取函数:

看门狗WDT与WWDT使用场景对比,2d6826e6-1eeb-11ed-ba43-dac502259ad0.png,第39张

重载中断使能函数:

看门狗WDT与WWDT使用场景对比,2d77e734-1eeb-11ed-ba43-dac502259ad0.png,第40张

窗口设置函数:

看门狗WDT与WWDT使用场景对比,2d83b2d0-1eeb-11ed-ba43-dac502259ad0.png,第41张

看门狗使能

  设置WWDTEN=1使能窗口看门狗,当窗口看门狗被打开后不能被关闭,直到复位。为了避免使能看门狗后立即发生复位,在使能看门狗时,应该同时配置看门狗计数值。 窗口看门狗使能函数: 看门狗WDT与WWDT使用场景对比,2d90a800-1eeb-11ed-ba43-dac502259ad0.png,第42张

使用方法

  窗口看门狗一般用于检测逻辑运行是否正常,比如一个正常的程序执行完的时间是10ms,当程序在10ms以前执行完说明出现了逻辑错误,可以设置看门狗窗口值为9ms,当程序在9ms以前进行喂狗时,说明程序产生了故障,此时会产生一个复位。

例如:当PCLK1=36MHz时,要设置WWDT超时时间为9ms,那么可以设置预分频值为4,总的分频为 4x4096=16384。计数值为127,窗口值为108,此时从计数值减到窗口值时间约为9.1ms。

看门狗WDT与WWDT使用场景对比,2d9e34d4-1eeb-11ed-ba43-dac502259ad0.png,第43张

看门狗WDT与WWDT使用场景对比,2dae38fc-1eeb-11ed-ba43-dac502259ad0.png,第44张

所以允许喂狗时间为9.1~29.1ms,不允许喂狗时间为0~9.1ms。

配置步骤:

1. 开启窗口看门狗APB1时钟 看门狗WDT与WWDT使用场景对比,2dc11a94-1eeb-11ed-ba43-dac502259ad0.png,第45张

2. 设置预分频值为4,总的分频为4096x4=16384

看门狗WDT与WWDT使用场景对比,2dce8a94-1eeb-11ed-ba43-dac502259ad0.png,第46张

3. 设置窗口值为108

看门狗WDT与WWDT使用场景对比,2de2ff56-1eeb-11ed-ba43-dac502259ad0.png,第47张

4. 启用看门狗

看门狗WDT与WWDT使用场景对比,2df383bc-1eeb-11ed-ba43-dac502259ad0.png,第48张

5. 在应用程序中重载计数器

看门狗WDT与WWDT使用场景对比,2e036a98-1eeb-11ed-ba43-dac502259ad0.png,第49张

备注:需要在0x3F<递减计数器<=窗口值执行

案例 看门狗WDT使用 

功能简介

  演示看门狗(WDT)功能使用。  

资源准备

  1) 硬件环境: 对应产品型号的AT-START BOARD

2) 软件环境

projectat_start_f4xxexampleswdtwdt_reset 注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。  

软件设计

  1) 配置流程

初始化看门狗

在主程序中喂狗

2) 代码介绍

main函数代码描述

看门狗WDT与WWDT使用场景对比,2e10ce68-1eeb-11ed-ba43-dac502259ad0.png,第50张    

实验效果

正常运行时看门狗不会复位,当按下按键后,停止喂狗,导致MCU复位。

复位后,如果检查到是看门狗复位则LED4点亮,否则LED4不亮。

案例 窗口看门狗WWDT使用 

功能简介

  演示窗口看门狗(WWDT)功能使用。  

资源准备

  1) 硬件环境: 对应产品型号的AT-START BOARD

2) 软件环境

projectat_start_f4xxexampleswwdtwwdt_reset

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.xprojectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

软件设计

  1) 配置流程

初始化窗口看门狗

在主程序中喂狗

2) 代码介绍

main函数代码描述

看门狗WDT与WWDT使用场景对比,2e1f34bc-1eeb-11ed-ba43-dac502259ad0.png,第51张    

实验效果

正常运行时窗口看门狗不会复位,当按下按键后,停止喂狗,导致MCU复位。

复位后,如果检查到是窗口看门狗复位则LED4点亮,否则LED4不亮。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/3000523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存