×
单片机 > 单片机程序设计 > 详情

STM32 HAL库学习系列第11篇---定时器TIM---看门狗基本配置及使用

发布时间:2020-06-03 发布时间:
|

基本配置


使用cube配置溢出时间


记住准时喂狗


独立看门狗:


 /* IWDG 1s 超时溢出 */  

MX_IWDG_Init(IWDG_PRESCALER_64,625);  

/* 启动独立看门狗 */  

HAL_IWDG_Start(&hiwdg);   

LED1_ON;   

/* while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控   * 如果我们知道这部        

   分代码的执行时间,比如是50ms,那么我们可以设置独立看门狗的     * 溢出时间是60ms,比50ms多一点,

   如果要被监控的程序没有跑飞正常执行的话,那么     * 执行完毕之后就会执行喂狗的程序,如果程序跑飞

   了那程序就会超时,到达不了喂狗的程序     * 此时就会产生系统复位。但是也不排除程序跑飞了又跑回来

   了,刚好喂狗了,歪打正着。     * 所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必

   须在规定的窗口时间内喂狗。   */    

   

   while(1)                           

{   

/*  这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉 */

/*------------------------------------------------------------------------*/                

   if( KEY1_StateRead() == KEY_DOWN  )        

{            

   /*喂狗,如果不喂狗,系统则会复位,LD1则会灭一次,如果在1s              

   时间内准时喂狗的话,则LED1会常亮 */            

   HAL_IWDG_Refresh(&hiwdg);        

  }      

}

窗口看门狗


不同之处是:


1)独立看门狗没有中断,窗口看门狗有中断


2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制


3)独立看门狗只有下限,窗口看门狗又下限和上限


4)独立看门狗是12位递减的。窗口看门狗是7位递减的


5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR


 /* 初始化 WWDG */

  MX_WWDG_Init(0X7F, 0X5F, WWDG_PRESCALER_8);

  HAL_WWDG_Start(&hwwdg);//函数配置略微不同

 

  /* 窗口值我们在初始化的时候设置成0X5F,这个值不会改变 */

    wwdg_wr = WWDG->CFR & 0X7F;

 

    while(1)                       

    {   

     LED1_OFF;

    /*-----------------------------------------------------

         * 这部分应该写需要被WWDG监控的程序,这段程序运行的时间

         * 决定了窗口值应该设置成多大。

         * -----------------------------------------------------

        

         * 计时器值,初始化成最大0X7F,当开启WWDG时候,这个值会不断减小

         * 当计数器的值大于窗口值时喂狗的话,会复位,当计数器减少到0X40

         * 还没有喂狗的话就非常非常危险了,计数器再减一次到了0X3F时就复位

         * 所以要当计数器的值在窗口值和0X40之间的时候喂狗,其中0X40是固定的。

         */

    wwdg_tr = WWDG->CR & 0X7F;      

        if( wwdg_tr < wwdg_wr )

        {

            /* 喂狗,重新设置计数器的值为最大0X7F */

            HAL_WWDG_Refresh(&hwwdg,0X7F);

        }

    }




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘