06 STM32F4的窗口看门狗(WWDG)

1、综述

  (1)与独立看门狗的区别?
  窗口看门狗(WWDG )其喂狗时间是一个有上下限的范围(窗口),计数器的下限是固定的(0x40),可以通过设定相关寄存器,设定其上限时间(上限计数值)。喂狗的时间不能过早,也不能过晚。你喂得过早或者过晚,都会复位的。


  (2)有了独立看门狗来检测程序运行是否正常,为何还需要窗口看门狗?
  对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是,这有一个隐患:有可能程序跑乱了,但又跑回到正常的地方,或者,跑乱了的程序正好执行了刷新看门狗的操作。这样的情况下,一般的看门狗就检测不出来了。
  如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样,可以检测出程序没有按照正常的路径运行而非正常地跳过了某些程序段的情况。


2、相关寄存器

  (1)控制寄存器 WWDG_CR
  32位寄存器,低8位有效。这8位中,低7位T[6:0]用来存储看门狗的计数器值,随时更新。当该计数器的值从0x40变为0x3F的时候,将产生复位;除了这低7位,还有第8位(位7,叫做WDGA位),是看门狗的激活位。该位由软件置1,用来启动看门狗,并且,一旦启动以后,该位会一直保持为1,在硬件复位以后才能清零。


  (2)配置寄存器 WWDG_CFR
  32位寄存器,我们用到10位。
  <1>低7位W[6:0],是7位窗口值。这7位就是窗口看门狗的上窗口。
  <2>位9(第10位),叫做EWI,是提前唤醒中断位。如果我们把这位设置为1,那么,只要递减计数器的计数值下降到0x40,就会产生一个中断。之所以叫做唤醒中断位,就是因为,当计数器的值减到0x40,如果不产生中断,下一个值就是0x3F,此时就会复位;而这里产生一个中断,那么我们就可以在中断服务函数里面及时地喂狗,来唤醒它,避免复位。
  注意:这里在进入中断后,必须在不大于一个窗口看门狗计数周期的时间内重新写WWDG_CR寄存器去喂狗,否则,将会复位。
  <3>位8和位7(叫做WDGTB[1:0]),叫做定时器时基(Time base),这两位用来修改计数时钟的分频系数。


  (3)状态寄存器 WWDG_SR
  该寄存器用来记录当前是否有提前唤醒的标志。该寄存器只有最低位(位0)一位有效。当计数值达到0x40时,该位由硬件置1.它必须通过软件写0来清除,软件对它写1是无效的。注意:它与是否使能中断没有关系,即使中断没有被使能,在计数器的值达到0x40的时候,该位也会被硬件置1。


3、配置窗口看门狗的步骤

  (1)使能WWDG时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

  WWDG与IWDG不同,独立看门狗有自己独立的32kHz时钟,用的是LSI,而窗口看门狗用的是PCLK1的时钟,挂载在总线APB1上,所以,使用之前,需要先使能。


  (2)设置分频系数与上窗口值
  设置看门狗的分频系数(CFR寄存器,位WDGTB[1:0])的函数是:

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//设置分频系数

  设置看门狗的上窗口值(CFR寄存器,位W[6:0])的函数是:

void WWDG_SetWindowValue(uint8_t WindowValue);//设置上窗口值

  (3)开启提前唤醒中断,并分组
  开启WWDG中断的函数为:

WWDG_EnableIT();//开启窗口看门狗中断

开启WWDG中断后,进行中断优先级配置,调用函数NVIC_Init()即可。


  (4)使能看门狗

void WWDG_Enable(uint8_t Counter);//使能看门狗

  (5)编写中断服务函数
  编写中断服务函数WWDG_IRQHandler(),在里面调用函数WWDG_SetCounter(),去喂狗。但要注意,喂狗要迅速,否则当WWDG计数到0x3F的时候,就会引起复位了。还有一个值得注意的地方就是,在中断服务函数里面,要将状态寄存器的EWIF位清空。


4、实例代码

#include "wwdg.h"
#include "led.h"

u8 WWDG_CNT = 0x7F;

/*
WWDG初始化函数,三个入口参数:
tr:计数器值,T[6:0]
wr:上窗口值,W[6:0]
fprer:分频系数,WDGTB
*/
void WWDG_Init(u8 tr, u8 wr, u32 fprer)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    
    //使能WWDG时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
    
    //设置分频系数
    WWDG_SetPrescaler(fprer);
    
    //设置上窗口值
    WWDG_SetWindowValue(wr);
    
    //开启提前唤醒中断,并分组
    WWDG_EnableIT();
    
    NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
    //使能看门狗
    WWDG_Enable(WWDG_CNT);
    
    //设置计数值,喂狗
    WWDG_SetCounter(WWDG_CNT);
    
}


/*编写中断服务函数*/
void WWDG_IRQHandler(void)
{
    WWDG_SetCounter(WWDG_CNT);//重设窗口看门狗计数值,喂狗
    WWDG_ClearFlag();//清除提前唤醒中断标志位
    LED1 = !LED1;

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容