0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈STM8S_008_WDG独立看门狗和窗口看门狗

黄工的嵌入式威廉希尔官方网站 圈 来源:黄工的嵌入式威廉希尔官方网站 圈 2020-03-20 09:39 次阅读

Ⅰ写在前面

STM8S看门狗WDG分为两类:

IWDG:Independent WatchDog独立看门狗

WWDG:Window WatchDog窗口看门狗

独立看门狗模块可以用于解决处理器因为硬件或软件的故障所发生的错误。它由一个内部的128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。

窗口看门狗用于监测由于外部干扰或不可预知的逻辑条件所产生的软件错误,这样的软件错误通常会导致应用程序不按照预期的方式运行。

大概意思主要是:IWDG主要防止硬件问题引起的复位,WWDG主要防止软件问题引起的复位.

为方便大家阅读,本文内容已经整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

Ⅱ看门狗知识

1.看门狗结构图

STM8S的独立看门狗IWDG比窗口看门狗WWDG结构看起来要简单一点,其实寄存器都只有那么两个,软件配置起来也比较简单。不管是独立还是窗口看门狗,自己看结构图基本就能理解到它们。具体请看下面结构图进行对比。

独立看门狗IWDG结构图:

当向下计数器“8-bit down-counter”等于0时,就会产生看门狗复位“WDG reset”。因此,就需要在计数器等于0之前通过重载寄存器“IWDG_RLR”更新计数器的值。

窗口看门狗WWDG结构图:

窗口看门狗有两地方会引起复位:

1.当7位(T[6:0])递减计数器从0x40翻转到0x3F(T6位清零)时。这种和上面IWDG类似,递减到“0”就会复位。

2.当更新的计数值大于窗口值(T6:0 > W6:0)时。

这两种复位的情况如下图:

2.IWDG独立看门狗功能

当在键寄存器(IWDG_KR)中写入数值0xCC后,独立看门狗就被启动了,计数器开始从它的复位值0xFF开始递减计数,当计数减到0x00时就会产生一个复位信号(WDG RESET)。

如果在IWDG_HW选择字节中使能了硬件看门狗的功能,在芯片上电时看门狗的功能被自动开启,如果软件不能及时操作键寄存器,则在计数器达到0x00时产生复位。

看门狗复位的超时值是由你的配置(分频值和计数值)决定的,大概如下(默认LSI = 128 kHz 会随温度变化有所偏差):

3.WWDG独立看门狗功能

● 可编程的自由运行递减计数器

● 有条件的复位

─ 如果开启了看门狗,当递减计数器的数值小于 0x40 时产生复位

─ 如果开启了看门狗,当在指定的时间窗口之外重加载递减计数器的数值时产生复位

● 硬件或软件启动看门狗(由选择字节指定)

● 可在HALT指令时产生复位(由选择字节配置)

● 开启看门狗:

如果(通过选择字节)选择了软件看门狗,在系统复位后看门狗处于关闭状态。设置WDGCR寄存器中的WDGA位将开启看门狗,随后在下次复位之前将不能关闭看门狗。

如果(通过选择字节)选择了硬件看门狗,看门狗将始终开启,而WDGA位将不起作用。

● 控制递减计数器:

递减计数器是自由运行计数器:即使未开启看门狗,它依然不断地递减计数。当开启看门狗时,必须设置T6位以避免立刻产生复位。

T[5:0]位中包含了看门狗产生复位前允许的时间延迟;因为写入WDGCR寄存器时,预分频器的状态是不可知的,所以这个时间延迟介于一个最小和最大数值之间。

窗口寄存器(WDGWR)的数值是指定窗口的高限:为防止复位,必须在递减计数器的数值小于窗口寄存器的数值并大于0x3F时刷新递减计数器。

提示: T6位可以用于产生一个软件复位(即设置WDGA位同时清除T6位

● 在停止时产生看门狗复位

如果开启了看门狗,并且选择了停止时产生看门狗复位的选项,则执行HALT指令将产生复位。

Ⅲ软件工程源代码

1、关于工程

本文提供两个版本的工程代码:

STM8S-A08_IWDG独立看门狗

STM8S-A08_WWDG窗口看门狗

本文提供的工程代码是基于前面软件工程“STM8S-A04_UART基本收发数据”增加WDG看门狗修改而来。初学的朋友可以参看我前面对应的基础文章,那些文章讲的比较详细。

2.IWDG独立看门狗代码分析

A.IWDG_Initializes初始化

voidIWDG_Initializes(void)

{

IWDG_Enable();

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(IWDG_Prescaler_256);

IWDG_SetReload(250);

IWDG_ReloadCounter();

}

预分频值为IWDG_Prescaler_256,参数为枚举类型:

typedef enum

{

IWDG_Prescaler_4 = (uint8_t)0x00,

IWDG_Prescaler_8 = (uint8_t)0x01,

IWDG_Prescaler_16 = (uint8_t)0x02,

IWDG_Prescaler_32 = (uint8_t)0x03,

IWDG_Prescaler_64 = (uint8_t)0x04,

IWDG_Prescaler_128 = (uint8_t)0x05,

IWDG_Prescaler_256 = (uint8_t)0x06

} IWDG_Prescaler_TypeDef;

重装计数值为8位寄存器,最大255,我们设置为250.

我在初始化看门狗时,将复位超时值设置为1000ms,具体计算为如下:

128K/2 = 64K (输入时钟)

64K / 256 = 250(分频后时钟)

250 / 250 = 1 (重载值为250)

B.功能测试代码

voidmain(void)

{

System_Initializes();

UART1_Printf((uint8_t*)"Start...");

while(1)

{

LED_REVERSE;

TIMDelay_Nms(990);

IWDG_ReloadCounter();

}

}

第一:如果复位,会打印“Start...";

第二:我们配置复位超时值为1000ms,理论小于1000ms内喂狗都不会复位,由于LSI有偏差,我们设定在990ms喂狗一次。

第三:修改延时值为1010,则会发现系统复位(打印“Start...")。

3.WWDG窗口看门狗代码分析

A.WWDG_Initializes初始化

#define WWDG_WINDOW_VALUE 0x7F //窗口值

#define WWDG_COUNTER_INIT 0x7F //计数值

voidWWDG_Initializes(void)

{

WWDG_Init(WWDG_COUNTER_INIT, WWDG_WINDOW_VALUE);

}

为了方便测试,我们这里将窗口值和计数值定义为宏,范围:0x40 - 0x7F.

B.功能测试代码

voidmain(void)

{

System_Initializes();

UART1_Printf((uint8_t*)"Start...");

WWDG_Initializes();

while(1)

{

LED_REVERSE;

TIMDelay_Nms(49);

WWDG_SetCounter(WWDG_COUNTER_INIT);

}

}

第一:同理,如果复位,会打印“Start...";

第二:我们配置复位超时值为49.152ms,如果这个延时大于49(设定为50及以上),就会复位(打印“Start...")。

第三:如果我们修改延时值(假如为TIMDelay_Nms(10);),修改窗口值为#define WWDG_WINDOW_VALUE 0x4F。则不在喂狗窗口范围内,会发现系统复位(打印“Start...")。

提醒大家:多测试验证才能更容易理解和记住功能的要点。

下载

STM8S资料

http://pan.baidu.com/s/1o7Tb9Yq

软件源代码工程两版本(STM8S-A08_xWDGxx看门狗):

http://pan.baidu.com/s/1c2EcRo0

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 看门狗
    +关注

    关注

    10

    文章

    559

    浏览量

    70787
  • STM8S
    +关注

    关注

    16

    文章

    149

    浏览量

    31401
  • IWDG
    +关注

    关注

    0

    文章

    21

    浏览量

    5206
收藏 人收藏

    评论

    相关推荐

    请问如何关闭独立看门狗

    ic是cs32l015. 使用HAL_FWDT_STOP(&h_FWDT);加__HAL_RCC_FWDT_CLK_DISABLE();无法使看门狗停止工作,会一直在深度休眠时唤醒IC。请问怎么关闭看门狗
    发表于 11-26 18:03

    看门狗定时器的工作原理

    看门狗定时器是一种独立的计时器硬件模块,其核心功能是倒计时。如果系统软件在计时器超时前没有对其进行复位操作(即“喂狗”),看门狗将触发一个预定义的动作,通常是系统复位或中断。
    的头像 发表于 10-21 14:18 359次阅读
    <b class='flag-5'>看门狗</b>定时器的工作原理

    Sitara AM6442 RTI看门狗调试

    电子发烧友网站提供《Sitara AM6442 RTI看门狗调试.pdf》资料免费下载
    发表于 08-27 11:26 0次下载
    Sitara AM6442 RTI<b class='flag-5'>看门狗</b>调试

    STM8S103K3看门狗死机的原因?

    最近在用STM8S103K3芯片,写了个程序,发现开启看门狗之后,进行仿真调式时,程序就死机了 下面是我的看门狗配置程序 //须先启动看门狗,然后才能配置
    发表于 05-14 07:00

    【GD32F470紫藤派开发板使用手册】第七讲 FWDG-看门狗实验

    通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能
    的头像 发表于 05-11 10:13 1082次阅读
    【GD32F470紫藤派开发板使用手册】第七讲 FWDG-<b class='flag-5'>看门狗</b>实验

    【GD32H757Z海棠派开发板使用手册】第七讲 FWDG-看门狗实验

    通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能
    的头像 发表于 05-10 09:37 736次阅读
    【GD32H757Z海棠派开发板使用手册】第七讲 FWDG-<b class='flag-5'>看门狗</b>实验

    软件看门狗和硬件看门狗的区别

    系统出现了故障或死锁,软件看门狗会自动重启系统或执行其他预定义的操作。软件看门狗通常用于嵌入式系统中,可以方便地进行编程和控制。硬件看门狗则是一种独立的硬件设备,它与计算机主板上的芯片
    的头像 发表于 04-16 15:10 1054次阅读

    窗口看门狗的系列处理器监控电路TPS3813xxx数据表

    电子发烧友网站提供《带窗口看门狗的系列处理器监控电路TPS3813xxx数据表.pdf》资料免费下载
    发表于 04-07 10:29 0次下载
    带<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>的系列处理器监控电路TPS3813xxx数据表

    TLF35584中集成的看门狗工作应用案例

    看门狗输入引脚 WDI 具有集成的下拉电流 IWDI 。看门狗输入 WDI 可以在“Closed Window”内或随后的“Open Window”期间转换为高电平。
    发表于 03-18 11:27 3801次阅读
    TLF35584中集成的<b class='flag-5'>看门狗</b>工作应用案例

    具有窗口看门狗的汽车处理器监控电路TPS3813-Q1数据表

    电子发烧友网站提供《具有窗口看门狗的汽车处理器监控电路TPS3813-Q1数据表.pdf》资料免费下载
    发表于 03-14 10:10 0次下载
    具有<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>的汽车处理器监控电路TPS3813-Q1数据表

    具有可编程复位延迟功能的 TPS3430 窗口看门狗计时器数据表

    电子发烧友网站提供《具有可编程复位延迟功能的 TPS3430 窗口看门狗计时器数据表.pdf》资料免费下载
    发表于 03-13 14:42 2次下载
    具有可编程复位延迟功能的 TPS3430 <b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>计时器数据表

    调试模式下如何调试看门狗

    大家在调试GD32 MCU系统的时候,若开了看门狗外设,是否会碰到进入调试模式看门狗就会咬造成无法调试的问题?
    的头像 发表于 02-23 09:30 1243次阅读
    调试模式下如何调试<b class='flag-5'>看门狗</b>?

    求助,关于看门狗定时器的喂狗时间和多APP看门狗的问题求解

    参考例程,在看门狗定时器时间的配置上,我看到如下函数: /* Step 3- Write match value */ #if(WDT_DEMO == WDT_INTERRUPT_DEMO
    发表于 02-21 06:50

    ADUC7024的看门狗能不能在看门狗定时没有到之前,将看门狗给关了啊?

    ADUC7024的看门狗能不能在看门狗定时没有到之前(即没有复位之前),将看门狗给关了啊?
    发表于 01-15 08:17

    芯知识 | 语音芯片中的声音播放提示IC内置看门狗的作用介绍

    随着科技的不断发展,语音芯片在各个领域的应用越来越广泛。其中,声音播放提示IC作为语音芯片的重要组成部分,其功能和性能的提升对于产品的用户体验和稳定性至关重要。而在声音播放提示IC中,内置看门狗
    的头像 发表于 12-20 08:40 538次阅读
    芯知识 | 语音芯片中的声音播放提示IC内置<b class='flag-5'>看门狗</b>的作用介绍