关闭

stm32 独立看门狗学习

标签: stm32看门狗
767人阅读 评论(0) 收藏 举报
分类:

STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

我们的实验这样设计,主函数开始的时候,向串口输出“Hello World”,然后启动看门口(溢出时间设定为3秒钟)。在按下按键的时候喂狗,同时串口打印“喂狗”。

预期结果:如果不按按键,则约每三秒重启一次,现象是串口隔三秒就会打印“Hello World”;如果在启动后的3秒内按键,则显示“喂狗”,再在3秒内按键……这样保证不重启。

看一下代码吧。

独立看门狗的初始化:

void IWDG_Init(u8 prer,u16 rlr) 
{	
 	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器 IWDG_PR 和 IWDG_RLR的写操作
	IWDG_SetPrescaler(prer);  //设置预分频值
	
	IWDG_SetReload(rlr);  //设置重装载值
	
	IWDG_ReloadCounter();  //按照重装载值装载IWDG计数器
	
	IWDG_Enable();  //看门狗使能
}
这个函数有两个参数:prer 和 rlr


PRER 就是表格中的PR[2:0],取值范围是0-7;

RLR就是表格中的RL[11:0],取值范围是0x000-0xFFF;

注意:这里的时间是粗略计算的,不是那么准确。

溢出时间 = 2^PR*(RL+1)/10  

单位:ms 

如果我们定时3秒钟,那么应该是:

IWDG_Init(4,1874);  // 2^4 * (1874+1) / 10 (ms)= 16*1875/10 (ms)= 3000(ms) = 3s

主函数代码:

int main(void)
{	
	delay_init();	     //延时函数初始化  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	
	uart_init(9600);	 //串口初始化
	
	printf("Hello World ! \r\n");
 	
	IWDG_Init(4,1874);    // 看门狗初始化并使能
	
	key_init();   //按键IO初始化
	EXTIX_Init(); // 按键中断初始化
	
	while(1)
	{
		
		;
		
	}
}

喂狗的操作是:

void IWDG_Feed(void)
{   
 	IWDG_ReloadCounter();//reload										   
}

我们在按键中断处理中喂狗:

void EXTI0_IRQHandler(void)
{
	delay_ms(10);    //消除抖动
	if(KEY3==1)	 	 //WK_UP
	{				 
		printf("喂狗......\r\n");
		IWDG_Feed();
	}
	EXTI_ClearITPendingBit(EXTI_Line0); //清除中断标志位
}

实验结果如图。

如果不喂狗,那么大约3秒钟就会重启。


如果喂狗,效果如下。




0
0
查看评论

STM32学习笔记之独立看门狗(IWDG)的使用

对STM32任何模块使用前都要对其初始化、第一步就是如何初始化模块。看数据手册如下:          读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_RLR两个寄存器的...
  • sinat_23338865
  • sinat_23338865
  • 2016-07-15 23:35
  • 9852

STM32F103学习笔记(六) 独立看门狗and窗口看门狗

首先,学习两种狗,就该看到它们两者之间的不同: (1)独立看门狗由内部专门的 40Khz 低速时钟驱动,而窗口狗使用的是 PCLK1 的时钟,需要先使能时钟,而独立狗不需要使能。 (2)两者的作用不同:1.独立狗  避免单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,&...
  • mvp_dong
  • mvp_dong
  • 2015-01-23 13:49
  • 3800

STM32F0xx_看门狗(独立+窗口)配置详细过程

Ⅰ、概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗。 今天提供两种看门狗的软件工程实例,供大家下载。 两种看门狗各有各的特点,应用在不同的场合,下面将分别简单总结一下独立和窗口看门狗的功能。 ...
  • ybhuangfugui
  • ybhuangfugui
  • 2016-06-07 22:10
  • 3112

STM32的独立看门狗程序,亲测可用

  • 2017-11-25 21:23
  • 51KB
  • 下载

stm32 窗口看门狗学习(二)

窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断。 上次的代码加一点就可以做这个实验了。 void WWDG_Init(u8 tr,u8 wr,u32 fprer) { RCC_APB1PeriphClockCmd(RCC_APB1Perip...
  • u013490896
  • u013490896
  • 2015-01-28 12:06
  • 896

STM32f103 看门狗使用

//看门狗使用需要计算超时时间 #ifndef __STM32_WDG_H__ #include "stm32f10x.h" #define LSI_FREQ   40000 void stm32_wdg_init(void); void stm32_wdg...
  • allen19881119
  • allen19881119
  • 2016-04-11 22:03
  • 2102

STM32菜鸟成长记录---窗口看门狗

stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。   独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其...
  • yx_l128125
  • yx_l128125
  • 2012-09-30 09:24
  • 20615

STM32F103实现独立看门狗

  • 2016-04-25 19:05
  • 6.43MB
  • 下载

STM32之独立看门狗的那些事

为什么MCU会具有看门狗呢?带着这个疑问,来了解看门狗的那些事。就连51单片机都带有看门狗,说明这条狗对我们来说有着 不一般的意义。看门狗的目的一句话说:防止程序乱跑。MCU在不同的环境下程序的运行会受到干扰,比如陷入死循环怎么办? 这就是养狗的好处呀,就算你没养过狗,你也看过猪跑吧。 ...
  • m0_38005870
  • m0_38005870
  • 2017-06-19 12:48
  • 307

STM32的独立看门狗

STM32 内 部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG) STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然 有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是 在 30~6...
  • u011046042
  • u011046042
  • 2014-07-24 17:41
  • 4724
    个人资料
    • 访问:193506次
    • 积分:3566
    • 等级:
    • 排名:第10964名
    • 原创:164篇
    • 转载:2篇
    • 译文:0篇
    • 评论:71条
    博客专栏
    最新评论