STM32学习(九)

IWDG的本质

Independent watchdog,即独立看门狗。
本质是:能产生系统复位信号的计时器。

  1. 递减的计数器。
  2. 时钟由独立的RC振荡器提供(不是来自于主时钟HSE或HSI),可在待机或者停止模式下运行。
  3. 看门狗被激活后,当递减计数器计数到0x000时产生复位。

喂狗:在计数器计数到0之前,重装载计数器的值,防止复位。

当发生以下任一事件时,产生一个系统复位:

  1. NRST引脚上的低电平
  2. 窗口看门狗计数终止(WWDG复位)
  3. 独立看门狗计数终止(IWDG复位)
  4. 软件复位(SW复位)
  5. 低功耗管理复位

IWDG的作用

异常:单片机在运行时可能由于外界电磁干扰或者自身系统(硬件或软件)异常,导致程序跑飞,如:陷入某个不正常的死循环(死机),打断正常的程序运行。
作用:检测外界电磁干扰,或硬件异常导致的程序跑飞问题。(软件异常由WWDG解决)
应用:在一些高稳定性的产品中,并且对时间精度要求较低(IWDG来源于RC振荡器,RC振荡器时钟频率不太稳定)。

独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生。

IWDG工作原理

STM32学习(九)_第1张图片
CPU必须及时喂狗,否则系统复位重启!
STM32学习(九)_第2张图片
LSI:低速内部振荡器(RC振荡器),启用IWDG后,LSI时钟会自动开启。LSI时钟频率并不精确,F1用40kHz。
12位递减计数器,最大能装4095值。
密钥寄存器:进行解锁。

IWDG寄存器

键寄存器(IWDG_KR)
STM32学习(九)_第3张图片

  1. 用于喂狗。
  2. 解除PR寄存器和PLR寄存器写访问保护。
  3. 启动看门狗工作。

硬件看门狗:系统复位后,看门狗会由硬件自动启动,且不能关闭。
软件看门狗:由在IWDG_KR写入0xCCCC,启动看门狗工作。

预分频器寄存器(IWG_PR)
STM32学习(九)_第4张图片

重装载寄存器(IWDG_RLR)
STM32学习(九)_第5张图片

状态寄存器(IWDG_SR)
STM32学习(九)_第6张图片
用于判断预分频值和重装载值是否已经被更新。

寄存器配置操作

  1. 通过在键寄存器(IWDG_KR)中写入0xCCCC来使能IWDG。
  2. 通过在键寄存器(IWDG_KR)中写入0x5555来使能寄存器访问。
  3. 通过将预分频器寄存器(IWDG_PR)编程为0~7中的数值来配置预分频器。
  4. 对重载寄存器(IWDG_RLP)进行写操作。
  5. 等待寄存器更新(IWDG_SR=0x0000 0000)。
  6. 刷新计数器值为IWDG_RLP的值当IWDG_KR=0xAAAA。——喂狗

IWDG溢出时间计算

STM32学习(九)_第7张图片
Tout是看门狗溢出时间
fIWDG是看门狗的时钟源频率
psc是看门狗预分频系数
rlr是看门狗重装载值

寄存器设置分频系数的方法
在这里插入图片描述
prer是IWDG_PR 的值

IWDG溢出时间计算公式(寄存器)
STM32学习(九)_第8张图片

IWDG最短最长超时时间

STM32学习(九)_第9张图片

IWDG配置步骤

  1. 取消PR/RLP寄存器写保护,设置IWDG的预分频系数和重装载值,启动IWDG。HAL_IWDG_Init()
  2. 及时喂狗,写入0xAAAA到IWDG_KR。HAL_IWDG_Refresh()

在这里插入图片描述

typedef struct{
	IWDG_TypeDef *Instance;//IWDG寄存器基地址
	IWDG_InitTypeDef Init; //IWDG初始化参数
}IWDG_HandleTypeDef;
typedef struct{
	uint32_t Prescaler;//预分频系数
	uint32_t Reload; //重装载值
}IWDG_InitTypeDef;

验证不及时喂狗,系统将复位重启

STM32学习(九)_第10张图片

你可能感兴趣的:(stm32,stm32,单片机,学习)