STM32F4独立看门狗

        IWDG:(Indpendent Watch Dog)独立看门狗,本身是一个定时器(TIM,SysTick)类似,当软件程序故障导致程序跑飞,这个时候就要及时复位芯片,独立看门狗递减计数,计数到0没有执行一个喂狗操作,这个时候就会导致芯片复位。独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。

        当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位 值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号(IWDG 复位)。 任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中,IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位。

        IWDG_PR 和 IWDG_RLR 寄存器具有写访问保护。若要修改寄存器,必须首先对 IWDG_KR 寄存器写入代码 0x5555。而写入其他值则会破坏该序列,从而使寄存器访问保护再次生效。这意味着重装载操作(即写入 0xAAAA)也会启动写保护功能。

//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//rlr:自动重装载值,0~0XFFF.
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void iwdg_init(u8 prer,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写
	
	IWDG_SetPrescaler(prer); //设置IWDG分频系数

	IWDG_SetReload(rlr);   //设置IWDG装载值

	IWDG_ReloadCounter(); //reload
	
	IWDG_Enable();       //使能看门狗
}

//喂独立看门狗
void iwdg_feed(void)
{
	IWDG_ReloadCounter();//reload
}

 预分频因子=4*2^prer

溢出时间计算:

Tout=((4×2^prer)×rlr)/32

prer是预分频寄存器的值,这里(4×2^prer)就是真正的预分频系数,32/预分频系数就是它的时钟,频率,频率的倒数乘以rlr就是它的溢出时间。也就是说最大时间就是rlr为0xFFF时公式的值,同理最短时间就是一个时钟周期的时间也就是当rlr为1时公式的值。

Tout=rlr*看门狗时钟周期=rlr*(1/freq)=rlr*(1/(32*预分频系数))
=rlr*(1/(32/预分频因子))
=rlr*(1/(32/(4*2^prer)))
=rlr*((2^(prer+2))/32)
=(4*2^prer)*rlr / 32
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GQli2048

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

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

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

打赏作者

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

抵扣说明:

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

余额充值