IWDG&WWDG(STM32学习笔记)

WDG简介


IWDG(独立看门狗)

看门狗能在停机和待机模式下工作,从上节我们能得知,IWDG复位也能唤醒待机模式下的主机

独立看门狗以LSI作为时钟源,不过这个时钟不需要通过RCC库函数来开启,在独立看门狗启动后,LSI会自动开启

通过配置预分频器PR重装载寄存器RLR,就能设置最晚的喂狗时间。

上图为超时时间的计算公式,其中LSI固定为40kHz

初始化配置模板:

//初始化独立看门狗	1000ms
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//解除写保护
IWDG_SetPrescaler(IWDG_Prescaler_16);//配置预分频
IWDG_SetReload(2499);//写重装值(0~4096)
IWDG_ReloadCounter();//先喂一次狗 第一个周期会完整一些
IWDG_Enable();//启动独立看门狗

模板代码是配置了一个超时时间为1000ms的独立看门狗;

在配置之前要先解除写保护;

预分频器和重装寄存器可以自由组合; 

喂狗操作由IWDG_ReloadCounter();只要在超时时间之内完成喂狗,独立看门狗就不会复位。

想要查看是否由独立看门狗引起的复位,可以调用RCC_GetFlagStatus(RCC_FLAG_IWDGRST)

不过下一次还想查看是否由它引起的复位,要在每次查看后手动清除标志位,RCC_ClearFlag();


WWDG(窗口看门狗)

这里与独立看门狗不懂,独立看门狗在超时时间之前喂狗就不会引起复位;窗口看门狗要在窗口时间和超时时间之间喂狗,由PCLK1作为时钟源,需要调用RCC库函数开启,并且进来后会有一个4096的分频,图中没标出来。

可见两个自减计数器都是6位的,但我们只能写入低5位,T6位是溢出标志位,所以只看低5位就是减到0时复位,看6位就是减到0x40时复位。 

这里计算都是按照5位来计算的,所以最后写入寄存器时还需要“|”0x40,将最高位置1; 

初始化配置模板

//窗口看门狗初始化 超时时间50ms 窗口时间30ms
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//与独立看门狗不同,需要手动开启时钟
	
WWDG_SetPrescaler(WWDG_Prescaler_8);//设定预分频
WWDG_SetWindowValue(0x40|21);//设定窗口值
/* 
计算时用的是T[5:0],所以需要|上0x40,因为T[6:0]最高位为1
*/
WWDG_Enable(0x40|54);//使能同时喂第一次狗

模板代码配置了窗口时间30ms,超时时间50ms的窗口看门狗,所以在喂第一次狗后(代码最后一行),30ms之后、50ms之前要喂狗,否则会引起复位。

窗口看门狗喂狗则是调用WWDG_SetCounter(0x40|54);他既是使能函数,也是喂狗函数。

同样调用RCC_GetFlagStatus(RCC_FLAG_WWDGRST);查看是否由窗口看门狗引起复位

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sakabu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值