STM32窗口看门狗(警犬)

最新更新时间: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  窗口看门狗 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic558061.html

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

推荐阅读

STM32中 一些类型的别名
typedef signed char int8_t;typedef signed short int int16_t;typedef signed int int32_t;typedef signed __INT64 int64_t; /* exact-width unsigned integer types */typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef int uint32_t;typedef unsigned __INT64 uint64_t; /* 7.18.1.2 */ /* smal
发表于 2022-09-29
STM32+超声波
1.初始化IO口void HC_SR04Init(void){GPIO_InitTypeDef GPIOInit;TIM_TimeBaseInitTypeDef TIMInit; NVIC_InitTypeDef NVICInit;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //负责发送高电平PB11GPIOInit.GPIO_Mode = GPIO_Mode_Out_PP
发表于 2022-09-28
STM32+AS608指纹模块
前言:这个串口逻辑有点问题,要是用串口做命令输入端的话要自己改一下串口逻辑,串口只是调试能不能用指纹模块的功能,后期不需要串口发命令所以没怎么写串口的命令逻辑1.AS608的资料挺全的,就是按照他给的来写命令,基本上看懂会用就行,没必要一个个写太多了2.AS608.c#include <string.h>#include "system.h" #include "usart2.h"#include "as608.h"u32 AS608Addr = 0XFFFFFFFF; //默认//初始化PA6为下拉输入 //读摸出感应状态(触摸感应时输出高电平信号)voi
发表于 2022-09-28
STM32+AS608指纹模块
STM32固件库使用USART
1.USART的配置(1)关键结构体GPIO_InitTypeDefUSART_InitTypeDefNVIC_InitTypeDef//用于接收的中断1.1USART的TX在PA9,RX在PA10.2.时钟线2.1 USART时钟挂载在APB2上RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//配时钟3.代码段3.1(单发送)void usart_init(void){ GPIO_InitTypeDef gpio_initStructure; USART_Init
发表于 2022-09-28
STM32外设之GPIO
一、GPIO是什么?全称:General-purpose input/output(通用型输入输出)操作要点:1. 使能 GPIO 端口时钟。2. 初始化 GPIO 目标引脚为推挽输出模式。3. 编写简单测试程序,控制 GPIO 引脚输出高、低电平。二、使用步骤1.GPIO功能与模式1.输入浮空 :输入模式施密特触发器打开及GPIO端口内部上下拉开关打开, 并且状态不确定。2.输入上拉:输入模式施密特触发器打开及GPIO端口内部上拉开关关闭,默认为高电平。3.输入下拉 :输入模式施密特触发器打开及GPIO端口内部下拉开关关闭,默认为低电平。4.模拟输入 : 模拟输入施密特触发器关闭─,输入数据寄存器禁止,实现模拟信号采集。5.开漏输
发表于 2022-09-27
<font color='red'>STM32</font>外设之GPIO
STM32外设之ADC
一、ADC是什么?ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。那么就有人要问了,什么是模拟信号,什么是数字信号。模拟信号:指的是连续变化的物理量,如温度,压力,湿度。而数字信号可以简单的理解为0和1两种状态。12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中二、ADC的基本使用1.ADC的主要特征●12位分辨率 //0-4095● 转换结束、注入转换结束和发
发表于 2022-09-27
<font color='red'>STM32</font>外设之ADC

推荐帖子

【NXP Rapid IoT评测】+手机同步器之一
本帖最后由北方于2018-12-2613:57编辑 1、承前启后的RapidIoT通常意义上的物联网开发工具都是开发板的样子,但NXPRapidIoT完全的不一样。因为NXPRapidIoT几乎就是一个原型设计,而且,可以直接作为产品应用。虽然,从外形和气质上都不一样,我们还是可以很容易地从产品定位和尺寸规格上,迅速发现,NXPRapidIoT就是从NXPHexiwear发展来的。 1.1Hexiwear Hexiwear的目标就是将高端
北方 RF/无线
【沁恒CH582】 让蓝牙参与到控制中....
上一次我们讨论了通过UART实现的控制代码,我们可以将UART平行变易成由BLE完成的版本。方法仍然同样的简单,我们可以部分修改BLE_UART程序中的一部分。 在peripheral_main.c中可以找到这一部分 __HIGH_CODE voidMain_Circulation(){ while(1){ TMOS_SystemProcess(); app_uart_process(); } } 可以定位到uart的处理函数。我们进去观察一下
javnson 国产芯片交流
什么是ISO连接器?
最近接触客户规格说明屡次提到应用与ISO连接器,请教是不是就是泛用接口而非客制化的接口?有没有泛用接口的目录? 什么是ISO连接器?
zww820317 汽车电子
大家讨论下,Window Mobile和Window CE 的区别
大家也做过很多程序,有没有发现在Mobile运行的程序到了,CE上运行差别就很大,有的甚至运行不了。 就大家的经验说下,在程序开发中遇到的相关,给大家点意见,以后会有帮助的。 我先起个头: 如UI的差异是在那个地方(toolbar,Menu,FULLscreen....), 在WinCE5.0如何实现,Mobile又如何实现。 如何实现可能还要区分是Win32,MFC,还是.NetcompactFramework. 大
xinqing 嵌入式系统
PCB工程师的这四个等级,你都修炼到了什么级别?
工作岗位:入门级PCB工程师(Level-1)能力要求:1、能制作简易的封装,如DIP10等到; 2、掌握至少一种PCB设计软件的基本操作,并能制订简易的布线线宽和间距等规则; 3、能对具有100个元件和200个网络或以下PCB进行较合理、有序的布局和布线; 4、能在他人或自定规则下手动或自动布线并修改,达到100%布通并DRC完全通过; 5、具备基本的机械结构和热设计知识; 6、掌握双面板走线的一些基本要求。工作内容:1、简单PCB的设计和修改(如结构简易的前面板、单片机小系统板等)
ohahaha PCB设计
关于接收网卡驱动数据的问题
建立一个buffer来接收网卡的数据,应该用队列还是数组,自己觉得队列比较好。另外如何定义对分配空间的的大小如何计算的出来呢?根据网卡的接收速度?关于接收网卡驱动数据的问题
yangwm 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved