STM32中独立看门狗的配置

本文介绍了STM32独立看门狗定时器(IWDG)的初始化设置,包括使用LL库配置时钟、重置、预分频器和重装载值等。通过计算,确定了喂狗时间和超时时间为2秒。看门狗的喂食函数需在合适间隔执行,以防设备复位。
摘要由CSDN通过智能技术生成

我自己使用的是独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动。主要自己查手册看LSI是多少就是多少。

LL库中的配置:

void MX_IWDG_Init(void)
{  
  /* Enable APB0 indipendent Watchdog peripherals clock */
  LL_APB0_EnableClock(LL_APB0_PERIPH_WDG);
  
  /* Force WDG peripheral reset */
  LL_APB0_ForceReset(LL_APB0_PERIPH_WDG);
  LL_APB0_ReleaseReset(LL_APB0_PERIPH_WDG);
  
  /* Check if WDG Reset Release flag interrupt occurred or not */
  while(LL_RCC_IsActiveFlag_WDGRSTREL() == 0)
  {
  }
    
  LL_IWDG_Enable(IWDG);
  LL_IWDG_EnableWriteAccess(IWDG);
  LL_IWDG_SetPrescaler(IWDG, LL_IWDG_PRESCALER_16);
  LL_IWDG_SetWindow(IWDG, 0xFFF);
  LL_IWDG_SetReloadCounter(IWDG, 0xFFF);
  while (LL_IWDG_IsReady(IWDG) != 1)
  {
  }
  
  LL_IWDG_ReloadCounter(IWDG);
}

void Iwdg_FeedDog(void)
{
    LL_IWDG_ReloadCounter(IWDG);
}

看门狗有俩个时间,一个喂狗时间,和一个超时时间

喂狗时间就是看把函数void Iwdg_FeedDog(void)放在某个一段时间执行一次的位置,比如放在500MS执行一次的位置,,这个由自己判断

超时时间:

Tout = (( 4 × 2 ^ prer )  × rlr )  / 32Khz;

其中 Tout 为看门狗溢出时间(单位为 s);

prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;但其实不用管前面,直接算整体:(4×2^prer)整体为实际预分频值,预分频值可取值为4/8/16/32/64/128/256。

比如我选的LL_IWDG_PRESCALER_16,就是16分频,直接(4×2^prer) = 16;

rlr 为看门狗的重装载值(IWDG_RLR 的值);

我选的rlr = 0xFFF,就是4095;

所以最后算(16 * (4095 + 1))/32 = 2.084;

就约为2秒,超时时间为2秒,也就是2秒内没喂狗就进行复位操作。

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮若于心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值