zoukankan      html  css  js  c++  java
  • STM8s窗口看门狗

      看看窗口看门狗的框图

    从图里看出产生复位信号有2个方式:

    1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号;

    2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号;

    解释:

      WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了。硬件看门狗在OPTION BYTES里设置。

    WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的。这个分频值固定是12288,根据这个可以计算看门狗的延时时间。

    WDGWR是窗口寄存器,最高位保留,低六位保存的是窗口值,从图里的逻辑图发现comparator=1 when T6:0>W6:0,意思是当WDGCR计数值大于WDGCR

    且此时Write WDGCR(这个意思是软件刷新计数器的值)就会产生一个复位信号复位stm8s。当然我们不想这个事情发送。所以在写程序的时候不能在计时器的值

    大于窗口寄存器设定值的时候刷新计数器的值。所以在设定这个窗口寄存器数值的时候只能设定在0x7f~0xC0之间。

    程序:

      知道窗口电子狗怎么工作那么编程就好说了,三件事:

    1  设定窗口寄存器值,开启看门狗(WDGA=1),这是初始化看门狗

    2  判断看门狗计数值是否小于窗口值,是就喂狗

    代码如下:

      用stm8s的官方库。

      WWDG_Init(0x7f, 0x50);  //初始化

      CounterValue = (u8)WWDG->CR & 0x7F;
      if(CounterValue < WINDOW){
        WWDG_SetCounter(COUNTERINIT); //喂狗
      }

    解释一下WWDG_Init这个函数体的内容是:

    void WWDG_Init(uint8_t Counter, uint8_t WindowValue)
    {
    /* Check the parameters */
      assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));

      WWDG->WR = WWDG_WR_RESET_VALUE;
      WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter);
      WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));
    }

    WWDG_SetCounter的源码是:

    void WWDG_SetCounter(uint8_t Counter)
    {

      /* Check the parameters */
      assert_param(IS_WWDG_COUNTERVALUE_OK(Counter));

      /* Write to T[6:0] bits to configure the counter value, no need to do
      a read-modify-write; writing a 0 to WDGA bit does nothing */
      WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK);

    }

    assert_param是参数检查,其他没啥好说的。搞清楚寄存器作用就行了。其他问题暂时想不起来。哦,对了延时时间看下图:

    这里说得比较清楚如果stm8用的是内部HSI 16M晶振切fCPU的分频也是0那么窗口看门狗的时钟频率就是fCPU/12288,那么一个计时周期就是12288/fCPU就是0.768ms

    如果设定的窗口值是0x50,那么从0x7F数下来一算就知道了。0.768*(0x7f-0x50)。要注意这里fCPU不一定是16m(CPUDIV分频系数可以改变),如果要搞清楚stm8的时钟频率看下面这个图。这里就不做详细讨论了,以后在说。

    这个只不过是自己的流水账,偶尔有一些心得,错误的地方概不负责
  • 相关阅读:
    springboot滚动分页展示列表(类似layui瀑布流效果)
    使用DOS命令运行JAVA项目
    MarkDown基础语法
    Springboot结构梳理
    VO层
    常用注解
    Java注解和反射笔记
    Java网络编程
    原理篇—sql注入5:pikachu靶机练习
    原理篇——sql注入2:联合查询注入
  • 原文地址:https://www.cnblogs.com/ashitaka/p/4242498.html
Copyright © 2011-2022 走看看