当前位置: 首页 > news >正文

STM32中独立看门狗和窗口看门狗的使用方法

独立看门狗(Independent Watchdog,IWDG)和窗口看门狗(Window Watchdog,WWDG)是STM32微控制器中提供的两种看门狗定时器。看门狗定时器是一种硬件计时器,用于监视系统的运行状态,并在系统出现故障或崩溃时执行相应的操作。下面,我将分别介绍STM32中独立看门狗和窗口看门狗的使用方法。

1. 独立看门狗(IWDG)的使用方法
独立看门狗是一个简单的看门狗定时器,它基于硬件提供的时钟,独立于系统时钟。
主要用于监视系统中断的处理时间,确保系统在正常工作时定期喂狗,从而避免系统崩溃或卡死。以下是使用IWDG的基本步骤:

步骤1:配置看门狗时钟
为了使用IWDG,首先需要配置看门狗时钟。通过RCC寄存器设置,可以选择不同的时钟源和分频系数。

步骤2:初始化并启动IWDG
通过IWDG寄存器的设置,可以配置独立看门狗的溢出时间和预分频器。首先,需要将IWDG->KR寄存器设置为IWDG_KEY_ENABLE,以使能对IWDG寄存器的写操作。然后,配置IWDG->PR寄存器设置预分频器,IWDG->RLR寄存器设置溢出时间。最后,将IWDG->KR寄存器设置为IWDG_KEY_RELOAD,以重新加载计数器,并开始看门狗计时。

步骤3:喂狗
在系统正常工作期间,需要定期喂狗以防止独立看门狗溢出。通过执行IWDG->KR寄存器的写入操作,将其设置为IWDG_KEY_RELOAD,来重新加载计数器。

下面是一个简单的示例代码,演示了如何使用独立看门狗:

```c
#include "stm32f4xx.h"void IWDG_Configuration(void)
{// 步骤1:配置看门狗时钟RCC_APB1PeriphResetCmd(RCC_APB1Periph_IWDG, ENABLE);RCC_LSICmd(ENABLE);while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);// 设置IWDG预分频器和溢出时间IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_256);  // 预分频系数为256IWDG_SetReload(0xFFF);  // 溢出时间为0xfff * (4/LSI)秒// 启动独立看门狗IWDG_ReloadCounter();IWDG_Enable();
}int main(void)
{// 系统初始化和其他配置// IWDG配置IWDG_Configuration();while (1){// 系统正常工作// 定期喂狗IWDG_ReloadCounter();}
}
```

2. 窗口看门狗(WWDG)的使用方法
窗口看门狗是一种更高级的看门狗定时器,它可以根据设置的窗口值和计数器值来判断系统的工作状态。要确保系统正常工作,计数器的值必须在窗口范围内。以下是使用WWDG的基本步骤:

步骤1:配置看门狗时钟
与独立看门狗类似,需要配置看门狗时钟。通过RCC寄存器设置,可以选择不同的时钟源和分频系数。

步骤2:初始化并启动WWDG
通过WWDG寄存器的设置,可以配置窗口看门狗的窗口值和计数器值。首先,需要将WWDG->CFR寄存器设置为WWDG_CFR_WDGTB和WWDG_CFR_W窗口值和计数器正常工作时的设置。然后,将WWDG->CR寄存器设置为WWDG_CR_T设置计数器值。最后,通过执行WWDG->CR寄存器的写入操作,将其设置为WWDG_CR_WDGA,以启动窗口看门狗。

步骤3:喂狗
在系统正常工作期间,同样需要定期喂狗。通过执行WWDG->CR寄存器的写入操作,将其设置为WWDG_CR_WDGA,以确保计数器值在窗口范围内。

以下是一个简单的示例代码,演示了如何使用窗口看门狗:

```c
#include "stm32f4xx.h"void WWDG_Configuration(void)
{// 步骤1:配置看门狗时钟RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);// 设置窗口看门狗的窗口值和计数器值WWDG_SetPrescaler(WWDG_Prescaler_8);  // 预分频系数为8WWDG_SetWindowValue(0x4F);  // 窗口值为0x4F,计数器范围为[0x40, 0x4F]WWDG_Enable(WWDG_Prescaler_8, 0x4F);  // 计数器的值为0x4F// 启动窗口看门狗WWDG_EnableIT();WWDG_ClearFlag();WWDG_Enable(0x4F);
}int main(void)
{// 系统初始化和其他配置// WWDG配置WWDG_Configuration();while (1){// 系统正常工作// 定期喂狗WWDG_SetCounter(0x4F);}
}
```

以上是独立看门狗(IWDG)和窗口看门狗(WWDG)的基本使用方法和示例代码。在实际应用中,可以根据需要进行更多的配置和定制。请注意,在使用看门狗时,务必确保定期喂狗,以免触发看门狗复位。同时,看门狗定时器的设置应根据系统的实际情况进行调整,以提供适当的容错能力。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击这里,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦。 

​ 点击链接扫码进入嵌入式交流群 ​https://fss.mpay8.cn/article/dmrjinh2C6fjejm

http://www.lryc.cn/news/230118.html

相关文章:

  • 刷题笔记(第七天)
  • python3.7 + pygame1.9.3实现小游戏《外星人入侵》(五):计分
  • [量化投资-学习笔记014]Python+TDengine从零开始搭建量化分析平台-Python知识点汇总
  • [论文分享] Never Mind the Malware, Here’s the Stegomalware
  • 代号:408 —— 1000道精心打磨的计算机考研题
  • 《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互
  • 行业追踪,2023-11-13
  • 开放领域对话系统架构
  • 终端神器:tmux
  • Elasticsearch学习(一)
  • CSS3的常见边框汇总
  • 酷柚易汛ERP-购货订单操作指南
  • 【数据仓库】数仓分层方法详解与层次调用规范
  • 记一次线上问题引发的对 Mysql 锁机制分析
  • Android 工厂模式距离传感器逻辑优化
  • Dell笔记本电脑 启动时提示解决
  • 【人工智能Ⅰ】7-KNN 决策树
  • 【LeetCode】26. 删除有序数组中的重复项
  • K8S知识点(八)
  • 25.4 MySQL 函数
  • Unity 下载Zip压缩文件并且解压缩
  • c++11新特性篇-委托构造函数和继承构造函数
  • Flink SQL处理回撤流(Retract Stream)案例
  • 6.5.事件图层(MapEventsOverlay)
  • 供暖系统如何实现数据远程采集?贝锐蒲公英高效实现智慧运维
  • Flutter笔记:关于Flutter中的大文件上传(上)
  • 腾讯云CVM服务器5年可选2核4G和4核8G配置
  • 数据结构:反射
  • 45 深度学习(九):transformer
  • java中用javax.servlet.ServletInputStream.readLine有什么安全问题吗?怎么解决实例?