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

    文章

    616

    浏览量

    73376
  • STM8S
    +关注

    关注

    16

    文章

    149

    浏览量

    32781
  • IWDG
    +关注

    关注

    0

    文章

    23

    浏览量

    5923
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM858xQ汽车窗口看门狗定时器:设计与应用深度解析

    SGM858xQ汽车窗口看门狗定时器:设计与应用深度解析 在汽车电子系统中,可靠的监控和复位机制对于确保微控制器(MCU)的稳定运行至关重要。SG Micro Corp推出的SGM858xQ汽车窗口
    的头像 发表于 03-24 10:55 292次阅读

    SGM819SxQ 汽车应用看门狗定时器电路解析

    SGM819SxQ 这款独立看门狗定时器电路。 文件下载: SGM819SxQ.pdf 一、概述 SGM819SxQ 是一款独立看门狗定时器电路,它就像系统的“守护者”,能有效防范
    的头像 发表于 03-24 10:10 290次阅读

    SGM819S看门狗定时器电路:设计与应用详解

    有效的解决方案。下面我们就来详细了解一下这款产品。 文件下载: SGM819S.PDF 产品概述 SGM819S是一款独立看门狗定时器电路,可防范因硬件(如外设错误、总线占用)或软件
    的头像 发表于 03-24 09:40 260次阅读

    【瑞萨RA × Zephyr评测】多线程和看门狗

    本文章旨在评估使用 Zephyr RTOS 在 Renesas FPB-RA6E2 开发板上实现多线程调度与硬件看门狗功能的应用。评估内容包括任务调度、看门狗初始化流程、主程序逻辑的详细解析,以及实验现象与数据分析。
    的头像 发表于 01-10 10:23 2790次阅读
    【瑞萨RA × Zephyr评测】多线程和<b class='flag-5'>看门狗</b>

    怎样开始去启用独立看门狗呢?

    看门狗的原理是什么呢? 怎样开始去启用独立看门狗呢?
    发表于 01-08 06:33

    什么是ADC模拟看门狗

    模拟看门狗功能,支持将 ADC 转换结果与用户设定的阈值进行比较,支持上阈值、下阈值、区间值比较,通过阈值寄存器 ADC_VTH 和 ADC_VTL 设置比较阈值。 模拟看门狗功能只在单通道模式
    发表于 12-12 06:15

    IWDT窗口看门狗的配置

    :配置 IWDT_ARR,配置看门狗的重载值; 步骤 6:配置 IWDT_WINR,配置窗口大小,注意 IWDT_WINR 必须小于 IWDT_ARR 重载值; 步骤 7:等待 IWDT_SR.ARRF
    发表于 12-10 06:10

    中科芯CKS32F107XX系列MCU的独立看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立看门狗IWDG(Independent Watchdog)和窗口看门狗
    的头像 发表于 11-28 14:51 4119次阅读
    中科芯CKS32F107XX系列MCU的<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>介绍

    中科芯CKS32F107XX系列MCU的窗口看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立看门狗IWDG(Independent Watchdog)和窗口看门狗
    的头像 发表于 11-28 14:48 4439次阅读
    中科芯CKS32F107XX系列MCU的<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>介绍

    “喂狗”的艺术:看门狗不叫,才是系统好

    看门狗选哪只好呢? 中间那只看起来不错。 咳咳搞错了,自动化项目中说的看门狗是PLC的看门狗,那这个有什么用呢?难道真的是看大门的
    的头像 发表于 11-25 10:50 536次阅读
    “喂狗”的艺术:<b class='flag-5'>看门狗</b>不叫,才是系统好

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?
    发表于 11-21 06:42

    看门狗定时器、复位源、异常处理机制科普

    的作用、原理与应用。一、看门狗定时器(WatchdogTimer)1.原理看门狗定时器本质上是一个独立定时器,持续倒计时:软件在规定时间内“喂狗”(重置看门狗计数器
    的头像 发表于 11-17 10:53 1887次阅读
    <b class='flag-5'>看门狗</b>定时器、复位源、异常处理机制科普

    小安派BW21-CBV-Kit入门教程之看门狗简介

    这是一个简单的看门狗定时器(WDT)示例,演示了看门狗 API 的用法。 有关看门狗的定义和工作原理,请参阅以下信息。
    的头像 发表于 11-13 17:22 5293次阅读
    小安派BW21-CBV-Kit入门教程之<b class='flag-5'>看门狗</b>简介

    德州仪器TPS3436-Q1汽车级窗口看门狗定时器技术解析

    Texas Instruments TPS3436-Q1精密窗口看门狗定时器是一款超低功耗(250nA典型值)器件,提供可编程窗口看门狗定时器。TPS3436-Q1可提供具有多种功能的
    的头像 发表于 08-18 14:54 2117次阅读
    德州仪器TPS3436-Q1汽车级<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>定时器技术解析

    第二十四章 WWDG——窗口看门狗

    W55MH32的窗口看门狗是7位递减计数器,有上下窗口值,时钟来自PCLK1用于监测软件故障,代码演示了其配置、中断测试与复位测试。
    的头像 发表于 06-20 14:00 1479次阅读
    第二十四章 WWDG——<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>