• 独立看门狗及其实现的热启动


         独立看门狗的作用是检测出程序的跑飞,并使系统复位,重新开始工作。比如系统受到干扰,程序指针跑向了其他区,从而导致正常的程序逻辑无法执行,没有在规定时间内喂狗,系统会产生复位,进行一次热启动,单片机开始重新工作。

        当然独立看门狗只能检测出程序跑到其他区的问题,或者跑到当前逻辑里,恰好也在喂狗时间内,执行了喂狗代码,这样就无法区分了,而其实程序已经出错。在这种应用场景下,就需要窗口看门狗了,用窗口看门狗可以记录某一段代码执行的时间,而避免了上述情况。

        现在分析一下独立看门狗的实现。

        STM32F103的时钟树如下图1,独立看门狗是取自LSI,而LSI频率为40KHz的RC振荡器。由时钟树可知,看门狗时钟是独立于系统的主时钟的,即使使用的外部时钟初始化失败时,看门狗也能正常工作。其次就是精度问题,RC振荡器,必然是只能用在对时间精度要求较低的应用场合。

                                                                         图1

    独立看门狗模块如下图2:

                                                                                                 图2 

    独立看门狗超时时间表如下图3:

                                                                               图3

      独立看门狗配置代码如下:

    void IWDG_Configuration()    
    { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    //使能写下列各寄存器 IWDG_SetPrescaler(IWDG_Prescaler_16); //设置时钟分频系数,即40K/16 = 2.5K, 即1T = 0.4ms IWDG_SetReload(1000); //设置重载计数值,t = 1000*0.4ms = 0.4s IWDG_ReloadCounter(); //重载寄存器装入重载值,即喂狗 IWDG_Enable(); }

      独立看门狗喂狗代码如下:

    IWDG_ReloadCounter();                         //重载计数值,即喂狗

      当系统接收到新参数需要重新开机工作,或者IAP之后需要重新工作时,就要用到热启动,有两种方式:软件复位和看门狗复位。当系统复位后,看门狗相关寄存器也被清零,即再开机后看门狗是不工作的。代码如下:

    IWDG_Configuration()                         //配置并开启看门狗
    while(1);                                    //等待看门狗重启
  • 相关阅读:
    一个MMORPG的常规技能系统
    as3.2版本中中jar生成方法
    lua中的weak table
    lua中使用table实现类和继承
    Javascript-设计模式_代理模式
    Javascript-设计模式_职责链模式
    Javascript-设计模式_策略模式
    前端安全第四期
    前端安全第三期
    前端安全第二期
  • 原文地址:https://www.cnblogs.com/xyelectric/p/9115167.html
Copyright © 2020-2023  润新知