我是靠谱客的博主 潇洒小丸子,最近开发中收集的这篇文章主要介绍STM32学习笔记—独立看门狗1、独立看门狗的介绍2、独立看门狗的使用3、代码段1、独立看门狗的介绍2、独立看门狗的使用3、代码段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、独立看门狗的介绍

2、独立看门狗的使用

3、代码段

1、独立看门狗的介绍

独立看门狗利用系统内部的低速时钟提供机械周期,这个低速时钟与系统的工作时钟不是一个时钟,所以看门狗的运行和系统的运行是互不干扰的。独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然 有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是 在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算。看门狗的主要的作用是防止程序跑飞或者死机。具体工作原理是系统正常工作时会定时喂狗,就是会隔一段时间给相应的寄存器装入设定好的值,然后寄存器从给定的值开始计数,直至到0的时候产生一个复位信号,如果在计数到0之前,进行喂狗,则重新从指定的数开始计数。如果在计数到0的时候没有进行喂狗,则认为程序跑飞,产生一个复位的信号,让程序重新开始执行。

2、独立看门狗的使用

时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).

 配置步骤

1、取消预分频计数器和重装载寄存器的写保护IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable)

2、设置预分频值 IWDG_SetPrescaler(prer) 这个prer是预分频系数,是一个形参。在主函数调用的时候传进来。

3、设置重装载值 IWDG_SetReload(rlr) 这个rlr是重装载值,也是一个形参,由主函数调用时传进来。

4、喂狗,IWDG_ReloadCounter() ,对DR寄存器写入0xaaaa

5、使能看门狗IWDG_Enable()

3、代码段

iwdg函数
#include "iwdg.h"
#include "sys.h"

void IWDG_Init(u8 prer,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//取消寄存器写保护
    IWDG_SetPrescaler(prer);//设置预分频系数
	IWDG_SetReload(rlr);//设置重装载值
	IWDG_ReloadCounter();//喂狗
	IWDG_Enable();//使能独立看门狗
}
main函数
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "beep.h"
#include "iwdg.h"

 int main(void)
 {	
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  		//初始化与LED连接的硬件接口         	
	KEY_Init();         	//初始化与按键连接的硬件接口
    IWDG_Init(4,625);
	delay_ms(500);
    LED0=0;					//先点亮红灯
	while(1)
	{
 		if(KEY_Scan(0)==KEY1_PRES)//得到键值
		{
		IWDG_ReloadCounter();
		}
		delay_ms(10);
	}	 
}

最后

以上就是潇洒小丸子为你收集整理的STM32学习笔记—独立看门狗1、独立看门狗的介绍2、独立看门狗的使用3、代码段1、独立看门狗的介绍2、独立看门狗的使用3、代码段的全部内容,希望文章能够帮你解决STM32学习笔记—独立看门狗1、独立看门狗的介绍2、独立看门狗的使用3、代码段1、独立看门狗的介绍2、独立看门狗的使用3、代码段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部