我的独立看门狗总结

发布者:HeavenlySunset最新更新时间:2013-04-10 来源: 21ic关键字:独立看门狗  IWDG  软件错误 手机看文章 扫描二维码
随时随地手机看文章

一、独立看门狗IWDG概述

1.)看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断或产生系统复位。

2.)功能图:(由于本人无法贴图,请见参考手册,125页)

3.)独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。

4.)其中IWDG_PR为预分频器寄存器,IWDG_RLR为重新加载计数器寄存器,IWDG_KR为控制器存器。IWDG_SR为状态寄存器。(见图)

5.)IWDG_KR写入OXCCCC,启动独立看门狗功能,计数器值开始递减,减到0时,看门狗复位。IWDG_KR写入0XAAAA,计数器值被重新加载,即避免看门狗复位。IWDG_KR写入0X5555,则允许写IWDG_PR 和IWDG_RLR寄存器写操作。写入其它值,IWDG_PR 和IWDG_RLR被保护,数据将无法写入这两个寄存器。IWDG_SR状态寄存器指示预分频值和递减计数器是否正在被更新。IWDG_RLR寄存器范围为0-0xfff.

6.)如果用户在选择字节中启用了“硬件看门狗“功能,在系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。

7。)看门狗复位时,系统复位,程序重新开始运行。

二、实验功能

为了实现IWDG复位功能,本人做了一个实验:

采用优易特电子的EDU开发板,功能如下:

系统上电,蜂鸣器延时叫一声,之后关闭。IWDG 40K的内部低速时钟进行8分频产生5KHZ的看门狗计数时钟,RLR设为2500,即看门狗复位时间设为500MS。LD1灯亮,表示看门狗初始化完毕。开启看门狗功能。定时器3定为200MS定时器,在每次定时器中断中,将看门狗计数器重新加载,当加载到25(5S)次以后,不再加载看门狗。这样,看门狗会在后面的时间发生复位,从而系统重新运行。检查蜂鸣器是否每约5S叫一声,如果这样表示IWDG发生了复位。功能检验完成。

经实验证明,以上功能均正确。

三、程序如下

main()

{

u32 temp;

RCC_init();

Gpio_int();

GPIO_ResetBits(GPIOC,GPIO_Pin_6);//蜂鸣器叫一声关闭

for(temp=0;temp<200000;temp++);

GPIO_SetBits(GPIOC,GPIO_Pin_6);

IWDG_init();

GPIO_SetBits(GPIOF,GPIO_Pin_6);//LD1灯亮

Timer_init();

NVIC_init();

while(1);

}

……………………………………………………………………….

void IWDG_init(void)

{

/* Enable write access to IWDG_PR and IWDG_RLR registers */

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

/* IWDG counter clock: 40KHz(LSI) / 8 = 5 KHz */

IWDG_SetPrescaler(IWDG_Prescaler_8);

/* Set counter reload value to 2499,500ms */

IWDG_SetReload(2499);

/* Reload IWDG counter */

IWDG_ReloadCounter();

/* Enable IWDG (the LSI oscillator will be enabled by hardware) */

IWDG_Enable();

}

void NVIC_init(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM[page]

/* Set the Vector Table base location at 0x20000000 */

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else  /* VECT_TAB_FLASH  */

/* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void Timer_init(void)

{

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

// ---------------------------------------------------------------

//  TIM3 Configuration:  定时器3配置

//  TIM3CLK = 36 MHz, Prescaler =36000, TIM3 counter clock = 1KHz

//  SET TTIM3 TIME 200mS

//---------------------------------------------------------------

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

// Time base configuration

TIM_TimeBaseStructure.TIM_Period = 200;

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

//Enables peripheral Preload register on ARR

TIM_ARRPreloadConfig(TIM3,ENABLE);

// Prescaler configuration

TIM_PrescalerConfig(TIM3, 35999, TIM_PSCReloadMode_Immediate);

TIM_InternalClockConfig(TIM3);

//Enables  TIM interrupts

TIM_ITConfig(TIM3,TIM_FLAG_Update,ENABLE);

//TIM3 enable counter

TIM_Cmd(TIM3, ENABLE);

}

………………………………………………………………………

void TIM3_IRQHandler(void)

{

static u8 count=0;

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

//TIM3溢出中断需执行的代码在此添加

count++;

if(count<=25)

{

/* Enable write access to IWDG_PR and IWDG_RLR registers */

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

/* Reload IWDG counter */

IWDG_ReloadCounter();

}

}

}

四、结语

独立看门狗时钟由内部40KHZ提供,所以不受主时钟的影响,即一旦启动看门狗,即便在调试过程中,暂停程序运行,看门狗也将不会停止,在复位时间到后仍会将系统复位。

关键字:独立看门狗  IWDG  软件错误 引用地址:我的独立看门狗总结

上一篇:关于串口FIFO中断
下一篇:关于软件硬件看门狗

推荐阅读最新更新时间:2024-03-16 13:21

STM8L独立看门狗IWDG
简单扼要 void IWDG_Init(void)//初始化 { IWDG- KR = 0xcc;//启动IWDG IWDG- KR = 0x55;//解除PR及RLR的写保护 IWDG- RLR = 0xff;//看门狗计数器重载值 IWDG- PR = 0x06;//分频系数256 1724.63ms IWDG- KR = 0xaa;//刷新IDDG,避免产生看门狗复位,同时恢复PR及RLR的写保护 } void IWDG_Feed(void)//喂狗 { IWDG- KR = 0xaa; }
[单片机]
STM32CubeMX系列 | 独立看门狗
1. 独立看门狗简介 看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统 STM32的独立看门狗(IWDG)由内部专门的40KHz低速时钟驱动,即使主时钟发生故障,它也仍然有效。注意IWDG的时钟是一个内部RC时钟,是一个在30~60KHz之间的一个可变化的时钟,只是我们在估算的时候以40KHz的频率来计算,看门狗对时间的要求不是很精确 独立看门口功能框图如下。实际上独立看门口狗是一个递减计数器,当计时器的值减到0时,IWDG会产生一个复位信号,系统复位重新启动。为避
[单片机]
STM32 独立看门狗简介
STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。 在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计
[单片机]
STM32单片机看门狗独立看门狗和窗口看门狗有什么区别
早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。 为了满足更多使用场景,现在很多MCU都集成了两个看门狗:独立看门狗与窗口看门狗。 拿现在大家熟悉的STM32来说,都集成了独立看门狗和窗口看门狗,下面就展开来讲讲这个两个看门狗以及它们的区别。 独立看门狗 独立看门狗,顾名思义,就是独立的一个看门狗,由其专用低速时钟 (LSI) 驱动,因此,即便在主时钟发生故障时仍然保持工作状态。 IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 独立看门狗特性: 自由运行递减计数器 时钟由独立 RC
[单片机]
神舟IV学习笔记(十二)IWDG独立看门狗
看门狗这个词非常形象,如果你不定时给它骨头吃,它就会汪汪叫。STM32当中写入IWDG_KR寄存器值为0XAAAA,就相当喂骨头给狗吃。如果你超时没有喂狗,后果非常严重,狗就会要咬主人啦(也就是单片机复位)。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。 我们今天就实现这样一个功能,当按下KEY1键,执行喂狗程序。采用LED1指示复位情况。当配置看门狗后,LED1 将常亮,如果 KEY1按键按下,就喂狗,只要 KEY1不停的按,看门狗就一直不会产生复位。只要超过看门狗定时时间还没
[单片机]
神舟IV学习笔记(十二)<font color='red'>IWDG</font><font color='red'>独立</font><font color='red'>看门狗</font>
stm32独立看门狗和窗口看门狗的区别
1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的。窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR 以上是我总结的 接下来我们介绍一下独立看门狗和窗口看门狗,这里我们就不讲解程序了,很简单的,配置一下寄存器就可以使用了。 独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新
[单片机]
STM32独立看门狗(宠物狗)
一、前言 ······在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) ,其主要功能是:能够让CPU复位的一个硬件。 ······看门狗( watchdog timer),是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作
[单片机]
STM32<font color='red'>独立</font><font color='red'>看门狗</font>(宠物狗)
STM8S_008_WDG独立看门狗和窗口看门狗
Ⅰ、写在前面 STM8S看门狗WDG分为两类: IWDG:Independent WatchDog独立看门狗 WWDG:Window WatchDog窗口看门狗   独立看门狗模块可以用于解决处理器因为硬件或软件的故障所发生的错误。它由一个内部的128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。   窗口看门狗用于监测由于外部干扰或不可预知的逻辑条件所产生的软件错误,这样的软件错误通常会导致应用程序不按照预期的方式运行。   大概意思主要是:IWDG主要防止硬件问题引起的复位,WWDG主要防止软件问题引起的复位.   作者:strongerHuang 版权所有,未经允许,禁止用于其它商业用途!
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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