STM32 窗口看门狗

发布者:HarmonyJoy最新更新时间:2021-06-22 来源: eefocus关键字:STM32  窗口看门狗  WWDG 手机看文章 扫描二维码
随时随地手机看文章

简介:窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。


库函数中用中断的方式来喂狗的方法,窗口看门狗库函数相关源码和定义分布在文件stm32f10x_wwdg.c 文件和头文件 stm32f10x_wwdg.h 中。步骤如下: 


1)使能 WWDG 时钟 


 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。方法是: 


RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);   // WWDG 时钟使能 


2)设置窗口值和分频数 


设置窗口值的函数是: 


void WWDG_SetWindowValue(uint8_t WindowValue); 


这个函数就一个入口参数为窗口值,很容易理解。 


设置分频数的函数是: 


void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); 


这个函数同样只有一个入口参数就是分频值。 


3)开启 WWDG 中断并分组 


开启 WWDG 中断的函数为: 


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


接下来是进行中断优先级配置,使用 NVIC_Init()函数即可。 


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


这一步在库函数里面是通过一个函数实现的: 


void WWDG_Enable(uint8_t Counter); 


该函数既设置了计数器初始值,同时使能了窗口看门狗。 


5)编写中断服务函数 


在最后,还是要编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。  


完成了以上 5 个步骤之后,我们就可以使用 STM32 的窗口看门狗了。



 

1.static u8 WWDG_CNT=0x7f;     /*保存WWDG计数器的设置值,默认为最大. */


2.


3./**


4. * 初始化窗口看门狗


5. * tr :T[6:0],计数器值


6. * wr :W[6:0],窗口值


7. * fprer:分频系数(WDGTB),仅最低2位有效


8. * Fwwdg=PCLK1/(4096*2^fprer).


9. */


10.void WWDG_Init(u8 tr,u8 wr,u32 fprer)


11.{


12.//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);    /*WWDG时钟使能*/


13.


14.    WWDG_SetPrescaler(fprer); /*设置IWDG预分频值*/


15.    WWDG_SetWindowValue(wr);    /*设置窗口值*/


16.


17.    WWDG_CNT=tr&WWDG_CNT; /* 初始化WWDG_CNT. */


18.    WWDG_Enable(WWDG_CNT);    /*使能看门狗 ,    设置 counter . */


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


20.


21.    WWDG_NVIC_Init();/* 初始化窗口看门狗 NVIC */


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


23.}


24.


25./**


26. * 窗口看门狗中断服务程序


27. */


28.void WWDG_NVIC_Init(void)


29.{


30.    NVIC_InitTypeDef NVIC_InitStructure;


31.    NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    /*WWDG中断*/


32.    /* 抢占2,子优先级3 */


33.    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;


34.    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;


35.    NVIC_Init(&NVIC_InitStructure);/*    NVIC初始化*/


36.}


37.


38./**


39. * 重设置WWDG计数器的值


40. */


41.void WWDG_Set_Counter(u8 cnt)


42.{


43.    WWDG_Enable(cnt); /*使能看门狗 ,    设置 counter .    */


44.}


45.


46./**


47. * 看门狗中断服务程序


48. */


49.void WWDG_IRQHandler(void)


50.{


51.    WWDG_Set_Counter(WWDG_CNT);


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


53.    LED1 = ~LED1;         /*LED状态翻转 */


54.} 

调用:WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);/* 计数器值为 7f,窗口寄存器为 5f,分频数为 8 */


关键字:STM32  窗口看门狗  WWDG 引用地址:STM32 窗口看门狗

上一篇:关于SYSTick的一些问题
下一篇:关于STM32的systick定时器的详细说明

推荐阅读最新更新时间:2024-10-27 13:49

STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG
  stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。   看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。   看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。   具体的实现步骤:开启看门狗,设置减计数的初始值,当计数值达到超时值时,产生MCU复位,此时本来运行的程序终止重新启动单片机(发生了故障)。在使用了看门狗
[单片机]
<font color='red'>STM32</font><font color='red'>看门狗</font>配置(独立<font color='red'>看门狗</font>IWDG和<font color='red'>窗口</font><font color='red'>看门狗</font><font color='red'>WWDG</font>)
stm32 窗口看门狗 WWDG
窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WWDG)的时钟来自PCLK1,即挂接在APB1总线上,APB1时钟最大为36M 窗口值由配置寄存器WWDG_CFR的 位设置,所以最大值0x7F 当递减计数器递减到0x40的时候,还不会马上产生复位,如果使能了提前唤醒中断,则产生提前唤醒中断,提醒喂狗,随后将复位 WWDG配置步骤 1.使能WWDG时钟 2.设置WWDG窗口值 3.设置WWDG预分频因子 4.初始化NVIC外设,设置WWDG中断优先级 5.初始化计数
[单片机]
STM32窗口看门狗WWDG
一、窗口看门狗由从APB1时钟分频后得到时钟驱动。 通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。 二、什么是窗口看门狗? 窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚 三、窗口看门狗的好处 对于一般的看门狗,因为是在复位前的任意时刻刷新看门狗,但有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下就检测不
[单片机]
<font color='red'>STM32</font>的<font color='red'>窗口</font><font color='red'>看门狗</font>(<font color='red'>WWDG</font>)
STM32窗口看门狗概述、寄存器、库函数(WWDG一般步骤)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第18章 窗口看门狗 窗口看门狗概述 窗口看门狗的定义 窗口看门狗之所以称为窗口,就是因为其喂狗时间是一个有上下限的范围内(窗口),可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F)。也就是说:喂狗的时间不能过早,也不能过晚。 而对比与独立看门狗,独立看门狗限制喂狗时间在0-x内,x由相关RLR寄存器决定。 窗口看门狗的必要性: 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了; 如果使用窗口
[单片机]
【<font color='red'>STM32</font>】<font color='red'>窗口</font><font color='red'>看门狗</font>概述、寄存器、库函数(<font color='red'>WWDG</font>一般步骤)
STM32独立看门狗IWDG与窗口看门狗WWDG研究
1.看门狗介绍 看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。使用看门狗保证系统正常地运行是非常有必要的。我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。看门狗分为软件看门狗和硬件看门狗两类,其原理都是使用一个独立定时器来计时,超出时间就会产生复位信号,主要区别看是否具有独立的硬件结构,如果有,就是硬件看门狗,如果是一个普通定时器实现的那么就是软件看门狗。STM32F407片内有两个看门狗:独立看门狗IWDG以及窗口看门狗WWDG,下面来讨论各自的特点和用法。 2.IWDG的特点以及使用 IWDG是一个独立看门狗,具有独立于系统的时钟,与片
[单片机]
STM32窗口看门狗WWDG复位
STM32除了有一个独立看门狗外,还有一个窗口看门狗。窗口看门狗当然也能复位MCU,但是与独立看门狗复位不同。首先,窗口看门狗所需要的时钟源来自PCLK2,它时钟是经过PCLK2的4096分频后得到的,能够提供准确的计数。其次,复位的条件有要求:(1)当减计数器的值小于0x40,则产生复位;(2)当减计数值在窗口外被重新装载,则复位。接着,窗口看门狗的计数值与窗口值都只有7位,所以变化范围在0~127之间。还有,装载值一定要大于0x3F,否则就失去了看门狗的功能。 窗口看门狗,它的 窗口 可以有下图体现出来: 图中W 表示窗口值,当看门狗的减计数器不断递减,只有计数值到达窗口值与0x3F之间的时候 喂狗 ,才不会发生复位,
[单片机]
<font color='red'>STM32</font><font color='red'>窗口</font><font color='red'>看门狗</font><font color='red'>WWDG</font>复位
STM32窗口看门狗(WWDG)
前几天学习STM32的两条狗,先学习了宠物狗(IWDG),和其它MCU差不多,不多说了。学到警犬(WWDG)的时候,问题来了,没有IWDG那么好理解了,看了半天没有搞懂是怎么回事,计数器值、窗口值、在什么时候喂狗、什么时候产生中断等等,一头雾水。 经过两天的推敲,个人理解如下: 1、有个7位递减计数器(WWDG- CR),就这个计数器和窗口计数器(WWDG- CFR)决定什么时候喂狗。 狗喂早了,复位 早 体现在计数器值(tr) 窗口值(wr),也就是计数器值还没有减到窗口值以下; 2、当 0x40 计数器值(tr) 窗口值(wr) 时,这时候最适合喂狗了,也只有在这时候喂狗才合适; 3、当计数器的值从0x4
[单片机]
stm32 窗口看门狗 wwdg与独立看门狗iwdg的配置运用
STM32笔记之十二:时钟不息工作不止,systic时钟应用 a) 目的:使用系统时钟来进行两项实验 周期执行代码与精确定时延迟。 b) 初始化函数定义: void SysTick_Configuration(void); c) 初始化函数调用: SysTick_Configuration(); d) 初始化函数: void SysTick_Configuration(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟除8 SysTick_SetReload(250000);
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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