【STM32】HAL库 STM32CubeMX教程五—-看门狗(独立看门狗,窗口看门狗)

【STM32】HAL库 STM32CubeMX教程五—-看门狗(独立看门狗,窗口看门狗)前言:今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用所用工具:1、芯片:STM32F407ZET62、STM32CubeMx软件3…

大家好,又见面了,我是你们的朋友全栈君。

前言:   今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用

 

所用工具:

1、芯片: STM32F407ZET6

2、STM32CubeMx软件

3、IDE: MDK-Keil软件

4、STM32F1xx/STM32F4xxHAL库 

知识概括:

通过本篇博客您将学到:

STM32CubeMX创建看门狗例程

独立看门狗,靠窗看门狗 工作原理

 

看门狗

 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环;或者因为用户配置代码出现BUG,导致芯片无法正常工作,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 

简单说:看门狗的本质就是定时计数器,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加,

如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)

 

STM32的内置看门狗

STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗、窗口看门狗)可以用来检测和解决由软件错误引起的故障。当计数器达到给定的超时值时,触发一个中断(仅适用窗口看门狗)或者产生系统复位。

  • 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。
  • 窗口看门狗由从APB1时钟(36MHz)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。  窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。

 

 

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

IWDG-独立看门狗

工程创建

1设置RCC

  • 设置高速外部时钟HSE 选择外部时钟源

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

2配置IWDG

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

  •    IWDG时钟预分频系数  4分频   
  •  计数器重装载值  4095   RLR

超出(溢出)时间计算:

                                                   Tout=((4×2^PRER) ×RLR)/LSI时钟频率

 

对应不同预分频系数的PRER值:

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

3时钟源设置

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

  • 1选择外部时钟HSE 8MHz   
  • 2PLL锁相环倍频72倍
  • 3系统时钟来源选择为PLL
  • 4设置APB1分频器为 /2

32的时钟树框图  如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》

4项目文件设置

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

  • 1 设置项目名称
  • 2 设置存储路径
  • 3 选择所用IDE

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

5创建工程文件

然后点击GENERATE CODE  创建工程

配置下载工具

新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

HAL库独立看门狗函数库讲解:

看门狗初始化函数

HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)

喂狗函数:

HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
举例:  HAL_IWDG_Refresh(&hiwdg);   //看门狗喂狗

使用该函数定时喂狗即可

 

WWDG-窗口看门狗

 

窗口看门狗的定义

窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0x3F 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。

窗口看门狗之所以称为窗口,就是因为其喂狗时间是在一个有上下限的范围内(计数器减到某个值~计数器减到0x3F),在这个范围内才可以喂狗,可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F)

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

  • 1计数器的初始值
  • 2 是我们设置的上窗口(W[6:0]值
  • 3是下窗口值(0x3F)

窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗

窗口看门狗中断:

并且窗口看门狗还可以使能中断,如果使能了提前唤醒中断,系统出现问题,喂狗函数没有生效,那么在计数器由减到0x40  (0x3f+1)   的时候,便会先进入中断,之后才会复位,你也可以在中断里面喂狗

WDGG窗口看门狗配置

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

  • 1.点击WWDG
  • 2.
  • WWDG时钟预分频系数  8
  • WWDG上窗口值 0x5F
  • WWDG计数器值 : 0x7F
  • 设置看门狗提前唤醒中断
  • 3   
  • 使能窗口看门狗中断

其余配置与独立看门狗相同配置即可

 

HAL库独立窗口狗函数库讲解:

看门狗初始化:

HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg)

喂狗:

HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)

看门狗中断处理函数:

HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

功能:  判断中断是否正常,并进入中断回调函数

 

看门狗中断回调函数:

 __weak HAL_WWDG_EarlyWakeupCallback(hwwdg);

在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中,

看门狗中断运行完成之后,便会进入看门狗的中断回调函数

例程实现:

本例程实现LED点亮延时300ms闪烁

 

在main.c下方添加中断回调函数

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(hwwdg);
  HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);  //LED翻转  --闪烁表示喂狗成功
  HAL_WWDG_Refresh(hwwdg);      //喂狗
}

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

 

【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132936.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信拉群服务器忙请稍后再试,微信群拉人出现“未能添加新成员,请稍后再试”是什么原因?…

    微信拉群服务器忙请稍后再试,微信群拉人出现“未能添加新成员,请稍后再试”是什么原因?…很多做微信营销的朋友 当然少不了创建微信群 通过微信群做营销 在我们利用微信群做营销的过程中 经常会遇到一些问题 其中我们就是微信群拉人进入的时候就有一种情况 那就是出现 未能添加新成员 请稍后再试 这个是怎么回事 又该怎么解决呢 第 1 出现 未能添加新成员 请稍后再试 的原因 南阳微信营销马找钱自己本身也是在做微信群营销 可以说具有很强的发表权 也是遇到过这样的情况 如果你在互联网上搜索 未能

    2025年7月25日
    4
  • 这些Java的“武功秘籍”不是用来收藏的![通俗易懂]

    点击上方☝,轻松关注!及时获取有趣有料的技术文章在金庸的武侠世界里,有太多的武功绝学和武林秘籍,很多江湖人士为了得到一本武功秘籍而争的你死我亡,可以想象武功秘籍是多么的重要,获得一本失传的武功,并加以修炼,或许就可以称霸江湖,号令中原。(图片来源网络,见水印)在Java编程的世界中,也同样有很多“武功秘籍”,这些武功秘籍散落在不同的地方,很多出自大神之手!…

    2022年2月28日
    37
  • 克莱姆法则应用_克莱姆和克拉默法则

    克莱姆法则应用_克莱姆和克拉默法则克莱姆法则(由线性方程组的系数确定方程组解的表达式)是线性代数中一个关于求解线性方程组的定理,它适用于变量和方程数目相等的线性方程组。概念含有n个未知数的线性方程组称为n元线性方程组。1)当其右端的常数项b1,b2,…,bn不全为零时,称为非齐次线性方程组:其中,A是线性方程组的系数矩阵,X是由未知数组成的列向量,β是由常数项组成的列向量。非齐次线性方程组的矩阵形式:2)当常数项全为零…

    2025年11月3日
    4
  • Java SpringBlade「建议收藏」

    Java SpringBlade「建议收藏」项目运行后,怎么查看接口原文:https://github.com/xiaoymin/swagger-bootstrap-ui/blob/master/README_zh.mdswagger-bo

    2022年8月3日
    5
  • 微信小程序跳转传值(微信怎样打开小程序)

    前情:首先我们有这么一种需求,就是我在一个列表中点击了某个item,跳转到详情界面,那么我就需要把item的实体数据从列表页面传递到详情页面,那么我们来看看微信小程序给我们提供的API:先看api:这里大家可以清楚看到api中说到的如何传递参数,其实它这里指的参数仅仅是一些普通的数据类型具体分析:这里我们要传递的实体是object类型,那么我们需要先把实体转…

    2022年4月12日
    52
  • 浏览器编译代码_ie浏览器html编辑器

    浏览器编译代码_ie浏览器html编辑器20个最强的基于浏览器的在线代码编辑器1.CompilrCompilr是一个在线编译器和在线IDE。可以用它来开发PHP,C,C++,Ruby。在浏览器中编译Java,C#和VB.net等。马上使用2.Dabblet跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题。为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还…

    2022年8月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号