STM32——独立看门狗

IWDG
STM32F4芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另一个是窗口看门狗WWDG。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障。独立看门狗简单理解其是就是一个12位递减计数器,当计数器从某一个值递减到0时(如果看门狗已激活),系统就会产生一次复位。如果在计数器递减到0之前刷新了计数器值,那么系统就不会产生复位。这个刷新计数器值过程我们称之为“喂狗”。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。
在这里插入图片描述
秘钥寄存器有三个值:
0x5555:关闭写保护,可以对看门狗的PR、RLR寄存器进行操作。
0xAAAA:让重载寄存器的值传入到计数器中。
0xCCCC:启动独立看门狗。

IWDG配置步骤
由于独立看门狗是用内部专用时钟LSI所以不用初始化时钟。
(1)开启寄存器访问(给IWDG_KR寄存器写入0X5555)

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 

(2)设置IWDG预分频系数和重装载值

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); 
void IWDG_SetReload(uint16_t Reload);          //不能超过12位

其中Tout为独立看门狗溢出时间,单位是ms。pre是预分频器系数(0-6),rlr
是重装载寄存器的值,公式内的40是独立看门狗的时钟。
Tout = (4*2^pre) / 40 * rlr

(3)重载计数器值(喂狗)(给IWDG_KR寄存器写入0XAAAA)

IWDG_ReloadCounter();

(4)开启IWDG(给IWDG_KR寄存器写入0XCCCC)

IWDG_Enable();

实验:
led1一直闪烁表示程序一直在运行,按键KEY_UP进行喂狗操作,喂狗时led2亮,系统复位时led2灭。
iwdg.c

#include "iwdg.h"

void iwdg_Init(u8 pre,u16 rlr)
{
	
	  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 
    IWDG_SetPrescaler(pre);    //设置预分频器的值
	  IWDG_SetReload(rlr);      //设置重装载值,要小于12位的值
	  IWDG_ReloadCounter();     //重载计数器值(喂狗);
	  IWDG_Enable();

}

void iwdg_feedDog(void)
{
			IWDG_ReloadCounter();

}

主函数:

#include "led.h"
#include "system.h"
#include "SysTick.h"
#include "key.h"
//#include "pwm.h"
#include "usart.h"
#include "iwdg.h"


int main()
{
	
	u8 i = 0;
	
	SysTick_Init(168);
	LED_Init();
	KEY_Init();
	iwdg_Init(4,800);//pre为4,内部低速时钟为40kHz,根据Tout = (4*2^pre) / 40 * rlr,得到1280ms

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	//TIM14_CH1_PWM_Init(400-1,84-1);//84MHz分频为84即1MHz为1us,计数500次为500us,频率为2KHz
 
	usart_Init(9600);
	
	
	led2 = 1; //led2用于提示喂狗操作,初始时让led2灭
	printf("系统复位\r\n");

	while(1)
	{
		if(KEY_Scan(0) == KEY_UP){
					iwdg_feedDog(); //喂狗
			    led2 = 0; //led2亮表示喂狗操作成功
			    printf("喂狗\r\n");
		}
		i++;
		if(i%20 == 0){
		    led1 = !led1;
			  
		}
		myDelay_ms(10);
	}
	
}

		 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值