STM32 独立看门狗和窗口看门狗 -HAL库

一.独立看门狗

1.环境配置

先看时钟树 看独立看门狗是由哪个时钟源来进行使能

明显能够看到是由LSI作为看门狗的时钟来源

 

由于外接晶振一般会比内部时钟源更加精确,所以我们这里的时钟源选用外部晶振的时钟

也就是我们下一步要配置RCC 

 

 配置看门狗的分频系数和重装载值  我这里通过公式得到时间周期是1s  具体读者可以自行进行计算       这里的一个主要注意点就是计数器是从上向下计数 的,也就是我们的重装载的值到0进行递减

 setup开始编码

2.编码注意点 

1.注意独立看门狗没有中断服务函数  只要窗口服务函数才有

2.喂狗函数需要引用iwdg.h 的头文件  否则无法调用函数

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;
}

 二、窗口看门狗

顾名思义,时间段是一个窗口,不能太早也不能太迟   太早喂狗或者是太迟喂狗都会产生复位信号,同时窗口看门狗允许中断的产生

我们可以在中断服务函数里面加入自己的服务函数,相比于独立看门狗更加灵活

基本原理就是有几个值 递减计数器 、窗口上限(重载值)、窗口下限、 

注意下窗口是定值 0x3f

总结:窗口看门狗有两种情况会产生复位

  1,喂狗时间大于窗口上限值

  2,计数器值从0x40减到0x3F

  如果启动看门狗并且允许中断,当递减计数器等于0x40时,会产生唤醒中断EWI,它可以用于喂狗避免WWDG复位

 

1.环境配置 

 上窗口的值是80    下然后不分配    计数器从127向下进行计数

使能中断       计数器到0x40将产生中断

 接着配置中断优先级等等

2.编码阶段 

 1.使能时钟,窗口看门狗不同于独立看门狗,是受APB1时钟控制,需要进行使能

__HAL_RCC_WWDG_CLK_ENABLE();

2.编写中断服务函数和回调函数处理逻辑 

void WWDG_IRQHandler(void)
{
  /* USER CODE BEGIN WWDG_IRQn 0 */

  /* USER CODE END WWDG_IRQn 0 */
  HAL_WWDG_IRQHandler(&hwwdg);
  /* USER CODE BEGIN WWDG_IRQn 1 */

  /* USER CODE END WWDG_IRQn 1 */
}

 

__weak void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(hwwdg);

  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_WWDG_EarlyWakeupCallback could be implemented in the user file
   */
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值