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

2019-11-16来源: 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  看门狗 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480241.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32 看门狗 BKP(HAL库)
(一)概述stm32有两个看门狗:硬件看门狗(LSI 40KHz,时间精度不高)和窗口看门狗(APB1)。(二)硬件看门狗实现代码IWDG_HandleTypeDef hiwdg; // 硬件看门狗初始化static void MX_IWDG_Init(IWDG_HandleTypeDef *pHiwdg){    pHiwdg->Instance = IWDG;    pHiwdg->Init.Prescaler = IWDG_PRESCALER_4;    pHiwdg->Init.Reload = 0xFFF; // Tout
发表于 2019-11-16
[HAL库学习之路]5.IWDG-独立看门狗
记录自己的STM32的HAL库的学习之路,不定期更新…一、Pinout二、Clock Configuration三、Configuration配置GPIO 配置IWDG 四、Generate Code代码 主函数首先点亮两个LED 1S后熄灭,在主循环里检测按键输入进行喂狗,如果在4s内进行喂狗,则1个LED闪烁,否则程序复位。int main(void){  /* USER CODE BEGIN 1 */  /* USER CODE END 1 */  /* MCU Configuration----------------------------------------
发表于 2019-11-16
[HAL库学习之路]5.IWDG-独立看门狗
STM32 HAL库学习系列第11篇---定时器TIM---看门狗基本配置及使用
基本配置使用cube配置溢出时间记住准时喂狗独立看门狗: /* IWDG 1s 超时溢出 */  MX_IWDG_Init(IWDG_PRESCALER_64,625);  /* 启动独立看门狗 */  HAL_IWDG_Start(&hiwdg);   LED1_ON;   /* while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控   * 如果我们知道这部           分代码的执行时间,比如是50ms,那么我们可以设置独立看门狗
发表于 2019-11-16
[HAL库学习之路]6.WWDG-窗口看门狗
记录自己的STM32的HAL库的学习之路,不定期更新…一、Pinout二、Clock Configuration三、Configuration配置GPIO 配置WWDG 配置NVIC 超时时间: T=4096∗Prescaler∗(T[5:0]+1)/FpclkPrescaler为WWDG的预分频系数,Fpclk为APB1时钟,T[5:0]为窗口看门狗的计数器低6位。四、Generate Code代码 窗口看门狗的上窗口为0x5f,在计数器为0x7f至0x5f之间喂狗程序复位,使能提前唤醒中断,计数器减至0x40会产生一个中断,在中断完成喂狗及翻转PF10。int main
发表于 2019-11-16
[HAL库学习之路]6.WWDG-窗口看门狗
STM32的SPI1、SPI2、SPI3初始化及RF1101的应用(标准库与HAL库)
) == 0) return 0;  } Rxdata = SPI_I2S_ReceiveData(CC1101_SPI); //存储一个字节   return Rxdata;              }---- HAL库:以SPI1为例:SPI_HandleTypeDef SPI1_Handler;  void SPI1_Init(void){    GPIO_InitTypeDef GPIO_Initure;   
发表于 2019-10-17
使用STM32CubeMX,生成STM32F103ZE SPI3 HAL 工程
1,选择芯片型号为STM32F103ZET6,开始工程,引脚配置如下:主要是RCC,SPI3,和SYS三个模块2,时钟配置,可按下图进行:3,SPI3配置,如下图,配完这一步其它可以不管,直接生成工程。4,生成工程,打开工程手动输入红框中内容。运行:成功输出波形。
发表于 2019-10-18
使用STM32CubeMX,生成STM32F103ZE SPI3 HAL 工程
小广播
何立民专栏 单片机及嵌入式宝典

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

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