STM32之看门狗(独立与窗口)
广大的互联网网友们,大家早上中午晚上好,我是某某某、、对于狗、、看过《忠犬八公》的我、无不深深的被狗的义气与灵气所震撼、、我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的、也很形象、但是偷偷说一句:我本人很怕狗、、但是看门狗却很可爱、、在STM32中存在着两条忠犬:独立看门狗和窗口看门狗,其英文简称为:IWDG和WWDG。
IWDG篇:::接下来先看IWDG,对此缩写,我就不解释了、、本人六级也在积极准备中,独立看门口这个“独立”,恕小弟不才,目前只知道其独立的含义是指在整个系统时钟中,IWDG是有30~60KHZ提供,并且挂在ABP桥上,但不使用ABP1桥的时钟(注:请记住这一点,待会讲WWDG时这是非常明显的区别之一)(注意:IWDG我看到是有挂在ABP1上的,但是我还搞不懂为什么还要单独用40KHZ提供,希望有高手见到时能指教指教)。所以对于IWDG来说,时钟是不固定的,但最好不要超过这个范围,因为有可能会引起系统的不稳定,当我翻开“葵花宝典”第STM32篇中文参考手册时,发现了一个重要之处,详情请看图:
看到我美丽的涂鸦没?没错了、、参考手册里是采用40KHZ的晶振频率,但是也要注意:这里的40KHZ也是不固定的、只是我们计算是大概当作以40KHZ来算、借用初高中物理实验题经典的一句台词:在误差允许的范围之内,是可以接受的、、
说到这,可能有些人不明白为什么要用我们人类最忠诚的狗来看门,以保系统正常运行、那小弟在这里就按我个人的见解说一说哈:打个比喻,你有100万放在家里,你养了一条狗,看着门,有天小偷潜入你家里,正好你在不远处听到你家的狗在狂叫,注意不远处,这个距离除于你的速度就是时间、、在这个时间内,如果你赶不上(你已经无能为力了),这时候100万会不会不安全呢?答案是不会的、因为你家的狗很厉害,你还没回来,狗看情势不对,把小偷给“自宫”了,,在这里就相当于小狗监视着整个房子,当发生不测了,就会做出反应、、而这个反应就是我们现在所说的让系统复位、、看来这狗练过“葵花宝典”、、
那我们要怎么来好好的“照顾”我们的忠犬呢??首先、狗必须是活性的雄狗、再者狗需要被保护、、就给狗买个人寿保险吧、、所以看到参考手册有个寄存器
键寄存器(IWDG_KR):要把忠犬激活,所以使用时要在键寄存器(IWDG_KR)写入0xCCCC、、如果你想改造忠犬,让它变得更加凶猛,那你得向键寄存器(IWDG_KR)写入0x5555;
但是你放心,不需要你写、、咱们有库呀、、来看“葵花宝典”第STM32篇之固件库之IWDG:
接下来、狗的厉害程度和反应时间我们也是可以来设置的、、当然、对于搞定小偷你肯定是希望狗越猛越好,反应时间越快越好,但是在我们MCU里却是不好说,得按实际情况来设定,同样请看:
可以看到其形参有如下几个:
#define WWDG_Prescaler_1 ((uint32_t)0x00000000)
#define WWDG_Prescaler_2 ((uint32_t)0x00000080)
#define WWDG_Prescaler_4 ((uint32_t)0x00000100)
#define WWDG_Prescaler_8 ((uint32_t)0x00000180)
啊哈、、还有一个重装载值:
这样我们就可以计算狗的反应时间了:Tout = ((4*2^prer)*rlr)/40 其中prer为预分频值:0~7 rlr为重装载值
如果你以为这样就能使狗帮你看门了、、那你就有点天真了、、狗嘛,要经过后天的多次训练,才能达到看门的目的,在这里我们也一样,我们叫“喂狗”操作、、这种喂狗就是在小偷没来之前要经常训练的、、这样就不会整体误报有小偷了、、也就是防止系统复位,影响正常的生活(系统运行),那如何喂狗呢??拿狗粮??NO、、还是不用你哈、、库为我们做好了一切准备啦,请看:
神奇吧、、哈哈、、接下来、、我们只要不让狗睡觉就行了、、就是要开启看门狗:
好了,我们来总结下,请看代码哈:
void IWDG_Init(void)
{
//1/取消寄存器写保护
//2/设置独立看门狗的预分频器和重装载值
//3/重装载值实现喂狗
//4/开启看门狗 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_4); IWDG_SetReload(); IWDG_ReloadCounter(); IWDG_Enable();
} void IWDG_Feed(void)
{
IWDG_ReloadCounter(); //实现喂狗操作
}
备注:IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
WWDG篇::: 了解了独立看门狗,对于窗口看门狗的一些相似的概念也就差不多理解了、、啊哈、、刚开始叫大家注意的地方在这里用到了:没错了、、你们都是聪明的、、已经猜到了我说什么了:WWDG不具有独立的晶振频率,而是挂在ABP1上的,请看图(注意:我还是不明白我为什么IWDG也挂在这但是不用这里的时钟,而单独使用40KHZ的RC时钟,请恕小弟尚未吃透,望懂的人能指教指教):
在这里,防御更加精确,WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。有两种情况会产生MCU复位:请看工作原理图:
第一:T[6:0]就是窗口看门狗的计数器,而W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0x40),当窗口看门狗的计数器在上窗口值之外被刷新时会产生复位
第二:当窗口看门狗的计数器低于下窗口值时也会产生复位、、
从这个图我们可以看出、、当计数器的值从0x40变到0x3f时,T6位产生下降沿,从而知道系统发生复位、、但是呢、、是不是只有这条路可以走呢??啊哈、、条条大路通罗马嘛、、来请看:
对,在这里,我们是用提前唤醒中断来实现看门狗的监控:所谓的提前唤醒就是:主人、、主人、、你赶紧的呀、、快着火了、、就是在复位发生之前唤醒你紧张的心理,使得系统不被复位,我们采用中断的方式,利用这位来设置中断,当窗口看门狗的计数器值减到0x40的时候,该位就会产生中断请求,所以我们就可以在中断服务函数里进行喂狗操作,记住,速度要快,不能超过一个窗口看门狗计数周期的时间,一提到中断、、大家有想到什么猫腻没??没错了、、就是要配置中断优先级、、这步待会来哈、、不急、、
同样,我们翻开固件库可以看到:(由于篇幅为题,大家可以去看固件库各个函数的参数哈,敬请原谅)
所以我们来总结下步骤:
1、使能WWDG的时钟
2、设置窗口值和预分频系数
3、开启WWDG中断并设置中断优先级
4、设置计数器初始值并使能看门狗
5、编写中断服务程序(函数名请注意哈)
请看我的代码(注意红色字体哈):
u8 COUNT = 0X7F; 1 void WWDG_Init(u8 count,u8 wr,u32 fprer)
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
COUNT = count & COUNT; //初始化计数值
WWDG_SetPrescaler(fprer);
WWDG_SetWindowValue(wr);
WWDG_Enable(COUNT);
WWDG_ClearFlag();
WWDG_NVIC_Init();
WWDG_EnableIT(); //使能中断
}
void WWDG_NVIC_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; // PA0 ÉèÖÃÖжÏÓÅÏȼ¶
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
} void WWDG_IRQHandler(void)
{
WWDG_SetCounter(COUNT);
WWDG_ClearFlag(); //此处请记得清零
LED1 = !LED1;
}
本篇博客从内容安排上较偏重于独立看门狗、因为独立看门狗理解了,我相信窗口看门狗的一些相似的概念也能很快理解的、、还是那句话:请高手赐教,也希望不懂的人能看得懂我写的、、请多多指教、、
STM32之看门狗(独立与窗口)的更多相关文章
- STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- 嵌入式02 STM32 实验09 独立/窗口看门狗
一.独立看门狗和窗口看门狗 看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象导致死循环,或者崩溃,看门狗电路就是为了避免这种情况的发生,看门狗的作用就是在一定的事件内(通过计数器实现)若没有收到喂 ...
- STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)
一 前沿废语: 之前有很风靡的游戏,名字叫<看门狗>.该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden·Pearce(主角)是一名精通黑客技术的高手,当时 ...
- STM32独立看门狗(IWDG)
造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作.看门狗就是一种专门用于检测单片机程序运行状态的硬件结构. STM32内部自带了两个看门狗,独立看门狗(IWD ...
- STM32F0xx_看门狗(独立+窗口)配置详细过程
Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...
- stm8的独立看门狗与窗口看门狗
STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...
- 【转】STM32 独立看门狗简介
STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种 ...
- stm32独立看门狗
转载:http://blog.sina.com.cn/s/blog_7f1dc53b01010mqa.html 实验现象: 开始LED1亮,LED2熄灭,若不隔时间按KEY1则发现LED2因独立看门狗 ...
随机推荐
- 高性能MySQL(一):基本数据类型
更多交流及资料,请加群 :
- 解决eclipse中svn插件总是提示输入密码的问题
一.背景 最近在eclipse中使用svn插件进行远程仓库代码管理时,老是出现提示让输入密码,特别烦人,经过努力,终于解决该问题,拿来和大家分享~ 二.svn插件密码机制以及出现问题的原因分析 当我们 ...
- mysql 有报错 ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
sh-4.1# /etc/init.d/mysqld status ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql ...
- mysql安装一 --- 源码包安装
1.登陆http://www.mysql.com/ 或者 www.oracle.com 2. 3. 4. 上面如果不能加载,禁用代理软件 5. 6. 7. 8. 9.上传 10.md5校验安装包的完整 ...
- ppmoney
build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...
- /usr/bin/ld.bfd.real: cannot find -lGL /usr/bin/ld.bfd.real: cannot find -lX11
/usr/bin/ld.bfd.real: cannot find -lGL /usr/bin/ld.bfd.real: cannot find -lX11 根据网上大多数的说法,以及官网的介绍.截至 ...
- 移动端webapp自适应实践(css雪碧图制作小工具实践)图文并茂
为什么要写这个 以前写过关于webapp自适应屏幕的文章(链接),不过写的大多数群众看不懂,所以来个图文并茂的版本.虽然只是一个简单的页面,不过在做的过程中也遇到了一些问题,也算是好事吧! 该示例gi ...
- TDD学习笔记【五】一隔绝相依性的方式与特性
前言 在上一篇文章中,提到了如何通过 IoC 的设计,以及 Stub Object 的方式,来独立测试目标对象. 这一篇文章,则要说明有哪些设计对象的方式,可以让测试或需求变更时,更容易转换. 并说明 ...
- 第二十二篇:在SOUI中使用代码向窗口中插入子窗口
使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特 ...
- arm工作模式笔记
linux用户态程序即应用程序,在user模式 linux内核运行在svc模式 arm七个模式: usr用户模式 fiq快速中断模式 irq普通中断模式 supervior svc模式 abort ...