历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

发布者:SparklingStar 来源: eefocus关键字:HAL库  STM32CubeMX  看门狗 手机看文章 扫描二维码
随时随地手机看文章

前言:   


今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下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)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。  窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。

IWDG-独立看门狗


工程创建


1、设置RCC


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

2、配置IWDG

IWDG时钟预分频系数  4分频   

计数器重装载值  4095   RLR


超出(溢出)时间计算:


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


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

3、时钟源设置

1选择外部时钟HSE 8MHz   

2PLL锁相环倍频72倍

3系统时钟来源选择为PLL

4设置APB1分频器为 /2

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


4、项目文件设置

1 设置项目名称

2 设置存储路径

3 选择所用IDE

5、创建工程文件


然后点击GENERATE CODE  创建工程


配置下载工具


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

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


看门狗初始化函数


HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)

喂狗函数:


HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)

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

使用该函数定时喂狗即可


WWDG-窗口看门狗


窗口看门狗的定义


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


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

1计数器的初始值

2 是我们设置的上窗口(W[6:0]值

3是下窗口值(0x3F)

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


窗口看门狗中断:


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


WDGG窗口看门狗配置

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);      //喂狗

}

关键字:HAL库  STM32CubeMX  看门狗 引用地址:HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

上一篇:怎样用STM32CAN总线接口发送和接收数据
下一篇:[HAL库学习之路]6.WWDG-窗口看门狗

推荐阅读

11月16日消息,据国外媒体报道,英伟达发布的财报显示,其在2019财年第三财季营收31.81亿美元,净利润同比增幅超过了30%。英伟达2019财年第三财季的财报在当地时间周四发布,从财报来看,其在截至10月28日的这一财季营收31.81亿美元,上一财年同期为26.36亿美元,同比增长21%;上一财季为31.23亿美元,环比增长2%。在营收增加的同时,英伟达第三财季的经营...
今天用做了个小东西:数码管显示接近开关变化值接近开关通过外部中断0连接单片机;数码管示数增加到50后清零;#include <reg51.h> // 引用标准库的头文件#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define NoOp 0x00 // 空操作寄存器 #define Digit0 0x01 ...
据juve patent报道,在小米和非执业实体Sisvel的泛欧争端中,小米再胜一局。海牙法院日前裁决Sisvel的专利是非必要的,因此驳回了侵权诉讼。另外,法院还裁定Sisvel赔偿小米在本案中支出的所有律师费。据悉,Sisvel于2019年7月指控小米侵犯其一项4G通信(LTE)标准技术专利EP2139272,涵盖一个“将移动设备连接到无线通信网络的系统”,寻求法院判定小米侵...
有投资者在投资者互动平台提问:雷曼光电的产品很多都是显示屏幕类的,未来可期,未来的高科技产品涉及元宇宙概念?半导体是高科技产业,雷曼光电往美国出口的产品订单怎么样?11月15日,雷曼光电(300162.SZ)在投资者互动平台表示,2021年前三季度,雷曼光电实现营业收入9.23亿元,较上年同期增长40.59%,主要有两大原因造成。其一,雷曼光电国内Micro LE...

史海拾趣

问答坊 | AI 解惑

圈地运动中你的地位如何?

我不知道做IC的大强如何? 我也不知大公司的技术员过的如何? 现在我知道我过的想当难? 我是科大毕业的,也不算太垃圾的学校。 为何这么难? 我想了好多: 1。我自已努力不足?这是大家都这样说我的(我自已不这样认为)。 2。中国式“圈地 ...…

查看全部问答∨

RegSetValueEx函数问题

EVC下写入注册表的数据时         TCHAR szKey[ MAX_KEY_LENGTH ] = { L"ABCDEFGHIJKL" };         lRet = RegSetValueEx( hKey, REG_KEY, NULL, REG_SZ,(LPBYTE)szKey, (wcslen(szKey))* sizeof(TC ...…

查看全部问答∨

LPC2103串口中断发送的奇怪现象

编写LPC2103串口裸程序,使用UART0,希望在上电初始化结束后串口发送字符串“Startup OK!”,并在按键时发送键号(这只是初期的功能,完成后还要加其他功能),串口通讯选择中断方式(发送和接受)。现在出现一个非常怪异的现象,在初始化后的发送 ...…

查看全部问答∨

库函数中,注册一个中断服务函数,用途是什么

经常会见到**IntRegister( ) 这种库函数,想知道它在什么地方用或者它的优点。…

查看全部问答∨

Cortex-M3 的指针问题

急急??   各位大虾  我想问一下在  Cortex-M3的内核下   我定义一个32位的指针P,我把P加一 是不是相当于加的4    如果是16位的地址指针  是不是相当于加的是2啊    &nbs ...…

查看全部问答∨

TNO Delft-Tyre

TNO Delft-Tyre是什么意思?…

查看全部问答∨

学电源心得体会

通过学习易电源,被TI工程师的设计思想折服,真正以用户为上帝出发,从而开发生产出这么小、性能优异、简单易用的产品。其纳米模块有四个特点:易於使用的封裝、低輸出電壓紋波、低 EMI 幅射、高效率。从这些特点就可看出产品的性能,且使用的简易 ...…

查看全部问答∨

【玩转C2000 Launchpad】 四 TMS320F2802x外设指南

学习了解 TMS320F2802x 少不了的数据手册 http://www.ti.com/lit/ds/sprs523i/sprs523i.pdf PDF里面的结构框图有助理解 CPU User\'s Guides SPRU430 TMS320C28x CPU and Instruction Set Reference Guide Peripheral Guides 1.SPRUFN3 TMS320 ...…

查看全部问答∨

《运算放大器噪声优化手册》阅读【Ⅳ】 软件仿真分析

本帖最后由 dontium 于 2015-1-23 11:22 编辑 对于第二,三章讲的知识,是必须掌握的。手工算几次,心里也有一个大概的感觉。当然还可以用软件仿真偷懒和验证。跟着书中的办法重新学了一遍TINA,感觉比之前的好用了,中文版也不会出现该死的 ...…

查看全部问答∨

TM4C123GPTM的PWM模式生成方波

想用通用定时器产生PWM,不知什么原因程序一直不对,下面附上程序,求助。 void Init_Timer_PWM(void) {          SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);           &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved