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

单片机-STM32 看门狗(八)

 目录

一、看门狗概念

1、定义:

二、单片机中的看门狗

1、功能描述:

2、看门狗设置部分

预分频寄存器(IWDG_PR)

3、窗口看门狗

特性:

4、看门狗配置:


一、看门狗概念

看门狗--定时器(不属于基本定时器、通用定时器、高级定时器)

1、定义:

看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。

看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。

输入端:喂狗(定时器中刷新计数器)--一个函数

输出端:连接复位电路,一旦计数器从最大值计数到0,还没有喂狗,就直接复位

重装在:1000

看门狗就会从1000从上而下计数,0--1000中间没有喂狗,那么计数器计数到0,那么就会复位,如果在0--1000的范围内喂狗了,那么就代表当前程序正常执行,不会复位。

假如说我们的一个程序执行事件1500ms,那么我们就可以将我们的看门狗的运行周期设置为大于1500ms的时间,假如说设置为2000ms,那么我们就可以检测程序运行时间,如果2000ms还没有喂狗,代表程序卡死了,就需要复位。

二、单片机中的看门狗

看门狗:独立看门狗 窗口看门狗

独立看门狗的时钟:40KHZ(LSI)

窗口看门狗的时钟:APB1分频得到

1、功能描述:

在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。

0xcccc--开启看门狗

0xaaaa--喂狗

IWDG_RESET--复位信号

IWDG_KR---键寄存器

IWDG_RLR--重装载寄存器

2、看门狗设置部分

设置一个1s的周期进行喂狗???

独立看门狗时钟40Khz

我们只需要设置预分频寄存器和重装在寄存器即可

预分频寄存器(IWDG_PR)

预分频:64分频

重装在:625

周期=(64/40khz)*625 ms 周期:1000ms

3、窗口看门狗

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

特性:

● 可编程的自由运行递减计数器

● 条件复位

─ 当递减计数器的值小于0x40, (若看门狗被启动)则产生复位。

─ 当递减计数器在窗口外被重新装载, (若看门狗被启动)则产生复位。见0。

● 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可

以被用于重装载计数器以避免WWDG复位

下限值:0x40--计数器递减到0x40还没有喂狗,那么就会产生复位

上限值:自定义的,不要超过最大的计数周期,计数器值大于上限值之前喂狗也会去复位。

4、看门狗配置:

主函数中:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GIL及相关总结
  • 神经网络的线性部分和非线性部分
  • pywin32库的安装与配置:在Windows环境下控制Office应用
  • 使用视图方式操作MySQL数据表
  • Excel中.xls和.xlsx文件格式的区别,及C++操作Excel文件
  • 数学基础 -- 线性代数之矩阵正定性
  • ARM32开发——DMA内存到内存
  • 【Linux】Linux常见指令以及权限理解(上)
  • 歌者PPT新功能速递!
  • 使用PowerShell自动化你的Windows开发工作流程
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 【困难】 猿人学web第一届 第18题 jsvmp 洞察先机
  • 设计模式-行为型模式-观察者模式
  • MediaStream 的媒体流对象 (stream) 和流媒体轨道 (track) 详解
  • mysql多线程优化并行复制
  • es6要点
  • JavaScript 一些 DOM 的知识点
  • Laravel 实践之路: 数据库迁移与数据填充
  • opencv python Meanshift 和 Camshift
  • pdf文件如何在线转换为jpg图片
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 基于HAProxy的高性能缓存服务器nuster
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一些关于Rust在2019年的思考
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​ssh免密码登录设置及问题总结
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Panda3d 碰撞检测系统介绍
  • # Redis 入门到精通(七)-- redis 删除策略
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma once与条件编译
  • (6)STL算法之转换
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (编译到47%失败)to be deleted
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (九十四)函数和二维数组
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)fock函数详解
  • **python多态
  • .jks文件(JAVA KeyStore)
  • .NET DataGridView数据绑定说明
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .NET中使用Redis (二)
  • :如何用SQL脚本保存存储过程返回的结果集
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @RunWith注解作用
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解