STM32L051之IWDG使用及注意事项

news/2024/7/7 23:51:58

IWDG使用内部时钟LSI,频率约为37KHz。基本框图如下所示:

 内部包含一个8位的分频器,支持4、8、16、32、64、128、256分频。

内部包含一个12位的向下计数器。

假如时钟频率为32K,那么,看门狗的最大计数时间为:2^(8+12)/32k=2^5=32秒。

编程的流程:

 窗口机制:

 注意事项:

 相关代码:

HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)
{
  uint32_t tickstart;

  /* Check the IWDG handle allocation */
  if(hiwdg == NULL)
  {
    return HAL_ERROR;
  }

  /* Check the parameters */
  assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance));
  assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler));
  assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload));
  assert_param(IS_IWDG_WINDOW(hiwdg->Init.Window));

  /* Enable IWDG. LSI is turned on automaticaly */
  __HAL_IWDG_START(hiwdg);

  /* Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers by writing
  0x5555 in KR */
  IWDG_ENABLE_WRITE_ACCESS(hiwdg);

  /* Write to IWDG registers the Prescaler & Reload values to work with */
  hiwdg->Instance->PR = hiwdg->Init.Prescaler;
  hiwdg->Instance->RLR = hiwdg->Init.Reload;

  /* Check pending flag, if previous update not done, return timeout */
  tickstart = HAL_GetTick();

   /* Wait for register to be updated */
  while(hiwdg->Instance->SR != RESET)
  {
    if((HAL_GetTick() - tickstart ) > HAL_IWDG_DEFAULT_TIMEOUT)
    {
      return HAL_TIMEOUT;
    }
  }

  /* If window parameter is different than current value, modify window 
  register */
  if(hiwdg->Instance->WINR != hiwdg->Init.Window)
  {
    /* Write to IWDG WINR the IWDG_Window value to compare with. In any case,
    even if window feature is disabled, Watchdog will be reloaded by writing 
    windows register */
    hiwdg->Instance->WINR = hiwdg->Init.Window;
  }
  else
  {
    /* Reload IWDG counter with value defined in the reload register */
    __HAL_IWDG_RELOAD_COUNTER(hiwdg);
  }

  /* Return function status */
  return HAL_OK;
}

/**
  * @}
  */


/** @addtogroup IWDG_Exported_Functions_Group2
 *  @brief   IO operation functions
 *
@verbatim
 ===============================================================================
                      ##### IO operation functions #####
 ===============================================================================
 [..]  This section provides functions allowing to:
      (+) Refresh the IWDG.

@endverbatim
  * @{
  */


/**
  * @brief  Refresh the IWDG.
  * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains
  *                the configuration information for the specified IWDG module.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{
  /* Reload IWDG counter with value defined in the reload register */
  __HAL_IWDG_RELOAD_COUNTER(hiwdg);

  /* Return function status */
  return HAL_OK;
}
 

特别说明:

1.启动看门狗会导致LSI时钟自动开启。

2.窗口寄存器就是用来限制看门狗的计数器初始值,这个初始值必须小于窗口寄存器的值。

3.LSI的频率极不稳定,范围在20-60KHz,喂狗时最好开启一个使用LSI时钟作为基准的定时器来处理。

4.寄存器写保护打开后,喂狗时就会自动关闭。

5.看门狗启动后就不能再程序中关闭。

6.调试时看门狗可以冻结:调用__HAL_DBGMCU_FREEZE_IWDG()。

7.看门狗可以通过编程选项字节进行启动,IWDG_RLR的初始值为0xFFF,分频寄存器的初始值为0x00,4分频,窗口寄存器的值为0xFFF。


http://lihuaxi.xjx100.cn/news/109684.html

相关文章

Safari Extension 扩展插件中关于权限的二三事(例如设置权限、权限类型等)

Safari Extension 扩展插件的权限相关的内容大致分为下面几个方面: 用户要掌控扩展(Users are in control) Safari Extension 扩展插件是要在用户控制下的,不能想干嘛就干嘛,因此扩展只有在用户进行互动之后才会运行…

linux内核中断实践4:软中断

前言 本次实验也是在定时器处理函数中进行的,修改了Interrupt.h (include\linux)和文件Softirq.c (kernel)文件,用来增加新的软中断。 实验结果可靠,没问题。 如果使用硬件中断的话需要配置设备树,然后从设备树获取irq号&…

Linux LCD屏幕驱动调参实操

Linux LCD屏幕驱动调参实操 初探 Linux下的 LCD 驱动文中提到过, IMX6ULL的 eLCDIF接口驱动程序已经有半导体厂家NXP编写好了,并且不同分辨率LCD屏的eLCDIF接口驱动代码都是一样的,因此LCD驱动部分无需修改。只需要根据所使用的LCD来调整设备…

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下 1. 下载RocketMQ5.0 首先我们去官网将RocketMQ5.0的版本下载下来。 $ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip 复制代码 下载完成后解压到…

React路由动画切换

目录 1.下载 2.配置 3.引入css 4.结合animate库 1.下载 cnpm install react-transition-group --save 2.配置 在路由配置文件/src/App.js文件下中导入动画组件 引入 import {TransitionGroup, CSSTransition} from react-transition-group 在路由组件模板中&#xff…

字节跳动后端面经(16)

redis主从是怎么做的 redis里面的字符串底层是什么结构 redis里的整型? Redis的跳表 缓存雪崩,缓存击穿,缓存穿透 mysql范围查询是怎么实现的? 什么是共享锁? 联合索引是什么?为什么会索引失效?…

为什么企业们更偏好使用华为云CDN?

互联网已经成为我们生活的基础,我们的生活离开不了服务器,数据库,企业更离不开,我们现在只要想到吃穿住喝,就会马上想到各种app,先在软件上游览一番,然后选择自己心仪的产品或商品下单&#xff…

GBase8s SYSBldRelease 函数

从连接到支持显式事务日志记录的 GBase 8s 数据库的会话中,可以通过发出调用内置 SYSBldPrepare( ) 的 SQL 函数注册或注销 DataBlade 模块。另一个内置函数,SYSBldRelease( ),返回本地数据库中 SYSBldPrepare( ) 函数的版本字符串。 通过 SQ…