美文网首页我爱编程
运动控制器37:STM32的看门狗功能

运动控制器37:STM32的看门狗功能

作者: 吴松乾 | 来源:发表于2018-02-03 22:49 被阅读0次

    IWDG

    IWDG由LSI驱动,就算外部高速时钟失效也能正常工作,用于程序以外,需要一个独立,对时间精度要求不太高的场合。

    IWDG主要性能

    自由运行的递减计数器,看门狗激活以后,计数到0时产生复位

    IWDG功能描述

    IWDG_KR中写入OXCCCC后,看门狗启动,从OXFFF减到0时产生复位,写入OXAAAA进行重新加载。

    • 硬件看门狗,如果有硬件看门狗功能,上电复位以后,看门狗自动运行。
    • 寄存器的保护:重载寄存器的修改必须按照一个流程才可以进行设置。

    库函数

    void  IWDG_Enable (void) 
     // 使能
    FlagStatus  IWDG_GetFlagStatus (uint16_t IWDG_FLAG) 
     // 重载值和预分频设置是否完成
    void  IWDG_ReloadCounter (void) 
    void  IWDG_SetPrescaler (uint8_t IWDG_Prescaler) 
    void  IWDG_SetReload (uint16_t Reload) 
    void  IWDG_WriteAccessCmd (uint16_t IWDG_WriteAccess) 
    
    

    设置流程

    通常设置一个看门狗的流程如下:

    //设置看门狗的参数开关
     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    //设置分频
       IWDG_SetPrescaler(IWDG_Prescaler_32);
    //设置重载值
       IWDG_SetReload(LsiFreq/128);
    //打开计数
       IWDG_ReloadCounter();
    //使能看门狗,
       IWDG_Enable();
    

    窗口看门狗WWDG

    WDG1.png

    如上图,我们可以递减计数器,同时设置W[6..0]位,WWDG由PCLK1分频后进行驱动,如果T减少到W时,可以进行刷新一次,如果不刷新,到T减小到3F时将产生一个复位,同时T6位置1,相当于重新开始计数。
    那如果处于睡眠模式,时钟都没有了,该这么操作?我们在EWI中设置了一个中断,如果进入了睡眠模式,则自动喂狗,防止产生复位。

    所以用到的函数都很简单,如下:

    void  WWDG_ClearFlag (void) //清唤醒的FLAG
    void  WWDG_DeInit (void)   //
    void  WWDG_Enable (uint8_t Counter) 使能,并设置W
    void  WWDG_EnableIT (void)  //使能中断
    FlagStatus  WWDG_GetFlagStatus (void)  //FLAG状态,有无中断
    void  WWDG_SetCounter (uint8_t Counter)  //设置T值
    void  WWDG_SetPrescaler (uint32_t WWDG_Prescaler) //分频
    void  WWDG_SetWindowValue (uint8_t WindowValue)  //设置W值
    

    WWDG的配置如下:

     RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
     WWDG_SetPrescaler(WWDG_Prescaler_8);
      WWDG_SetWindowValue(80);
      WWDG_Enable(127);
     // ...
     //然后在一段程序以后,及时喂狗
      WWDG_SetCounter(127);
    
    

    相关文章

      网友评论

        本文标题:运动控制器37:STM32的看门狗功能

        本文链接:https://www.haomeiwen.com/subject/qtypzxtx.html