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

STM32的独立看门狗详解

目录

1.独立看门狗是什么?

2.独立看门狗的作用

3.独立看门狗的实现原理

4.独立看门狗用到的寄存器

4.1  IWDG_KR (关键字计时器)

4.2  IWDG_PR(预分频寄存器)

4.3  IWDG_RLR(重装载寄存器)

5.独立看门狗实现代码

5.1 初始化代码

5.2喂独立看门狗


1.独立看门狗是什么?

STM32的独立看门狗(Independent Watchdog,简称IWDG)是一个完全独立的低功耗硬件定时器,它由一个专用的低速时钟(LSI,Low Speed Internal clock)驱动。这个时钟是独立于主时钟系统的,因此即使在主时钟失效的情况下,独立看门狗依然能够继续工作。

2.独立看门狗的作用

STM32的独立看门狗的主要功能是监控MCU的运行状态,并在系统发生故障或死锁时,通过产生复位信号来重新启动系统。如果要保持系统不重启,需要通过不断地“喂狗”(即更新看门狗计数器的值)来实现。如果在预设的时间窗口内没有“喂狗”,那么看门狗计数器就会溢出,从而触发复位操作。

3.独立看门狗的实现原理

独立看门狗由内部低速时钟(LSI)驱动的,LSI实际时钟是一个 15~47Khz之间不精确的时钟,因为看门狗不需要那么高的精度,所以并不影响使用,独立看门狗其实就是一个十二位的计数器,只要这个计数器减少成0,就会触发MCU重启。

4.独立看门狗用到的寄存器

4.1  IWDG_KR (关键字计时器)

(1)在 IWDG_KR中写入 0xCCCC 开启独立看门狗

(2)在 IWDG_KR中写入 0xAAAA  ,IWDG_RLR 中的值就会被重新加载到独立看门狗的计数器,避免MCU发生重启。

(3)在IWDG_KR 中写入 0x5555 可以开启IWDG_PR 和 IWDG_RLR 寄存器的写入功能,因为这两个寄存器的写入功能是被保护的,需要先开启写入功能。

4.2  IWDG_PR(预分频寄存器)

IWDG_PR是存储独立看门狗分频系数的寄存器,最小为4分频,最高为256分频

4.3  IWDG_RLR(重装载寄存器)

这个寄存器的低12位有效,就是每次发生喂狗以后,被装载到独立看门狗计数器里面的值。

5.独立看门狗实现代码

5.1 初始化代码

void IWDG_Init(u8 prer,u16 rlr)
{IWDG_Handler.Instance=IWDG;IWDG_Handler.Init.Prescaler=prer;	//设置IWDG分频系数IWDG_Handler.Init.Reload=rlr;		//重装载值HAL_IWDG_Init(&IWDG_Handler);		//初始化IWDG  HAL_IWDG_Start(&IWDG_Handler);		//开启独立看门狗
}

这里prer我们传入的分频系数是IWDG_PRESCALER_64(也就是4),rlr重载值我们设置的是500,根据公式时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms),代入进去就是64*500/32=1000ms,得出定时器的倒计时时间为1秒,如果1秒内不发生喂狗,那么MCU就会被重启,我们平时做嵌套函数等耗时工作的时候一定要注意及时喂狗,避免系统正常运行中被重启

5.2喂独立看门狗

void IWDG_Feed(void)
{   HAL_IWDG_Refresh(&IWDG_Handler); 	//喂狗
}

这个函数HAL库已经帮我们实现好了,我们注意及时调用就可以了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 玄机——第五章 linux实战-CMS01 wp
  • GEE代码实例教程详解:降水量分类分析
  • Memcached 介绍与详解及在Java Spring Boot项目中的使用与集成
  • 开发个人Ollama-Chat--5 模型管理 (二)
  • Java数据结构-链表与LinkedList
  • 触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘
  • 阿里巴巴矢量图标库使用
  • 梯度下降算法的原理
  • allWebPlugin中间件实现ActiveX插件在谷歌、火狐、Edge浏览器使用
  • C++:从C语言过渡到C++
  • C++:C++入门基础|命名空间|输入输出
  • OSS存储桶密钥泄露【案例】
  • 【基于R语言群体遗传学】-14-种群起源的相对似然
  • 【云原生】AWS云平台,ECR推送Helm chart包
  • TCP/IP协议超时重传,以及应用层超时重传一文详解
  • [译]如何构建服务器端web组件,为何要构建?
  • “大数据应用场景”之隔壁老王(连载四)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 30天自制操作系统-2
  • E-HPC支持多队列管理和自动伸缩
  • EOS是什么
  • gitlab-ci配置详解(一)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • React as a UI Runtime(五、列表)
  • SpriteKit 技巧之添加背景图片
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 闭包,sync使用细节
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 基于遗传算法的优化问题求解
  • 批量截取pdf文件
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用parted解决大于2T的磁盘分区
  • 线性表及其算法(java实现)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 正则学习笔记
  • 你对linux中grep命令知道多少?
  • 7行Python代码的人脸识别
  • Mac 上flink的安装与启动
  • postgresql行列转换函数
  • ​浅谈 Linux 中的 core dump 分析方法
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 达梦数据库知识点
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (Git) gitignore基础使用
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (七)c52学习之旅-中断
  • (四)Controller接口控制器详解(三)
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET 4.0中使用内存映射文件实现进程通讯