独立看门狗(iwdg)
一、简介:
其用于检测和解决由软件错误导致的故障,当计数器达到设定的超时时间值时会产生系统复位。其特点为:1、其运用的时钟是由独立的RC振荡器产生的,因此可以在待机和停止模式下运行。2、在看门狗激活后,如果递减计数器的值达到0X000时会产生系统复位。
二、功能简述:
通过向关键字寄存器(IWDG_KR)写入0XCCCC启动独立看门狗,计数器会从复位值0XFFF,递减计数,当计数器的值达到0X000时,产生复位信号。在计数值还未达到0X000时,向IWDG_KR寄存器写入0XAAAA,IWDG_RLR寄存器的值就会重装载到计时器,从而可以避免产生复位(俗称喂狗)。从而可以看出,当软件运行出问题时,在一定的时间内无法做到喂狗的功能时,就会产生系统复位,实现其对软件故障的检测和解决。
三、相关寄存器:
1、关键字寄存器:
关键字寄存器的有效位为位0到位15,位16到位31保留,前边已经介绍过通过向该寄存器中写入0XAAAA,可以使IWDG_RLR寄存器中的值重装载到计数器,避免系统复位。由于IWDG_PR(预分频器寄存器)和IWDG_RLR(重载寄存器)是具有写保护的寄存器,在该寄存器中写入键值0X5555可使能对IWDG_PR和IWDG_RLR的访问。
2、预分频器寄存器:
该寄存器的有效位为位0到位2,其他位保留,通过设置PR[2:0]的值,设定相应的分频系数。
3、重载寄存器:
上面已经提到该寄存器中的值会重装载到计数器中,计数器将会从该值递减计数,由此可见:该寄存器中的值和预分频器寄存器中的值共同决定超时周期。
4、状态寄存器:
该寄存器只有位0和位1为有效位,位0(RVU)为预分频器寄存器的值更新标志位,位1(PVU)为计数器重载值更新标志。
四、相关代码分析:
通过相关库函数对独立看门狗的配置还是相对简单的,其中初始化的过程如下:
- IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写
- IWDG_SetPrescaler(prer); //设置IWDG分频系数
- IWDG_SetReload(rlr); //设置IWDG装载值
- IWDG_ReloadCounter(); //reload(喂狗)
- IWDG_Enable(); //使能看门狗
窗口看门狗(wwdg)
一、简介:
对比独立看门狗来看,所谓的窗口看门狗就是设定了一个窗口值(上限和下限值)。当递减计数器值小于0X40(窗口下限值)时产生复位。在设置的窗口外重载递减计数器也会执行复位。窗口看门狗可以设置提前唤醒中断,当递减计数器等于0X40时会触发该中断,可以在该中断中做喂狗等相关操作。
二、框图:
窗口看门狗的框图如下:对比的框图来看下边的相关介绍!
三、工作过程:
通过设置WWDG_CR寄存器的WDGA位可以使能看门狗,递减计数器为控制寄存器的低7位,其中当第7位(即T6)由1变为0(即由0X40递减为0X3F)时就会复位,在配置寄存器低7位存放看门狗上限值,计数器中的值与上限值比较,如果在上限值之上喂狗也会执行复位,这也是窗口看门狗与独立看门狗的不同之处。由此可见,喂狗的时间只能在上限和下限值之间,否则就会执行复位操作。
四、相关寄存器:
1、控制寄存器(WWDG_CR):
前面已经介绍过了,其中有效位为位0到位7,位7(WDGA)为看门狗激活位,位0到位6做计数器。
2、配置寄存器(WWDG_CFR):
该寄存器的有效位为位0到位9,位0到位6前面已经介绍过存放的是计数器的上限值,位7和位8用来设置定时器时基,从而选定相应的时钟分频器。其中位9就是上边介绍到的提前唤醒中断(EWI)。
3、状态寄存器(WWDG_SR):
该寄存器中的有效位只有位0,用来做提前唤醒中断的标志位(EWIF)。