STM32学习笔记---独立看门狗

目录

一、什么是独立看门狗

1、什么是看门狗

2、看门狗的原理

3、看门狗的作用

4、看门狗的分类

二、如何配置独立看门狗

1、独立看门狗框图

2、独立看门狗的相关寄存器

2.1 关键字寄存器

2.2 分频寄存器

2.3 重载值寄存器

2.4 状态寄存器

3、程序设计

4、独立看门狗的应用

三、具体使用看门狗

一、什么是独立看门狗

1、什么是看门狗

看门狗,又叫watchdog timer,从本质上来说就是一个12bit的递减计数器。看门狗定时器是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义。看门狗电路一般会有一个输入和一个输出,其中的输入叫做喂狗,输出一般连接到另外一个部分的复位端。

2、看门狗的原理

看门狗的一个输出到MCU的RST端(复位电路),MCU正常工作的时候,每隔一端时间输入一个信号到喂狗端,给WDT(Watch Dog Timer,看门狗定时器)清零;如果超过规定的时间(事先给看门狗一个约定的时间,即计数上限值)不喂狗(一般在程序跑飞时),WDT定时超时,就会给出一个复位信号到MCU,使MCU复位,从而防止MCU死机。

3、看门狗的作用

程序运行的保障措施。在程序中定期喂狗,在程序卡死的情况下,自动帮我们复位,看门狗就是一个自动复位电路,防止程序长时间卡死。其本质就是一个定时器,定时器溢出,产生复位信号。

4、看门狗的分类

独立看门狗和窗口看门狗

二、如何配置独立看门狗

1、独立看门狗框图

独立看门狗的工作流程:

1.内部低速时钟LSI通过预分频后得到了分频后的时钟信号(橙色箭头

2.该时钟信号驱动递减计数器,每来一个时钟,自减一个数,当自减到0后产生IWDG复位(绿色箭头)

3.正常运行时,为了避免复位,可提前在重装寄存器写一个值,IWDG_RLR与定时器的ARR是一样的,当预先写好值之后,在运行过程中,在关键字寄存器里,写入一个特定的关键字,控制电路进行喂狗,这时重装值就会加载到递减计数器中,重新自减运行了(红色箭头)

2、独立看门狗的相关寄存器

2.1 关键字寄存器

0xAAAA           每次喂狗的写入值(更新重装载)--------狗粮

0x5555            解除寄存器的写保护

0xCCCC         启动计数器

0x5555以外的数值    激活寄存器的写保护

注意:独立看门狗一旦启动就不能关闭

2.2 分频寄存器

就是对内部低速时钟(LSI 32K)进行分频的

32000/s    32分频    1000/s

2.3 重载值寄存器

2.4 状态寄存器

 

3、程序设计

独立看门狗初始化配置函数

{

        /*时钟源配置*/

        RCC控制和状态寄存器:

        //使能内低速振荡器       0位

        //等待内部低速振荡器就绪 1位

        /*解除写保护*/

        //等待PVU清零

        //设置分频

        //等待RVU清零

        //设置重载

        //第一次喂狗,目的是将重载值加载到计数器内

        /*使能看门狗(也算激活写保护)*/

}

4、独立看门狗的应用

场景:工业自动化控制器

要求: 在一个工业自动化控制器中,需要确保周期性任务能够按时完成。在这个场景中,如果周期性任务在规定的时间内没有完成,可能会导致系统的不稳定。

实现: 你可以使用独立看门狗,设置一个固定的超时时间。系统在每个周期内开始计数,如果在超时时间内没有完成,独立看门狗就会触发复位。这确保了系统不会因为周期性任务的失败而进入不稳定状态。

三、具体使用看门狗

独立看门狗初始化函数:

/*
函数名: iwdg_init
函数功能:独立看门狗初始化
返回值:void
形参:u16 ms
函数说明:*/
void iwdg_init(u16 ms)
{/*时钟源配置*///RCC控制和状态寄存器:RCC->CSR |= (1 << 0);//使能内低速振荡器       0位while(!(RCC->CSR & (1 << 1)));//等待内部低速振荡器就绪 1位/*解除写保护*/IWDG->KR  = 0x5555;while(IWDG->SR & (1 << 0));/*设置分频*/IWDG->PR |= (3 << 0);while(IWDG->SR & (1 << 1));/*设置重载*/IWDG->RLR = 1 * ms - 1;IWDG->KR  = 0xAAAA;//喂狗/*使能看门狗(相当于激活写保护)*/IWDG->KR  = 0xCCCC;}

主程序: 

int main(void)
{NVIC_SetPriorityGrouping(5); //设置优先级分组Usart1_init(115200);//串口初始化Key_init();LED_init();Beep_init();iwdg_init(1000);timer7_Interrupt_ms_init(1);printf("重启\r\n");while(1){LED_flash(1);if(Tim7_cnt[9] >= 900){IWDG->KR  = 0xAAAA;//喂狗Tim7_cnt[9] = 0;}}}

总结:在预设的时间内,正常喂狗一切正常运行;在预设时间外,则会触发复位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础入门人工智能,如何利用AI工具提升你的学习效率?

在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;不仅是技术行业的热词&#xff0c;更是我们日常生活中不可或缺的部分。你是否也想过&#xff0c;如何更有效地学习和利用这些强大的AI工具来提升自己的学习效率&#xff1f;今天&#xff0c;我们将介绍六款…

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件 准备:WRF嵌套网格QGis根据嵌套网格生成namelist.wps文件检查:根据namelist.wps绘制模拟区域ArcGIS Pro中绘制嵌套网络投影变换参考GIS4WRF 是一个免费且开源的 QGIS 插件,旨在帮助研究人员和从业者进行高级研…

WPF中Grid、StackPanel、Canvas、WrapPanel的区别

WPF 中的 Grid、StackPanel、Canvas 和 WrapPanel 都是布局控件&#xff0c;用于在用户界面中组织和排列元素&#xff0c;但它们各自有不同的布局行为和用途。以下是它们的主要区别&#xff1a; Grid&#xff1a; Grid 是最灵活的布局控件&#xff0c;类似于 HTML 中的表格&…

Android——FileProvider

概述 继承于ContentProvider&#xff0c;对第三方应用暴露文件&#xff0c;并授予文件读写操作的权限 <!--兼容Android7.0&#xff0c;把访问文件的Uri方式改为FileProvider--><!--android:grantUriPermissions 必须设置为true --><providerandroid:name"…

LeetCode题练习与总结:摆动排序 Ⅱ--324

一、题目描述 给你一个整数数组 nums&#xff0c;将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 你可以假设所有输入数组都可以得到满足题目要求的结果。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,1,1,6,4] 输出&#xff1a;[1,6,1,5,…

【Hive】8-Hive性能优化及Hive3新特性

Hive性能优化及Hive3新特性 Hive表设计优化 Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时&#xff0c;默认将其转换为分布式计算 MapReduce程序对HDFS中的数据进行…

TensorRT推理端到端

TensorRT推理端到端 1.参考链接2.宿主机上安装CUDA 12.4.13.安装nvidia-container-toolkit4.创建ghcr.io/intel/llvm/ubuntu2204_base容器5.容器内安装CUDA 12.4.1 + TensorRT10.1.06.安装依赖7.准备resnet50模型8.准备bert模型9.准备yolov5m模型10.编译TensorRT推理程序11.onn…

CollageController

目录 1、 CollageController 1.1、 保存领料主页面 1.1.1、 //审核人 1.1.2、 //审核时间 1.1.3、 //需要删除的ID集合 1.1.4、 //库存表 1.1.5、 //查询原来明细信息 1.1.6、 //修改配件表数量 1.1.7、 //修改配件表数量 1.1.8、 //查询原来明细信息 1.1…

玫瑰花HTML源码

HTML源码 <pre id"tiresult" style"font-size: 9px; background-color: #000000; font-weight: bold; padding: 4px 5px; --fs: 9px;"><b style"color:#000000">0010000100000111101110110111100010000100000100001010111111100110…

buuctf[湖南省赛2019]Findme1

解压得5个图片&#xff0c;其中图片1&#xff0c;高度不正常&#xff0c;使用下面脚本破解真实高度和宽度 import os import binascii import structcrcbp open("1.png", "rb").read() for i in range(1024):for j in range(1024):data crcbp[12:16] st…

维修数据屏:重塑热力公司运维管理新格局

在热力公司的运维管理中&#xff0c;高效的报修和维修流程是确保系统稳定运行的关键。随着科技的发展&#xff0c;维修数据屏的出现为热力公司的运维工作带来了重大变革。 一、传统热力运维面临的挑战 过去&#xff0c;热力公司在报修和维修方面存在诸多问题&#xff0c;给运维…

Android中的MVP模式

MVP&#xff08;Model-View-Presenter&#xff09;架构在 Android 开发中是一种流行的架构模式&#xff0c;它将业务逻辑和 UI 代码分离&#xff0c;通过 Presenter 来处理用户的操作和界面更新。MVP 提高了代码的可维护性和测试性&#xff0c;特别是 Presenter 中的逻辑可以单…

如何使用Python对Excel、CSV文件完成数据清洗与预处理?

在数据分析和机器学习项目中&#xff0c;数据清洗与预处理是不可或缺的重要环节。 现实世界中的数据往往是不完整、不一致且含有噪声的&#xff0c;这些问题会严重影响数据分析的质量和机器学习模型的性能。 Python作为一门强大的编程语言&#xff0c;提供了多种库和工具来帮…

SpringCloud学习:Seata总结与回顾

SpringCloud学习&#xff1a;Seata总结与回顾 文章目录 SpringCloud学习&#xff1a;Seata总结与回顾1. Seata实战&#xff1a;测试2. Seate原理总结和面试题3. Seata总结与回顾4. 易混点 1. Seata实战&#xff1a;测试 测试问题 未启用分布式事务 若不使用分布式事务&#xf…

sql server删除过期备份文件脚本

一、通过脚本查看过期文件&#xff0c;时间可以自己设定 for /f "delims" %i in (dir /b /a-d "E:\mybak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup") do if "%~ti" LSS "2024/09/29 16:50&qu…

算法-尺取法

尺取法&#xff08;Sliding Window Technique&#xff09;&#xff0c;也称为滑动窗口算法&#xff0c;是一种常用于解决数组或字符串子区间问题的有效方法。其核心思想是通过维护一个窗口&#xff08;子区间&#xff09;&#xff0c;在数组或字符串上滑动这个窗口&#xff0c;…

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

Docker consul注册中心

一、consul 1.1、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。 起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。 直到后来出现了多个节点的分布式架构&#x…

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…

前100+大型语言模型(LLMs)面试问题和路线图

介绍 获取前 100 个精选的 LLM 面试问题&#xff0c;了解如何准备生成式 AI 或 LLM 面试准备和大型语言模型 &#xff08;LLM&#xff09; 面试准备的学习路径。 This article explains learning path for large language models (LLMs) interview preparation. You will fin…