独立看门狗 IWDG 和 窗口看门狗 WWDG

发布者:ShiningSmile最新更新时间:2022-07-05 来源: csdn关键字:IWDG  窗口看门狗  WWDG 手机看文章 扫描二维码
随时随地手机看文章

STM32 内部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。

看门狗的最作用


在启动正常运行的时候,系统不能复位。在系统跑飞(程序异常执行)的情况,系统复位程序重新执行


独立看门狗

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效


IWDG 寄存器与功能原理

键值寄存器 IWDG_KR

重装载寄存器 IWDG_RLR,0~11位有效。具有写保护功能,要操作先取消写保护。

预分频寄存器 IWDG_PR ,0~2位有效。具有写保护功能,要操作先取消写保护

状态寄存器 IWDG_SR,1位有效


独立看门狗功能描述

在键值寄存器(IWDG_KR)中写入 0xCCCC ,开始启用独立看门狗。此时计数器开始从其复位值OXFFF递减,当计数器值计数到尾值Ox000时会产生一个复位信号(IWDG_RESET)。 在键值寄存器IWDG KR中写入OxAAAA(通常说的喂狗),自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。 如果程序异常,就无法正常喂狗,从而系统复位。

IWDG 操作步骤

第一步:取消寄存器写保护,IWDG_WriteAccessCmd()

第二步:设置独立看门狗的预分频系数和重装载值

第三步:重载计数值喂狗 IWDG_ReloadCounter();

第四步: 启动看门狗

第五步: 创建喂独立看门狗的函数接口,void IWDG_Feed(void)


取消寄存器写保护,向 IWDG_KR 写入 0X5555

取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器,


IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);


设置预分频系数和重装载值

溢出时间计算公式

Tout=((4×2^prer) ×rlr) /40


其中 Tout 为看门狗溢出时间(单位为 ms),prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7,rlr为看门狗的重装载值(IWDG_RLR 的值)

比如我们设定 prer 值为 4,rlr 值为 625,那么就可以得到Tout=64×625/40=1000ms,这样, 看门狗的溢出时间就是 1s。


IWDG_SetPrescaler(prer);  //设置IWDG预分频值


IWDG_SetReload(rlr);  //设置IWDG重装载值


重载计数值喂狗,向 IWDG_KR 写入 0XAAAA

IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器


启动看门狗,向 IWDG_KR 写入 0XCCCC

注意 IWDG 在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开 IWDG

IWDG_Enable(); //使能 IWDG


创建喂独立看门狗的函数接口

void IWDG_Feed(void)

{   

  IWDG_ReloadCounter();//reload    

}


窗口看门狗(WWDG)

和独立看门狗相比,窗口开门狗是有一个上下限,(W[6:0]是窗口看门狗的上窗口,下窗口值是固定的(0X40))。当在这个上下限以外喂狗,则都会复位,增加了安全性。


WWDG 寄存器与功能原理

控制寄存器(WWDG_CR)

T[6:0]用来存储看门狗的计数器值,每次减 1。当该计数器的值从 0X40 变为 0X3F 的时候,将产生看门狗复位。

T[7] WDGA位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。


配置寄存器(WWDG_CFR)

位 9 是 EWI 是提前唤醒中断,是指在即将复位的前一次计数(T[6:0] = 0X40)会产生中断,此中断需要提前允许中断开启


状态寄存器(WWDG_SR)

该寄存器用来记录当前是否有提前唤醒的标志。 当计数器达到0x40h时,此位置由硬件置1,必须通过软件置0,对此写 1 无效,若此时中断未开启,也会被置 1


WWDG 操作步骤

第一步:WWDG时钟使能RCC_APB1PeriphClockCmd

第二步:设置窗口值和分频数

第三步:使能看门狗WWDG_Enable(tr); 像当与第一次喂狗

第四步:清除中断标志位WWDG_ClearFlag();

第五步:设置NVIC分组开启 WWDG 中断WWDG_EnableIT(); NVIC_Init()

第六步:编写中断服务函数,void WWDG_IRQHandler(void)


WWDG时钟使能

WWDG 不同于 IWDG, IWDG 有自己独立的 40Khz 时钟,不存在使能问题。而 WWDG 使用的是 PCLK1 的时钟,需要先使能时钟。


RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); 


设置窗口值和分频数

窗口看门狗的超时公式如下:


Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1


Twwdg: WWDG 超时时间(单位为 ms)

Fpclk1: APB1 的时钟频率(单位为 Khz)

WDGTB: WWDG的预分频系数

T[5:0]:上窗口到翻转的时间


WWDG_SetWindowValue(wr); //设置窗口上限值


WWDG_SetPrescaler(fprer); //设置IWDG预分频值  WWDG_Prescaler_8


WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);


操作的配置寄存器(WWDG_CFR) 位8:7


使能看门狗

WWDG_Enable(tr);


清除中断标志位

WWDG_ClearFlag();


中断分组并开启 WWDG 中断

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2

    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 

NVIC_Init(&NVIC_InitStructure);//NVIC初始化


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


设置计数器初始值并使能看门狗

void WWDG_Enable(uint8_t Counter);


编写中断服务函数

void WWDG_IRQHandler(void)

{

WWDG_SetCounter(0x7F);   //当禁掉此句后,窗口看门狗将产生复位

WWDG_ClearFlag();   //清除提前唤醒中断标志位

LED1=!LED1;

}

关键字:IWDG  窗口看门狗  WWDG 引用地址:独立看门狗 IWDG 和 窗口看门狗 WWDG

上一篇:定时器做PWM脉冲
下一篇:时钟资源总结

推荐阅读最新更新时间:2024-11-06 10:30

stm32的窗口看门狗的一点发现
今天看stm32的窗口看门狗,突然发现很不正常,于是做了各方面的实验得出以下结论,由于只是实验了得出的结论没有官方结论,所以如果有人有理论依据请告知我,非常感谢1 1.一旦使能窗口看门狗的时钟,SR寄存器的EWIF位就会被置1 2.一旦在定义的窗口范围外喂狗就会复位 3.在没有使能窗口看门狗定时器的情况下(即CR寄存器的WDGA寄存器置1来使能看门狗),SR不能被软件清0 结论:所以必须把窗口看门狗的清0,使能中断放在初始化的最后2句才能正常运行!
[单片机]
什么是模拟看门狗?模拟看门狗有什么用处?
看门狗大家应该再熟悉不过了,一旦忘记喂狗就会导致单片机复位,而在大部分stm32中都存在两种类型的看门狗,Independent watchdog (IWDG)独立看门狗和Window watchdog (WWDG)窗口看门狗。 独立看门狗也就是常规的一种看门狗,需要定时reload计数值进入downcounter下降计数器中,否则当下降计数到0便会产生IWDG_reset信号,导致芯片复位。 通过下方原理框图可知,其有独立LSI时钟驱动,不会受到主时钟的影响,相对比较独立。 窗口看门狗与独立看门狗有所不同,该看门狗必须在所设置的窗口重载下降计数器才不会导致RESET,过早或者过晚都会导致复位。 然而有时候系统异常
[单片机]
什么是模拟<font color='red'>看门狗</font>?模拟<font color='red'>看门狗</font>有什么用处?
STM8关于IWDG看门狗和HSI高速时钟和复位的坑
前言:我的第一篇博客,快被逼疯了。用的STM8S003F3,耗时5天,问题已解决,结局很坑! 但因为这一个问题,我似乎将stm8的时钟,复位,看门狗,iar的使用几乎全吃透了。 忠告:不要随随便便相信百度里头随便找来的资料! 现象:主频只在16MHz时,程序频繁复位不可控,其他现象异常离奇不阐述了,防止伤脑。 正文:前因后果是这样的: 1,我配置了16M的主频 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部高速时钟,不分频 或者:CLK- CKDIVR = 0x00; //HSIDIV = 0 CPUDIV = 0 cpu时钟 = 16Mhz 发现它频繁
[单片机]
STM8关于<font color='red'>IWDG</font><font color='red'>看门狗</font>和HSI高速时钟和复位的坑
STM32中的独立看门狗窗口看门狗
一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立看门狗和窗口看门狗。 独立看门狗:使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示程序是正常的,这点和窗口看门狗是有区别的。另外独立看门狗是独立于整个系统之外的,这也是独立看门狗名字的由来,他有自己独立的时钟,不受整个系统的影响,所以独立看门狗主要用来监控硬件上的错误。 窗口看门狗:使用芯片内部时钟。喂狗的时间既有上限又有下限,即喂狗太早或者太晚都不行,比如我要求你在0.8s到0.9s内完成
[单片机]
[HAL库学习之路]5.IWDG-独立看门狗
记录自己的STM32的HAL库的学习之路,不定期更新… 一、Pinout 二、Clock Configuration 三、Configuration 配置GPIO 配置IWDG 四、Generate Code 代码 主函数首先点亮两个LED 1S后熄灭,在主循环里检测按键输入进行喂狗,如果在4s内进行喂狗,则1个LED闪烁,否则程序复位。 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration---------------------------------------
[单片机]
[HAL库学习之路]5.<font color='red'>IWDG</font>-<font color='red'>独立</font><font color='red'>看门狗</font>
STM32窗口看门狗程序
窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG- CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置 寄存器 (WWDG- CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。 图 3.6.1.1中,T 就是WWDG_CR的低七位,W 即是WWDG- CFR的低七位。T 就是窗口看门狗的计数器,而W 则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门
[单片机]
STM32<font color='red'>窗口</font><font color='red'>看门狗</font>程序
STM32—IWDG独立看门狗的使用
STM32---IWDG独立看门狗的使用 独立看门狗(IWDG)由专用的40kHz的低速时钟驱动, 即使主时钟发生故障它也仍然有效。 窗口看门狗由从APB1时钟分频后得到的时钟驱动, 通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外, 能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。 IWDG主要性能 ●自由运行的递减计数器 ●时钟由独立的RC振荡器提供(可在停止和待机模式下工作) ●看门狗被激活后,则在计数器计数至0x000时产生复位 在键寄存器(IWDG_KR)中写入0xCC
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved