看看窗口看门狗的框图
从图里看出产生复位信号有2个方式:
1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号;
2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号;
解释:
WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了。硬件看门狗在OPTION BYTES里设置。
WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的。这个分频值固定是12288,根据这个可以计算看门狗的延时时间。
WDGWR是窗口寄存器,最高位保留,低六位保存的是窗口值,从图里的逻辑图发现comparator=1 when T6:0>W6:0,意思是当WDGCR计数值大于WDGCR
且此时Write WDGCR(这个意思是软件刷新计数器的值)就会产生一个复位信号复位stm8s。当然我们不想这个事情发送。所以在写程序的时候不能在计时器的值
大于窗口寄存器设定值的时候刷新计数器的值。所以在设定这个窗口寄存器数值的时候只能设定在0x7f~0xC0之间。
程序:
知道窗口电子狗怎么工作那么编程就好说了,三件事:
1 设定窗口寄存器值,开启看门狗(WDGA=1),这是初始化看门狗
2 判断看门狗计数值是否小于窗口值,是就喂狗
代码如下:
用stm8s的官方库。
WWDG_Init(0x7f, 0x50); //初始化
CounterValue = (u8)WWDG->CR & 0x7F;
if(CounterValue < WINDOW){
WWDG_SetCounter(COUNTERINIT); //喂狗
}
解释一下WWDG_Init这个函数体的内容是:
void WWDG_Init(uint8_t Counter, uint8_t WindowValue)
{
/* Check the parameters */
assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));
WWDG->WR = WWDG_WR_RESET_VALUE;
WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter);
WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));
}
WWDG_SetCounter的源码是:
void WWDG_SetCounter(uint8_t Counter)
{
/* Check the parameters */
assert_param(IS_WWDG_COUNTERVALUE_OK(Counter));
/* Write to T[6:0] bits to configure the counter value, no need to do
a read-modify-write; writing a 0 to WDGA bit does nothing */
WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK);
}
assert_param是参数检查,其他没啥好说的。搞清楚寄存器作用就行了。其他问题暂时想不起来。哦,对了延时时间看下图:
这里说得比较清楚如果stm8用的是内部HSI 16M晶振切fCPU的分频也是0那么窗口看门狗的时钟频率就是fCPU/12288,那么一个计时周期就是12288/fCPU就是0.768ms
如果设定的窗口值是0x50,那么从0x7F数下来一算就知道了。0.768*(0x7f-0x50)。要注意这里fCPU不一定是16m(CPUDIV分频系数可以改变),如果要搞清楚stm8的时钟频率看下面这个图。这里就不做详细讨论了,以后在说。
STM8s窗口看门狗的更多相关文章
-
stm8的独立看门狗与窗口看门狗
STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...
-
STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
-
STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
-
STM32(10)——窗口看门狗
简介: 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障.除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 ...
-
stm32 窗口看门狗学习(二)
窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...
-
stm32 窗口看门狗学习(一)
什么是窗口看门狗? 1)独立看门狗 限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗 之所以称为窗口就是因为其 ...
-
第35章 	WWDG—窗口看门狗—零死角玩转STM32-F429系列
第35章 WWDG—窗口看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
-
STM32F407 窗口看门狗 个人笔记
窗口看门狗的喂狗时间范围 由框图知: 复位条件是:当且仅当 { 启动位启动 且 { T6为0 (计数器的值减小到0X03F即下限,还没喂狗,即喂狗太晚) 或 计数器的值高于上限时喂狗,即喂狗太早 } ...
-
STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料: ...
随机推荐
-
jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下: 方式1: //注意:下面的代码是放在和iframe同一个页面中调用 $("#i ...
-
LeetCode---Stack &;&; Heap
402. Remove K Digits 思路:一次判断字符若比栈顶字符大则入栈,若小则pop,同时k--,直到k为0,注意最终k没有减为0或者中途栈为空或者最终结果前面带0的情况 public St ...
-
Intellij IDEA的Hibernate简单应用
1.创建数据库及其表 create database demo; use demo; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL ...
-
HDU 5512 Pagodas (2015沈阳现场赛,找规律+gcd)
Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
-
.Net规则引擎Biztalk,Workflow和CKRule的比较
微软的规则引擎 很多朋友会问,.Net平台有没有规则引擎?像Java就有很多的规则引擎,Drools,ILog都做得非常好,但.Net好像还没有哦.很多知道规则引擎,但不知道.Net的朋友都烦这个 ...
-
shell变量$(CURDIR),$0,$1,$2,$#含义解释
$(CURDIR): CURDIR是make的内嵌变量, 为当前目录 实例 SRCTREE := $(CURDIR) *$(CURDIR)为当前目录,相当于SRCTREE=./ MKCONFIG ...
-
devstack安装openstack newton版本
准备使用devstack安装openstack N版,搞一套开发环境出来.一连整了4天,遇到各种问题,各种错误,一直到第4天下午4点多才算完成. 在这个过程中感觉到使用devstack搭建openst ...
-
通过!important设置css样式优先级
CSS写在不同的地方有不同的优先级,一般 .css文件中的定义 < 元素style中的属性,但是如果使用!important,则会变得不一样,使用!important的css定义是拥有最高的优先 ...
- Spark思维导图之Shuffle
-
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
有两张表, 一张为爱好表b表 一张为用户表 u表 u表 id 名称 爱好Id 1 张三 1,2,3,4 2 李四 2,5 b表 id 名称 1 打乒乓 2 ...