STM32F4X 独立看门狗 IWDG

本文详细介绍了STM32F4X的独立看门狗IWDG的工作原理,包括时钟源选择、寄存器配置(如关键字寄存器、预分频器、重载寄存器和状态寄存器),以及如何计算计数频率。还提供了实际的例程演示如何初始化和喂狗,确保系统在异常情况下自动重启。
摘要由CSDN通过智能技术生成

什么是看门狗

我们都知道,当一个嵌入式在运行过程中发生死机或者程序跑飞的情况的时候,我们一般都是要手动进行开关机或者复位,让程序能够重新运行。但是当一个嵌入式系统被安装到一些特殊位置时,如果发生了死机又不能及时进行手动复位,这时候就需要看门狗了。看门狗的作用就是监控嵌入式系统的运行情况,如果系统出现死机或者程序跑飞时,就会自动复位系统,无需人为干预。

STM32F4X 独立看门狗的使用

独立看门狗时钟源

在数据手册上我们可以看到,STM32F4X的独立看门狗的时钟源是用LSI内部32K时钟源。
在这里插入图片描述

独立看门狗寄存器

关键字寄存器

在这里插入图片描述
关键字寄存器主要是通过配置不同的键值来设置独立看门狗的功能。

  • 0xAAAA:重新写入重装载值到重装载寄存器,用于喂狗
  • 0x5555:使能对PR和RLR寄存器的访问
  • 0xCCCC:启动独立看门狗

预分频器寄存器

设置独立看门狗的预分频值
在这里插入图片描述

重载寄存器

设置独立看门狗的计数值
在这里插入图片描述

状态寄存器

判断独立看门狗的状态
在这里插入图片描述
可以看到独立看门狗其实跟普通定时器的原理是一样的,也是通过设置一个频率,然后不停地进行计数。不同的是独立看门狗当计数值超过设定值时,如果我们不进行喂狗,就会复位系统,需要注意的是,看门狗一旦启动就不能停止,只能通过复位或掉电停止。

独立看门狗计数频率计算

独立看门狗的计数频率其实跟普通定时器的计算是一样的。假设独立看门狗的时钟源为32KHZ,预分频为64分频,重载值设为1000。那么独立看门狗的溢出时间可以这样计算。
Tout = ( 1 / (32000 / 64)) * 1000 = 2s
也就是独立看门狗的溢出时间是2s,当这2秒内我们不进行喂狗的话,独立看门狗就会复位系统。

独立看门狗例程

在例程中会将看门狗的复位时间设置成3秒。在main函数中会先以500ms的频率进行10次喂狗,喂狗次数大于10次之后就停止喂狗,看门狗就会在3秒后复位系统。

#include "iwdt.h"
void bsp_iwdg_init(void)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 使能看门狗寄存器写
	
	IWDG_SetPrescaler(IWDG_Prescaler_64); // 设置预分配为64 也就是 1 / (32000 / 64) = 2ms
	
	IWDG_SetReload(1500); // 计1500个数
	
	IWDG_ReloadCounter(); // 重新写入重装载值到重装载寄存器,用于喂狗
	
	IWDG_Enable(); // 使能看门狗,一旦使能就不能停止
}

void IWDG_Feed(void)
{
	IWDG_ReloadCounter();// 重新写入重装载值到重装载寄存器,用于喂狗
}

int main(void)
{
	int cnt = 10;
	NVIC_PriorityGroupConfig(2);
	system_tick_init();
	
	bsp_usart_init(115200);
	bsp_iwdg_init();
	printf("system init...\r\n");
  while(1){
		while(cnt-- > 0)
		{
			IWDG_Feed();
			delay_ms(500); // 每隔500ms喂一次狗,防止复位
		}	
		printf("看门狗将在3秒后复位\r\n");
		delay_ms(1000);
		printf("看门狗将在2秒后复位\r\n");
		delay_ms(1000);
		printf("看门狗将在1秒后复位\r\n");
		delay_ms(1000);
	}
  
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值