单片机学习小组
直播中

张敏

7年用户 1567经验值
私信 关注

窗口看门狗WWDG该怎样去使用呢

窗口看门狗WWDG该怎样去使用呢?
怎样通过寄存器操作初始化窗口看门狗WWDG呢?

回帖(1)

李子崴

2022-1-17 10:02:59
0、窗口看门狗的使用




  • 窗口看门狗基于CPU时钟fCPU运行,窗口看门狗实现基于一个递减计数器。
  • 若fCPU运行正常,当主程序发生错误时,无法重置看门狗计数器,窗口看门狗将会产生复位标志位并重启。
  • 由于窗口看门狗基于fCPU运行,当MCU进入停机模式或活跃停机模式时,窗口看门狗计数将会停止。
  • 程序需在递减计数器的T6位变为0之前刷新递减计数器,防止看门狗威廉希尔官方网站 产生复位信号;同时,程序需要避免在7位的递减计数器数值达到窗口寄存器数值之前刷新递减计数器,否则看门狗威廉希尔官方网站 将产生复位信号。
  • 窗口看门狗的递减计数器是自由运行计数器,即使未开启看门,它仍然不断地递减计数。当看起看门狗时,必须设置T6位以避免立刻产生复位

  1、与窗口看门狗相关的选项字节

WWDG_HW:窗口看门狗激活方式,默认值为0。
0x4805: OPT3[1];
0x4806: NOPT3[1];


  • 当WWDG_HW选项字节为0时,代表选择了软件看门狗,在系统复位后看门狗处于关闭状态。窗口看门狗需要通过设置WDGCR寄存器中的WDGA位开启窗口看门狗,此后在下次复位之前将不能关闭看门狗。
  • 当WWDG_HW选项字节为1时,代表选择了硬件看门狗,看门狗将始终开启,而WDGA位将不起作用。

WWDG_HALT:当芯片进入停机模式时窗口看门狗的复位动作,默认值位0。
0x4805: OPT3[0];
0x4806: NOPT3[0];


  • 当WWDG_HALT选项字节为0时,如果窗口看门狗使能,当芯片进入停机模式时不产生复位。在进入停机模式时
  • 当WWDG_HALT选项字节为1时,如果窗口看门狗使能,当芯片进入停机模式时会产生复位。

  2、窗口看门狗时序图




  • 当CPU时钟fCPU为16MHz时,看门狗计数器(CNT)中的6位数值,与以毫秒为单位的超时时间线性关系表可见下图。

  • 已知窗口看门狗每过(大约)12288个fCPU周期递减一次。看门狗计数器单步所需时长计算公式为:
    step = 12288/fCPU
    例如,fCPU = 8Mhz时,
    step = 12288/8000000 = 0.001536s = 1.536ms,即一步为1.536ms
  • WWDG_CR寄存器的T[6:0]由0x7F递减到0x40共63步。窗口看门狗的复位时间上限为step × 64。
  • 若重置看门狗计数器时,WWDG_CR的T[6:0]位大于WWDG_WR[6:0],看门狗将产生复位信号。窗口看门狗的时序图如下图。


  3、窗口看门狗的配置

窗口看门狗的时钟由CPU时钟fCPU提供,因此在使用窗口看门狗前,请配置合适的CPU时钟。
3.1、 通过官方库“stm8s_wwdg”提供的函数初始化WWDG


/**
  * @brief WWDG Initialization Function
  * @param None
  * @retval None
  */
static void _WWDG_Init(void)
{
  /* WWDG 配置: WWDG 的时钟为 SYSCLK = fCPU */
  /* WWDG 的超时时间为 maxSetCounterTime */
  /* Watchdog 窗口 = (COUNTER_INIT - 63) * 1 step
                   = 64 * (12288 / fCPU)
                     = maxSetCounterTime s
  */
  /* 禁止复位窗口 = (COUNTER_INIT - WINDOW_VALUE) * 1 step
                        =  (COUNTER_INIT - WINDOW_VALUE) * (12288 / fCPU)
                        =  minSetCounterTime s
   */
  /* 禁止复位窗口范围为 0.0 ms 到 minSetCounterTime ms
  Watchdog 窗口范围为 minSetCounterTime ms to maxSetCounterTime ms
  如果在禁止复位窗口进行复位,将产生一个复位信号。
  如果在Watchdog 窗口范围进行复位,将不产生复位信号。
  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */
  WWDG_Init(COUNTER_INIT, WINDOW_VALUE);
}


例子(获得最大范围窗口范围):




/**
  * @brief WWDG Initialization Function
  * @param None
  * @retval None
  */
static void _WWDG_Init(void)
{
  /* WWDG 配置: WWDG 的时钟为 SYSCLK = fCPU */
  /* WWDG 的超时时间为 maxSetCounterTime */
  /* Watchdog 窗口 = (Counter- 63) * 1 step
                   = 64 * (12288 / fCPU)
                     = maxSetCounterTime s
  */
  /* 禁止复位窗口 = (Counter- WindowValue) * 1 step
                        =  (Counter- WindowValue) * (12288 / fCPU)
                        =  minSetCounterTime s
   */
  /* 禁止复位窗口范围为 0.0 ms 到 minSetCounterTime ms
  Watchdog 窗口范围为 minSetCounterTime ms to maxSetCounterTime ms
  如果在禁止复位窗口进行复位,将产生一个复位信号。
  如果在Watchdog 窗口范围进行复位,将不产生复位信号。
  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */


  // 复位WWDG的WR寄存器的值,防止使能后,窗口看门狗立即产生复位信号。
  WWDG->WR = 0x7F;


  // 使能窗口看门狗,并配置计数器值。
  WWDG->CR = (uint8_t)((uint8_t)(0x80| 0x40) | (uint8_t)Counter);       


  // 配置窗口看门狗窗口值。
  WWDG->WR = (uint8_t)((uint8_t)(~0x80) & (uint8_t)(0x40| WindowValue));
}

3.2、 通过寄存器操作初始化WWDG

/**
  * @brief WWDG Initialization Function
  * @param None
  * @retval None
  */
static void _WWDG_Init(void)
{
  /* WWDG 配置: WWDG 的时钟为 SYSCLK = fCPU */
  /* WWDG 的超时时间为 maxSetCounterTime */
  /* Watchdog 窗口 = (Counter- 63) * 1 step
                   = 64 * (12288 / fCPU)
                     = maxSetCounterTime s
  */
  /* 禁止复位窗口 = (Counter- WindowValue) * 1 step
                        =  (Counter- WindowValue) * (12288 / fCPU)
                        =  minSetCounterTime s
   */
  /* 禁止复位窗口范围为 0.0 ms 到 minSetCounterTime ms
  Watchdog 窗口范围为 minSetCounterTime ms to maxSetCounterTime ms
  如果在禁止复位窗口进行复位,将产生一个复位信号。
  如果在Watchdog 窗口范围进行复位,将不产生复位信号。
  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */


  // 复位WWDG的WR寄存器的值,防止使能后,窗口看门狗立即产生复位信号。
  WWDG->WR = 0x7F;


  // 使能窗口看门狗,并配置计数器值。
  WWDG->CR = (uint8_t)((uint8_t)(0x80| 0x40) | (uint8_t)Counter);       


  // 配置窗口看门狗窗口值。
  WWDG->WR = (uint8_t)((uint8_t)(~0x80) & (uint8_t)(0x40| WindowValue));
}


请确保窗口看门狗的窗口值WindowValue <= 0x7F,否则WWDG->WR会溢出。
  4、WWDG寄存器简介




  • CR控制寄存器

  • WR窗口寄存器

举报

更多回帖

发帖
×
20
完善资料,
赚取积分