STM32窗口看门狗(警犬)

发布者:WhisperingGlow最新更新时间:2022-02-13 来源: eefocus关键字:STM32  窗口看门狗 手机看文章 扫描二维码
随时随地手机看文章

二、窗口看门狗

独立看门狗主要用来监测硬件,窗口看门狗主用来监测软件。


窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件(程序)造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。如果在递减计数器达到窗口寄存器值之前刷新控制寄存器中的7位递减计数器值,也会产生MCU复位。这意味着必须在限定的时间窗口内刷新计数器(即喂狗)。


窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。


1、主要特性

窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位, 这个值叫窗口的下限, 是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。


窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义,如果在窗口之外,那么会导致CPU复位。

在这里插入图片描述

2、功能说明

如果激活看门狗(WWDG_CR 寄存器中的 WDGA 位置 1),则当 7 位递减计数器(T[6:0]位)从 0x40 滚动到 0x3F(T6 已清零)时会引发复位。当计数器值大于窗口寄存器中所存储的值时,如果软件重载计数器,则会产生复位。


3、库函数接口


a.设置窗口看门狗分频值


@brief Sets the WWDG Prescaler.

@param WWDG_Prescaler: specifies the WWDG Prescaler.

This parameter can be one of the following values:

@arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1

@arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2

@arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4

@arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8

@retval None

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler)


b.设置窗口看门狗窗口值


@brief Sets the WWDG window value.

@param WindowValue: specifies the window value to be compared to the downcounter.

This parameter value must be lower than 0x80.

@retval None

void WWDG_SetWindowValue(uint8_t WindowValue)


c.窗口看门狗使能


@brief Enables WWDG and load the counter value.

@param Counter: specifies the watchdog counter value.

This parameter must be a number between 0x40 and 0x7F (to prevent generating

an immediate reset)

void WWDG_Enable(uint8_t Counter)


d.窗口看门清除中断标志位


@brief Clears Early Wakeup interrupt flag.

void WWDG_ClearFlag(void)


e.窗口看门狗中断使能


@brief Enables the WWDG Early Wakeup interrupt(EWI).

@note Once enabled this interrupt cannot be disabled except by a system reset.

void WWDG_EnableIT(void)


喂狗的时候,最好是在计数值减到ox40的时候,就触发中断喂狗


#练习

编写窗口看门狗程序,led的程序可以看上篇独立看门狗的文章,


#include "stm32f4xx.h"

#include "./led/bsp_led.h"

#include "stdio.h"


static void Delay(__IO u32 nCount); 

static GPIO_InitTypeDef  GPIO_InitStructure;

static USART_InitTypeDef USART_InitStructure;

static NVIC_InitTypeDef NVIC_InitStructure;


void iwdg_config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

//窗口看门狗NVIC配置

NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;//窗口看门狗中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

//使能窗口看门狗时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);


//设置看门狗的时钟,45MHZ/4096/8=1373HZ

WWDG_SetPrescaler(IWDG_Prescaler_8);


//设置窗口上限值,最大是0x80

WWDG_SetWindowValue(80);


/* 设置看门狗的最大计数值*/

WWDG_Enable(127);


//清空提前唤醒中断标志位

WWDG_ClearFlag();


//使能提前唤醒中断

WWDG_EnableIT();

  /* 检查是否复位 */

   if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET)

   {

    /* IWDGRST flag set */

LED_RED;//复位亮红灯

    /* Clear reset flags */

     RCC_ClearFlag();

   }

  else

  {

   /* IWDGRST flag is not set */

    LED_GREEN;//成功喂狗亮绿灯

  }



}


int main(void)

{

/* LED 端口初始化 */

LED_GPIO_Config();  

Delay(0X8FFFFF);

iwdg_config();

while(1)                            

{    


}

}


static void Delay(__IO uint32_t nCount) //简单的延时函数

{

for(; nCount != 0; nCount--);

}

void WWDG_IRQHandler(void)

{

if(WWDG_GetFlagStatus()== SET)

{

//重新设置计数值,也就是执行喂狗动作

WWDG_SetCounter(127);//这里只能用这个函数进行喂狗

//清空提前唤醒中断标志位

WWDG_ClearFlag();

}

}


/*********************************************END OF FILE**********************/


#思考

如果在while(1)循环体一直重设窗口看门狗值,系统会不会复位?

回答:会复位,因为是在窗口值外面的计数值进行了喂狗,所以会导致CPU进行复位操作,标准的喂狗动作放在DDWG_IRQHandler中断中。


而且,独立看门狗和窗口看门狗同时使用的时候,窗口看门狗的优先级一般设置为00最高,定时器的优先级要低于窗口看门狗的优先级,如果反过来的话,会导致窗口看门狗无法抢占优先级而导致CPU复位。

在这里插入图片描述

关键字:STM32  窗口看门狗 引用地址:STM32窗口看门狗(警犬)

上一篇:STM32嵌入式FLASH擦除与写入
下一篇:STM32独立看门狗(宠物狗)

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

STM32系列第21篇--DMA
简介: DMA全称DirectMemory Access,即直接存储器访问。 比如串口发送用和不用DMA当然都可以发送。不用DMA发送是需要单片机实时参与,由单片机一个一个地发送数据并进行监控。但是如果用DMA,设置了起始地址,数据大小等参数后,就直接由专门的一个DMA模块进行数据发送,发送过程中单片机无需参与。发送完后会产生中断告知单片机。由此可知用DMA可以节省单片机资源,让单片可以在同一时间里干更多事。 STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道(通道1~通道7)。DMA2有5个通道(通道1~通道5)。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个
[单片机]
<font color='red'>STM32</font>系列第21篇--DMA
STM32——SD卡和FATFS文件系统
最近看了32的sd卡和FATFS文件系统,现在就自己的理解总结一下。 一、SD卡模块 SD 卡:安全数码卡, 它是在 MMC 的基础上发展而来, 是一种基于半导体快闪记忆器的新一代记忆设备。按容量分类,可以将SD 卡分为 3 类: SD 卡、 SDHC 卡、 SDXC 卡。SD卡(SDSC):0~2G SDHC卡:2~32G SDXC卡:32G~2T。 SD 卡一般支持 2 种操作模式: SD 卡模式(通过 SDIO 通信):允许 4 线的高速数据传输,只能使用 3.3V 的 IO 电平,所以, MCU 一定要能够支持 3.3V 的 IO 端口输出。 SPI 模式:同 SD 卡模式相比就是丧失了速度,在 SPI 模式
[单片机]
<font color='red'>STM32</font>——SD卡和FATFS文件系统
stm32 嵌入式开发 用标准库进行 ADC 实验总结
硬件原理图 ,滑动电位器与芯片PC3引脚连接 根据开发板可知:STM32F429IGT6 有 3 个 ADC,每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个ADC 有 16 个外部通道。         每个ADC 同时还有3个内部通道:通道16/17/18         工作模式有3种:独立模式、双重模式和三重模式 。 转换顺序可分为:规则序列,注入序列。如下图所示: 规则序列寄存器设置根据表由上到下选择通道进行配置 注入序列寄存器JSQR转换顺序为JSQR ,                   X=4-JL,JL为需要转换的通道 触发源可选择:ADC2_CR2-
[单片机]
<font color='red'>stm32</font> 嵌入式开发 用标准库进行 ADC 实验总结
完成stm32 上HID的应用
这个是公司的项目,以前基于usb的虚拟串口来做上下位机通信,由于usb平时也就刷参数和调试之用,也不很常用,外面反应usb有时会连不上stm32控制器,心里一直认为不是大问题,后来反应的多了,就重视这个事情了,虽然usb平时不用,但是用的时候只要出现异常掉线,就再也连不上去了,特别影响用户对我们产品的信心。 在网上找了很多资料,到现在也只能隐约确定是stm32官方的虚拟串口库有问题,我发现不同的电源板都会影响到usb虚拟串口的枚举,于是下定决心使用其他方式来做上下位机的连接,排除了usb虚拟串口,眼前的选择只有两个 1)usblib,这个是针对usb的上位机库,可以玩很多的花样,但是需要开发者稍稍熟悉usb协议,而且这个需要在
[单片机]
STM32的CAN总线调试——与以太网转CAN联调的小问题
现象:单片机与服务器双向通信,服务器发一次数据等待单片机响应,响应完成继续发送,没有响应等待1秒再次发送;单片机向服务器发送数据同理。测试进行了几万次数据交流,发现一个规律:服务器向单片机发送的数据单片机都能够接收,而且正常回应,服务器也能够全部收到,例如服务器发了10000次数据,单片机就能够收到10000次数据也能响应服务器10000次。而单片机向服务器发送的请求,服务器却不一定能够全部收到,但是只要服务器收到的请求,都能够做出响应,比如单片机发出了10000次数据,但是服务器却直接受到了9990次,也给单片机响应了9990次,丢了10次。 遇到这个问题后怎么想也想不明白,为什么单片机响应服务器的数据一个没丢,但是请求服务
[单片机]
<font color='red'>STM32</font>的CAN总线调试——与以太网转CAN联调的小问题
STM32 启动代码选择以及每块字节数
● 小容量产品是指闪存存储器容量在16K 至32K 字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。 对应后缀ld ● 中容量产品是指闪存存储器容量在64K 至128K字节之间的STM32F101xx、STM32F102xx 和STM32F103xx微控制器。 对应后缀md ● 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx 微控制器。对应后缀hd 闪存存储器容量在768K至1m字节之间的STM32F101xx和STM32F103xx 微控制器。对应后缀xl ● 互联型产品是STM32F105xx和STM32F107xx微控制器。
[单片机]
stm32 外部中断库函数实现全程分析
前题:   闭门造车,两周了,经过各种的思考和求问,反复阅读了 M3权威指南 和 stm32不完全手册 的相关章节,以及开发板厂商的实验例程,对stm32这块中断终有所悟,是以记之。   至于中断的什么优先级,什么优先级分组,使能之类的原理,就不再赘述。这里主要是记载以下如何使用中断,以及中断配置函数的实现过程,其中并叙述我曾经的疑惑和感悟。   我的开发板里的中断例程是用按键控制一个灯亮和灭的两个状态。   这个例程的实现过程如下描述: 第一步,将一个I/O口配置成中断输入模式。      这里需要注意的是,GPIO本身是没有中断功能神马的。如果硬要使他产生中断输入方式,就得将相应的端口映射到相应的外部事件上去。而
[单片机]
<font color='red'>stm32</font> 外部中断库函数实现全程分析
STM32中如何使用printf()函数?
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USA
[单片机]

推荐帖子

LED调色温电路集锦
本贴电路方案均为本人原创,从纯模拟到MCU硬件设计、软件策略(本人不会编程,该部份只提供可行性的思路),任何人均可无偿用于商用。一、纯硬件调色温电路R3VRR1(R2),流经R3的电流视为恒流,OP为压控电流源,VR的位置决定两组LED的电流分配,计算表证明,2路LED电流线性不差,总和在调节范围内波动1%,满足应用条件。此内容由EEWORLD论坛网友PowerAnts原创,如需转载或用于商业用途需征得作者同意并注明出处LED调色温电路集锦插一个
PowerAnts 电源技术
鼠年最后一年
恭祝eeworld的朋友们牛年快乐!鼠年最后一年最后一天输入错误,呵呵...接分,LZ新年快乐新年快乐!
yuanyzy 嵌入式系统
WinCE创建虚拟串口的问题
正在做设计,想把GPS的NMEA数据从串口中读出来然后再处理一下放进虚拟串口中,再让其他程序读,但是不知创建虚拟串口,在网上找了如何创建虚拟串口的方法,不知道下面的方法对不对,有些问题还希望大虾指点一下。 PORTEMUPortParamsm_pp;//这个值的参数怎么设置? memset(&m_pp,0,sizeof(m_pp)); m_pp.flocal=true; m_pp.uiportflags=RFCOMM_PORT_FLA
Hellenzheng WindowsCE
【求助】关于vector
编译程序时#pragmavector=UART1RX_VECTORinterruptvoiduart1_rx(void)为什么总是提示Warning:Unknown#pragmaidentifier:\'vector\'是不是没有在头文件中定义,如果是,那么vector包含在那个头文件中?vector到底是什么啊.谢谢!【求助】关于vector是中断向量地址吧!好象您的中断定义有点问题,下面供参考!#pragmavector=WDT_VE
wutieying 微控制器 MCU
变压器试验技术
变压器试验技术好,正是学习需要!资料很不错,谢谢!~谢谢你的好资料,是我学习的好平台。学习谢谢你的好资料你辛苦了。上次的资料丢啦资料很不错,辛苦了楼主,我不会告诉你我下了的!!!好好学习,先谢楼主···资料很不错,谢谢!~
wzt 电源技术
LabVIEW实现IP的Ping功能
在DOS下通过ping命令来链接远程IP并返回相应通讯成功信息在LabVIEW下实现的程序。,d$S*p6Z$m*L;?g#`改成vi即可使用LabVIEW实现IP的Ping功能感谢你的分享,正好需要.多多向你学习.LabVIEW实现IP的Ping功能没发全呀!故意的?怎么没有发全呢,好东西要大家分享,不过分享一半,,,什么情况啊只有一半啊打不开楼主没JJ。。。。。。。。。名字跟发烧友的一样吧 楼主都说了,后缀改改成vi即可使用
心仪 测试/测量
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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