STM32-IWDG独立看门狗实验[寄存器版]

基本介绍

独立看门狗(IWDG)是一种硬件计时器,用于监控MCU运行的状态。在MCU发生宕机,故障等问题时,对MCU进行重启。

其工作原理是通过定时器进行递减计数,当计数器递减到末尾0X00时,系统将发生复位。

在系统正常运行时,软件需要及时喂狗,即定期重置看门狗定时器的计数值,否则将发生看门狗复位,对MCU进行重置。

时钟

STM32的独立看门狗(IWDG)内部拥有专门的低速时钟进行驱动。因此,当主时钟发生故障的时候,独立看门狗仍然有效。

不同型号STM32单片机中,该时钟的频率通常存在一定差异,如在F103系列MCU中,该RC时钟为40KHZ:

而在G0系列MCU中,该RC时钟为32KHZ:

使用方法

这里以stm32F103为例:

键寄存器IWDG_KR中写入0XCCCC,开始启用看门狗。此时计数器将开始从0XFFF开始递减计数,当计数器递减为0的时候,将产生复位。

在递减过程中,只要在计数器未减为0的任意时刻向KR中写入0XAAAA,MCU就会将重装载寄存器IWDG_RLR中的值加载到计数器中,重新开始计数,避免产生看门狗复位

IWDG_PR和IWDG_RLR寄存器是默认上锁无法访问的,因此,要修改这两个寄存器的值,就需要先解锁,向IWDG_KR寄存器中写入0X5555进行解锁。

下面介绍一下IWDG_PR和IWDG_RLR寄存器:

IWDG_PR寄存器用于配置看门狗的分频系数,低三位有效,在F103系列中,其预分频系数最低为4,最高为256

IWDG_RLR寄存器用于设置重装载的值,向KR中写入0XAAAA时,MCU就会将这里面的值放入寄存器中进行再次递减计数

因此,只需要对以上三个寄存器进行配置,就能够启用独立看门狗功能:

1.向 IWDG_KR 写入 0X5555,解锁IWDG_PR 和 IWDG_RLR寄存器

2.配置IWDG_PR分配系数和IWDG_RLR重装载值

3.向 IWDG_KR 写入 0XAAAA,让MCU将重装载值放入计数器

4.向 IWDG_KR 写入 0XCCCC启用看门狗

重装载值和分配系数决定了看门狗每次复位的溢出时间,也就是超出这段时间未写入0XAAAA,看门狗将进行复位。其计算公式如下:

Tout:看门狗溢出时间ms

prer:看门狗预分频值(IWDG_PR 值)

rlr:看门狗重装载值(IWDG_RLR值)

假设prer=4,rlr=625,Tout=((4*2^4)*625)/40=1000ms=1s

既溢出时间为1s,在1s内没有写入0xAAAA到IWDG_KR,看门狗将进行复位。

注意:40khz并非准确时钟,为MCU提供的一个大致时钟,因此这里的1s只是大概范围,喂狗的时间不能太晚!

代码

配置:

根据以上步骤,这里提供了一个看门狗配置的代码,原理如上所述。

void IWDG_INIT(u8 pr,u16 rlr)
{
	IWDG->KR=0X5555;//使能PR和RLR寄存器访问
	IWDG->PR=pr;//分频数(0-7)
	IWDG->RLR=rlr;//重装载值
	IWDG->KR=0XAAAA;//喂狗
	IWDG->KR=0XCCCC;//启动看门狗
}

喂狗:

对KR寄存器写入0XAAAA就可进行喂狗。

void IWDG_Feed(void)
{
	IWDG->KR=0XAAAA;//喂狗
}

当配置完成独立看门狗后,在需要的代码块里插入喂狗代码,即可实现独立看门狗功能,若此时MCU发生宕机问题,看门狗计数器减为0时仍未写入喂狗代码,则MCU将自动进行复位,防止宕机卡死。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值