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);  // 预分频系数为256
    IWDG_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);  // 预分频系数为8
    WWDG_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.mfbz.cn/a/146222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ORACLE数据库实验总集 实验一 Oracle数据库安装与配置

一、实验目的 (1)掌握 Oracle数据库服务器的安装与配置 (2)了解如何检查安装后的数据库服务器产品,验证安装是否成功。 (3)掌握 Oracle数据库服务器安装过程中出现的问题的解决方法。 二、实验…

Java继承和多态(2)

🐵本篇文章将对多态的相关知识进行讲解 一、向上转型 向上转型是实现多态的条件之一;向上转型是让子类对象转换为父类对象或者是让父类的引用指向子类对象,直观的表现形式就是将子类的对象赋值给父类对象的引用;下面讲解向上转型…

gdb详解【Linux知识贩卖机】

你背朝太阳,就只能看到自己的影子。 --纪伯伦语录 文章目录 简介准备常用命令查看代码(list)运行(run)打断点(break)逐语句(step)逐过程(next)完成…

电源管理芯片知识分享:电源芯片的特点及故障检测方法

电源管理芯片用于对电源的控制和管理,提高设备的性能,被广泛应用于智能家居、电子商务、能源管理、汽车等领域,是现代电子设备不可缺少的部分。因此,对于电源管理芯片的检测也是十分重要的,发现其故障并及时解决&#…

MySQL8.0学习笔记

1. CMD命令 1.1 数据库启动与停止 (1) 启动数据库:net start mysql80 (2) 停止数据库:net stop mysql80 1.2 数据库连接与退出 (1) 连接数据库:mysql [-hlocalhost -P3306] -uroot -p[123456] // 本地数据库可省略-h -P (2) 退出数据库…

2023年亚太杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…

Leetcode刷题详解——太平洋大西洋水流问题

1. 题目链接:417. 太平洋大西洋水流问题 2. 题目描述: 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格…

B : 赫夫曼编码长度

Description 每行一个大小写英文字母组成的字符串,长度不大于 1000,通过前缀编码后最短的编码长度。 Input 每组数据一行,大小写英文字母 Output 每组数据输出赫夫曼编码长度 Sample 思路: string res "";//用于…

市场火爆的AI实景自动直播是什么?一文带你了解清楚!

最近AI实景自动直播在各大短视频平台爆火出了新高度,在如今全民直播的时代,直播已经成为大多数商家商家必须要会的技能,包括全国头部品牌也在纷纷加码直播,甚至早早就开启了直播矩阵的玩法,中腰部商家也在考虑如何入手…

【3】Spring Boot 3 集成mybatis-plus+druid+mysql

目录 【3】Spring Boot 3 集成组件:Druid Mybatis Plus Mysql集成方案1. Hikari jdbc mysql 集成方案增加依赖添加配置Spring Testng 测试用例 2. Druid Mybatis Plus Mysql集成方案2.1 配置Druid添加依赖配置启动Spring Boot Web StarterSpring Testng测试用…

Linux开发工具03:使用GCC、make和CMake编译代码

写在前面 这里主要记录一下如何使用GCC、make和CMake编译代码; 一、GCC g是GCC下专门用于编译C项目的编译器; 假设目录结构如下: include:包含分离的.h和.cpp文件;src:包含主函数入口main.cpp&#xff1…

双点重发布+路由策略实验

一、双点重发布实验 1、实验拓扑图 2、各路由器IP地址、环回地址配置 R1 R2 R3 R4 3、启动RIP和OSPF 4、双向重发布 5、查看路由信息 6、更改网络类型 6、抓取流量 二、路由策略实验 1、实验拓扑图 2、各路由器IP地址的配置 3、启动RIP和OSPF 3、重发布 4、抓取流量 5、创建…

电脑屏幕标记软件——Pointofix

前言 Pointofix是一款由德国人开发的屏幕标记软件,德国人的工匠精神,是出了名的,德国人开发的软件也一样。 Pointofix体积非常小巧,安装包只有1MB大小,使用Pointofix可以直接在屏幕上面写字、画图、标重点。 下面介…

为什么Springboot项目中有些写法继承了SpringBootServletInitializer类?Springboot的两种发布方式

文章目录 一、前言二、SpringBoot的两种发布方式2.1、内置容器运行2.2、外置容器(Tomcat)运行 三、扩展3.1、如何将 Spring Boot 项目打包成 war 包? 一、前言 在一次SpringBoot源码中看到了启动类中继承了SpringBootServletInitializer&…

数据结构-二叉树的前、中、后序遍历

目录 1. 二叉树的遍历 1.1 前序 1.2 中序 1.3 后序 1.4 遍历的复杂度 2.二叉树节点个数及高度的计算 2.1 二叉树节点个数 2.2 二叉树叶子节点的个数 2.3 二叉树高度 2.4 二叉树第k层节点个数 1. 二叉树的遍历 前面的章节中,我们学习了二叉树的顺序结构&am…

Python入门:一文详解Python列表(List)操作方法

文章目录 前言一、创建一个列表二、访问列表中的值三、更新列表四、删除列表元素六、Python列表截取七、Python列表操作的函数和方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②…

【thop.profile】thop.profile计算网络参数量和计算效率

🍋🍋1.安装thop 安装thop有两种方式。 🏆第一种 pip install thop 🏆第二种 用源码编译安装 从官网下载【github】thop安装压缩包下载压缩文件,解压到虚拟环境的site-packages文件下激活进入自己的虚拟环境cd到压缩…

不同类型的软件企业该如何有效的管理好你的软件测试团队?

最近在网上发现一篇记录了2012年《[视频]作为测试经理如何有效管理好你的软件测试团队》的文字内容,感谢记录的人,我也保存一下。顺便将演讲中的PPT重点截图也放上来,一并保存了!。由于是现场速记,过度的口语化&#x…

迅为iTOPRK3588开发板系统定制(无法联网)

在上一个小节中讲解了 ubuntu 和 debian 文件系统的定制,但那是在可以运行脚本正常构 建系统的前提下,而本小节则是针对部分特殊用户无法联网的情况。 在 source 目录下存放了已经构建完成的压缩包,如下图所示: 然后使用以下命令…

weblogic控制台登陆console的时候慢

我们在搭建完weblogic后,登录控制台时,会出现等待很长时间的情况。 如下图:怎么解决呢 连接所属服务器,.找到jdk的安装路径 [rootlocalhost lib]# echo $JAVA_HOME/ /usr/java/jdk1.8.0_161/ 进入jre下的lib目录下的security目录&#xff0…
最新文章