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

单片机的两种看门狗原理解析——IWDG和WWDG

一、IWDG独立开门狗的主要性能

计时机制:

递减计数器

独立开门狗的初始频率:

LSI低速内部时钟:RC震荡器,40kHz

独立开门狗是以LSI为初始频率的,所以独立开门狗的初始时钟频率取决与单片机本身,因此在使用独立开门狗时,并不需要重新设置频率,直接设置 独立开门狗写使能 、 分频系数、重装载时间 、 喂一次狗、使能开门狗

/*IWDG初始化*/IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16IWDG_SetReload(2499);							//设置重装值为2499,独立看门狗的超时时间为1000msIWDG_ReloadCounter();							//重装计数器,喂狗IWDG_Enable();									//独立看门狗使能

1.1-独立开门狗框图

预分频值计算

超时时间计算

为什么会有+1:因为计数器是减到0的


二、WWDG窗口开门狗主要性能

计时机制:

窗口开门狗区别于独立开门狗的递减计数方式,它本身是递增计数方式

WWDG超时时间计算:

WWDG的时钟源是PCLK1,PCLK1会通过一个固定的4096分频器得到一个较低的时钟频率。然后得到的时钟频率才是和自己后面设置的预分频系数一起参与时间周期计算所用到的。进一步的分频是为了调整适用的时钟频率

计算公式

  • PCLK1 频率:32 MHz
  • WWDG 时钟频率:32 MHz / 4096 = 7.8125 kHz
  • 预分频系数:8
  • 最终时钟频率:7.8125 kHz / 8 = 0.9765625 kHz = 976.5625 Hz
  • 重装载值:84
  • 超时时间:(84 + 1) / 976.5625 Hz ≈ 87 ms

工作原理:

窗口定时器喂狗的时间既有上限,也有下限,必须在这个阶段内喂狗,超出上限或者未达下限都会触发复位,因此其更加适用于需要较高精度的应用

/* 开启时钟 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);  // 开启WWDG的时钟/* WWDG初始化 */
// 设置窗口值
WWDG->CFR = (0x40 << 7) | (WWDG_Prescaler_8 << 5);  // 设置窗口值为64,预分频器为8// 使能WWDG并设置重装载值
WWDG->CR = (0x54 & 0x7F) | WWDG_CR_WDGA;  // 重装载值为84,并使能WWDG

三、为什么在初始化开门狗的时候要先喂一次狗

  • 防止意外复位

  • 初始状态不确定:在系统启动或看门狗初始化之前,看门狗计数器可能已经开始递减。如果不立即喂狗,计数器可能会在初始化过程中达到零,导致系统意外复位。
    确保安全启动:通过在初始化时喂狗,可以确保看门狗计数器被重置到一个已知的安全状态,从而避免在初始化期间触发复位。

  • 确认看门狗功能正常

  • 验证看门狗工作:在初始化时喂狗可以确认看门狗功能是否正常工作。如果喂狗操作失败,可能是硬件或配置有问题,可以在早期发现并处理这些问题。
    调试和测试:在开发和调试阶段,通过在初始化时喂狗,可以更容易地验证看门狗的设置是否正确,并且可以在没有实际应用逻辑的情况下测试看门狗的行为。

  • 符合编程规范

  • 最佳实践:在许多微控制器的应用程序中,初始化看门狗时喂狗是一种常见的最佳实践。这有助于确保系统的稳定性和可靠性。
    文档建议:许多微控制器的数据手册和参考手册会建议在初始化看门狗时进行喂狗操作,以确保看门狗从一开始就处于受控状态。

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

相关文章:

  • SQL进阶技巧:如何获取状态一致的分组? | 最大、最小值法
  • windows10使用bat脚本安装前后端环境之msyql5.7安装配置并重置用户密码
  • 文件上传、amrkdown编辑器
  • Linux防火墙-4表5链
  • (最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网上报温湿度和控制单片机(保姆级教程)
  • 无环SLAM系统集成后端回环检测模块(loop):SC-A-LOAM以及FAST_LIO_SLAM
  • 速盾:视频开cdn合适还是视频点播合适?
  • Mac电脑安装FFmpeg和卸载FFmpeg
  • 数据结构:栈 及其应用
  • 批量发送邮件:性能优化与错误处理深度解析
  • STM32原理知识查询表
  • 从 Kafka 到 WarpStream: 用 MinIO 简化数据流
  • 【Gitee自动化测试4】本地Git分支的增删查,本地Git分支中文件的增删查,本地文件的暂存/提交,本地分支的推送
  • vue-baidu-map的基本使用
  • 策略路由控制选路
  • 【数据结构和算法实践-排序-快速排序】
  • 测试面试题:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
  • 回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出
  • html/css怎么禁用浏览器自动填写
  • 信息安全工程师(22)密码学网络安全应用
  • 算法打卡:第十一章 图论part08
  • 2024年Gartner主存储平台魔力象限报告 | 华为从领导者象限滑落到挑战者象限
  • [Python学习日记-31] Python 中的函数(上)
  • 工作笔记【四】
  • ArcEngine C#二次开发图层处理:根据属性分割图层(Split)
  • 【二叉平衡搜索树】Treap
  • Spring Boot 应用Kafka讲解和案例示范
  • 以到手价为核心的品牌电商价格监测
  • Android中使用RecyclerView制作横向轮播列表及索引点
  • Llama 3.1 技术研究报告-2