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的时钟频率看下面这个图。这里就不做详细讨论了,以后在说。

    这个只不过是自己的流水账,偶尔有一些心得,错误的地方概不负责
  • 相关阅读:
    [Leetcode] Regular Expression Matching
    [Leetcode] Edit Distance
    计算机科学论文写作3-表、图、例子和其他类似的元素的使用
    计算机科学论文写作2-搜寻、阅读和引用文献
    灰度图与彩图的双边滤波
    opencv6.1-imgproc图像处理模块之平滑与形态学操作
    opencv5-objdetect之级联分类器
    opencv4-highgui之视频的输入和输出以及滚动条
    计算机科学论文写作1-引言
    lecture11-hopfiled网络与玻尔兹曼机
  • 原文地址:https://www.cnblogs.com/ashitaka/p/4242498.html
Copyright © 2011-2022 走看看