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

单片机-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、看门狗配置:

主函数中:


http://www.kler.cn/a/301557.html

相关文章:

  • 深入理解 SQL_MODE 之 ANSI_QUOTES
  • 华东师范大学数学分析第五版PDF习题答案上册及下册
  • 正则表达式语法详解(python)
  • Python 网络爬虫入门教程
  • 前端Javascript、Vue、CSS等场景面试题目(二)
  • LLMs 训练经验篇
  • 使用Ansible进行多云环境的自动化部署与管理
  • 第二期: 第四节, 裸机编程 LED 汇编代码。
  • TCP/IP模型成功与OSI模型失败的深层原因:技术、理念与市场化路径的比较
  • 【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234
  • git获取最近一次提交的内容(只要message不要hash)
  • 新的Ubuntu服务器如何启用root账号和配置静态ip以及开启ssh服务
  • 第309题|证明函数单调有界的核心思路 |武忠祥老师每日一题
  • erlang学习: Mnesia Erlang数据库4
  • redis基本数据类型和常见命令
  • Vue路由的分类与使用
  • mysql树形结构返回是否叶子节点
  • JAVA数据导出为Excel
  • BERT_
  • ubuntu 20.04 部署standalone dolphinscheduler
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 爬虫3:re正则表达式获取数据
  • 中英双语共享充电宝投放管理投资理财源码五级分销返利+地图显示模式
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • 深入理解 JavaScript 中的 `void` 操作符
  • 水壶问题记录