STM32理论 —— 看门狗

文章目录

  • 1. 简述
  • 2. 独立看门狗 IWDG
    • 2.1 IWDG 相关寄存器
      • 2.1.1 键值寄存器`IWDG_KR`
      • 2.1.2 预分频寄存器`IWDG_PR`与重装载寄存器`IWDG_RLR`
    • 2.2 核心代码

1. 简述


STM32 内部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG);

2. 独立看门狗 IWDG


STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动(该内部低速时钟并不精确),即使主时钟发生故障,它也仍然有效;

  • IWDG 的作用:在一定时间内若没有接收喂狗信号(表示 MCU 已经挂了或程序跑飞了),便实现处理器的自动复位重启(发送复位信号);
  • 注意 IWDG 在一旦在程序中启用,就不能再被关闭!

2.1 IWDG 相关寄存器

2.1.1 键值寄存器IWDG_KR

STM32理论 —— 看门狗_第1张图片

  • IWDG_KR 的使用

STM32理论 —— 看门狗_第2张图片

2.1.2 预分频寄存器IWDG_PR与重装载寄存器IWDG_RLR

  • 接触两个寄存器的写保护:具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555;
  • 看门狗溢出时间计算公式:Tout=((4×2^prer) ×rlr) /40,单位ms,其中prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值);

2.2 核心代码

// IWDG 初始化函数
void IWDG_Init(u8 prer,u16 rlr) 
{
 	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作
	
	IWDG_SetPrescaler(prer);  //设置IWDG预分频值:设置IWDG预分频值为64
	
	IWDG_SetReload(rlr);  //设置IWDG重装载值
	
	IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器
	
	IWDG_Enable();  //使能IWDG
}
// 假如预分频系数为4,自动重装载系数为625,则IWDG 溢出时间为1s
IWDG_Init(4,625); 


// 喂狗
IWDG_ReloadCounter();

你可能感兴趣的:(STM32,stm32,单片机,嵌入式硬件)