STM32学习笔记之独立看门狗(IWDG)的使用

 

     对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,可以简单看系统时钟章节关于外设时钟,看数据手册如下:

STM32学习笔记之独立看门狗(IWDG)的使用_第1张图片

 

看门狗由独立内部40K时钟驱动,所以不需要我们在初始化时钟配置寄存器。

 

STM32学习笔记之独立看门狗(IWDG)的使用_第2张图片

 

 

      

        读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_RLR两个寄存器的值,由于寄存器有写保护,根据数据手册可知:

 

STM32学习笔记之独立看门狗(IWDG)的使用_第3张图片

 

 

       

       所以在设置之前寄存器之前必须先对IWDG_KR(键寄存器)再写入0x5555,修改寄存器的值 。接下来看预分频寄存器:

 

STM32学习笔记之独立看门狗(IWDG)的使用_第4张图片

 

 

 

预分因子主要和看门狗的超时时间有关 看手册可知:

 

STM32学习笔记之独立看门狗(IWDG)的使用_第5张图片

 

 

 

(这里我没有深究最大值的用处),接着我们看自动装载寄存器:

 

STM32学习笔记之独立看门狗(IWDG)的使用_第6张图片

 

设置IWDG_PR和IWDG_RLR的初值。

     我们计算一下看门狗的喂狗时间(看门狗溢出时间)计算公式:

                                      Tout=((4*2^prer)*rlr)/40

  其中Tout就是看门狗溢出时间(单位ms),prer是看门狗时钟预分频值       (IWDG_PR值),范围为0~7,rlr位看门狗重载值(IWDG_RLR)。

 比如我们设置prer为4,  rlr的值为625,我们就可以计算得到       Tout=64*625/40=1000ms,这样,看门狗的溢出时间就是1S,只要在这一秒钟   内,有一次吸入0XAAAA到IWDG_KR,就不会导致看门狗复位。

 

所以初始化函数如下:

 

void IWDG_Init(4,625)

{

     IWDG->KR=0X5555;      //解除寄存器保护        

      IWDG->PR=prer;         // 写入初始化分频值

      IWDG->RLR=rlr;            // 写入自动装载值

      IWDG->KR=0XAAAA;     //开启寄存器保护

      IWDG->KR=0XCCCC;       //启动看门狗

}

 

初始化完成后  看门狗开始逐渐递减计数到0000并复位 ,所以在复位之前要不断喂狗,

即不断重新加载数据到IWDG_RLR中防止复位

 

喂狗函数如下:

 

void IWDG_Feed(void)

{

    IWDG->KR=0XAAAA;                                  

}

 

至此基本的独立看门狗的配置完成 初始化后 在适当地方调用喂狗程序即可。

你可能感兴趣的:(STM32学习笔记)