STM32——独立看门狗

一、独立看门狗概述

由专用低速时钟驱动,即便主时钟故障仍然有效。独立于主程序外,适用于对时间精度要求低的场景。

 

 二、独立看门狗库函数

三、独立看门狗操作步骤

 

 四、具体程序

(1)iwdg.c

#include "iwdg.h"

void IWDG_Config(uint8_t prv ,uint16_t rlv)
{	
	//对应五步
	IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
	IWDG_SetPrescaler( prv );
	IWDG_SetReload( rlv );
	IWDG_ReloadCounter();
	IWDG_Enable();	
}
//喂狗
void IWDG_Feed(void)
{
	/* 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位
	   当计数器的值减到0的时候会产生系统复位 */
	IWDG_ReloadCounter();
}

(2)iwdg.h

#ifndef __IWDG_H__
#define	__IWDG_H__

#include <stm32f10x.h>

void IWDG_Feed(void);
void IWDG_Config(uint8_t prv ,uint16_t rlv);

#endif 

(3)主函数

#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "iwdg.h"

static void Delay(uint32_t time);


int main(void)
{
  /* 初始化板载LED灯 */
  LED_GPIO_Init();
  
  /* 初始化按键 */  
  KEY_GPIO_Init();
  Delay(1000);
  /* IWDG 1s 超时溢出 */ 
	IWDG_Config(IWDG_Prescaler_64 ,625); 
  
  LED1_ON;
  
  /* while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控
   * 如果我们知道这部分代码的执行时间,比如是50ms,那么我们可以设置独立看门狗的
	 * 溢出时间是60ms,比50ms多一点,如果要被监控的程序没有跑飞正常执行的话,那么
	 * 执行完毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗的程序
	 * 此时就会产生系统复位。但是也不排除程序跑飞了又跑回来了,刚好喂狗了,歪打正着。
	 * 所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在规定的窗口时间内喂狗。
   */
	while(1)                        
	{	
/*  这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉 */
/*------------------------------------------------------------------------*/		
		if( KEY1_StateRead() == KEY_DOWN  )
		{
			/*喂狗,如果不喂狗,系统则会复位,LD1则会灭一次,如果在1s
			  时间内准时喂狗的话,则LED1会常亮 */
			IWDG_Feed();
		}   
	}
/*------------------------------------------------------------------------*/	
}

//延时函数不太准确
static void Delay(uint32_t time)
{
  uint32_t i,j;

  for(i=0;i<time;++i)
  {
    for(j=0;j<10000;++j)
    {       
      //空循环,什么都不做        
    }
  }
}

五、效果

咔咔咔一直按key1,LED1不会灭。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇努力学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值