切换到宽版
  • 2947阅读
  • 3回复

[STM]STM8学习之——WWDG窗口看门狗 [复制链接]

上一主题 下一主题
离线zeze10000
 

发帖
2858
M币
8559
专家
35
粉丝
112
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-07-15
今天来学习STM8的窗口看门狗。
窗口看门狗主要用来检测单片机运行有没有出错。
可能是程序逻辑错误、外部电路干扰等。
与独立看门狗不一样的是窗口看门狗的时钟来源是CPU时钟的分频,且分频无法调整。
还有一个区别是喂狗时机,也就是喂狗的时间窗口。喂狗早了和晚了都不行,都会产生复位。
其它的区别还有停机模式,启用停机复位时,一旦单片机停机就会进行复位,不会进入停机模式。
活跃停机模式除外。
在停机模式时,窗口看门狗也会停止,与独立看门狗不同。
可能停机时CPU时钟有可能也关闭了。
当单片机唤醒时看门狗会继续向下计数,为防止单片机唤醒后无法及时喂狗,在进入停机模式前应先进行喂狗。
这里有意思的地方在于喂狗早了也会复位,如果进入停机时没到喂狗窗口期就不好处理了。

先来看看结构

这个图很好的说明了产生复位的条件。
从复位信号往回退,先是一个与门,需要有WDGA和或门的输出。
再看或门一个来自T6位取反,一个来自另一个与门。
在看接下来的与门,一个条件是写WWDG_CR,另一个条件是T[6:0]>W[6:0]
其实实现的功能就是窗口期外修改WWDG_CR就会输出1.
总的来说,就是产生复位的条件是:1、WDGA置位
2、窗口期外喂狗或超时不喂狗(超时时T6被清零)
人工置位T6再清零也会产生复位。

使用步骤


喂狗周期计算


窗口


先看看不喂狗的情况,计数器最大,2M CPU时钟


t=(1288*(63+1))/2000=393ms
基本满足

窗口期最大时任何时候都能喂狗,就不展示了

下面是窗口期外喂狗

当T>W时喂狗,也就是提前喂狗
喂狗不当造成频繁复位

下面贴上测试程序代码
  1. #include<iostm8s105k4.h>
  2. void init()
  3. {
  4.   WWDG_CR=0xff; //使能、初值
  5.   WWDG_WR=0x70; //窗口值
  6. }
  7. int main( void )
  8. {
  9.   init();
  10.   while(1)
  11.   {
  12.     WWDG_CR=0xff;       //喂狗
  13.   }
  14. }

THE END!

本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共3条打赏M币+30
jsycwnw M币 +13 謝謝分享 2018-07-16
2545889167 M币 +9 还没怎么用过窗口看门狗 2018-07-15
66ok66 M币 +8 原創內容,欢迎继续教学.... 2018-07-15
离线ww5223017240

发帖
5346
M币
3032
专家
9
粉丝
110
只看该作者 1楼 发表于: 2018-07-15
请登录后查看
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 2楼 发表于: 2018-07-15
请登录后查看
离线yzx0201

发帖
1562
M币
3685
专家
2
粉丝
24
只看该作者 3楼 发表于: 2018-07-16
请登录后查看
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个