一.独立看门狗

STM32F4的独立看门狗由内部专门的32Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的32Khz,而是在15~47Khz之间的一个可变化的时钟,只是我们在估算的时候,以32Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。独立看门狗有几个寄存器与我们这节相关,我们分别介绍这几个寄存器,首先是关键字寄存器IWDG_KR

在关键字寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其

复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。

无论何时,只要关键字寄存器IWDG_KR中被写入0xAAAA, IWDG_RLR中的值就会被重新

加载到计数器中从而避免产生看门狗复位 。IWDG_PR 和IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。 接下来,我们介绍预分频寄存器(IWDG_PR),该寄存器用来设置看门狗时钟的分频系数,最低为4,最高位256,该寄存器是一个32位的寄存器,但是我们只用了最低3位,其他都是保留位,预分频寄存器如下:

在介绍完IWDG_PR之后,我们介绍一下重装载寄存器IWDG_RLR。该寄存器用来保存重

装载到计数器中的值。该寄存器也是一个32位寄存器,但是只有低12位是有效的,如图

只要对以上三个寄存器进行相应的设置,我们就可以启动STM32F4的独立看门狗。独立

看门狗相关的库函数操作函数在文件stm32f4xx_iwdg.c和对应的头文件stm32f4xx_iwdg.h中

二.独立看门狗应用

1)取消寄存器写保护(向IWDG_KR写入0X5555)

通过这步,我们取消IWDG_PR和IWDG_RLR的写保护,使后面可以操作这两个寄存器,设置IWDG_PR和IWDG_RLR的值。这在库函数中的实现函数是:

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

这个函数非常简单,顾名思义就是开启/取消写保护,也就是使能/失能写权限。

2)设置独立看门狗的预分频系数和重装载值设置看门狗的分频系数的函数是:

voidIWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置IWDG预分频值

设置看门狗的重装载值的函数是:

voidIWDG_SetReload(uint16_t Reload); //设置IWDG重装载值

设置好看门狗的分频系数prer和重装载值就可以知道看门狗的喂狗时间(也就是看门狗溢出时间),该时间的计算方式为:

Tout=((4×2^prer)×rlr) /40

其中Tout为看门狗溢出时间(单位为ms);prer为看门狗时钟预分频值(IWDG_PR值 )范围为0~7;rlr为看门狗的重装载值(IWDG_RLR的值);

比如我们设定prer值为4,rlr值为625,那么就可以得到Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是1s,只要你在一秒钟之内,有一次写入0XAAAA到IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

3)重载计数值喂狗(向IWDG_KR写入0XAAAA)

库函数里面重载计数值的函数是:

IWDG_ReloadCounter();//按照IWDG重装载寄存器的值重装载IWDG计数器

通过这句,将使STM32重新加载IWDG_RLR的值到看门狗计数器里面。即实现独立看门狗的喂狗操作。

4) 启动看门狗(向IWDG_KR写入0XCCCC)

库函数里面启动独立看门狗的函数是:

IWDG_Enable();//使能IWDG

通过这句,来启动STM32F4的看门狗。注意IWDG在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开IWDG,否则问题依旧,所以在这里提醒大家,如果不用IWDG的话,就不要去打开它,免得麻烦。

通过上面4个步骤,我们就可以启动STM32F4的看门狗了,使能了看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个LED灯来指示程序是否重启,来验证STM32F4的独立看门狗。

在配置看门狗后,DS0将常亮,如果KEY_UP按键按下,就喂狗,只要KEY_UP不停的按,看门狗就一直不会产生复位,保持DS0的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致DS0熄灭一次。

三.源码

Iwdog.h

#ifndef_IWDOG_H_H_H
#define_IWDOG_H_H_H
#include"stm32f4xx_iwdg.h"
voidIWDG_Init(u8 prer,u16 rlr);//IWDG初始化
voidIWDG_Feed(void);  //喂狗函数
#endif

Iwdog.c

#include"iwdog.h"
voidIWDG_Init(u8 prer,u16 rlr)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能对IWDG->PR IWDG->RLR的写IWDG_SetPrescaler(prer); //设置IWDG分频系数IWDG_SetReload(rlr);   //设置IWDG装载值IWDG_ReloadCounter(); //reloadIWDG_Enable();       //使能看门狗
}voidIWDG_Feed(void)
{IWDG_ReloadCounter();//reload
}

Main.c

#include"led.h"
#include"key.h"
#include"delay.h"
#include"uart.h"
#include"exit.h"
#include"iwdog.h"
voidUser_Delay(__IO uint32_t nCount)
{while(nCount--){}
}
staticint count = 0;
intmain(void)
{#if 1NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);  //初始化延时函数LED_Init();                        //初始化LED端口KEY_Init();                //初始化按键delay_ms(100);    //延时100ms IWDG_Init(4,500); //与分频数为64,重载值为500,溢出时间为1sLED_Operate(LED_GREEN,LED_ON);while(1){if(KEY_Scan() == KEY_ON){IWDG_Feed();//喂狗}delay_ms(10);}
#endif}

【stm32f407】独立看门狗 iwdog相关推荐

  1. STM32F407 独立看门狗 个人笔记

    什么是看门狗 如果程序跑飞了怎么办? 可以用看门狗来监控. 看门狗是: 一个递减的计数器,如果不按时给计数器赋值,计数器的值减到一定程度,就会使系统复位. 也就是说如果程序运行异常,无法正常给计数器赋 ...

  2. stm32f407关于独立看门狗各种函数(一)(HAL库)

    以下内容全部来自正点原子,本人只是对主要知识点进行整理,方便以后查看. 一.独立看门狗 独立看门狗本质上是一个定时器,这个定时器有一个输出端,可以输出复位信号.该定时 器是一个 12 位的递减计数器, ...

  3. STM32F4 HAL库开发 -- 独立看门狗(IWDG)

    之前讲过看门狗,参看:STM32开发 – 看门狗详解 一.HAL库配置独立看门狗步骤 1.取消寄存器写保护,设置看门狗预分频系数和重装载值. 首先我们必须取消 IWDG_PR和 IWDG_RLR寄存器 ...

  4. 看门狗(独立看门狗)与窗口看门狗的区别!

    看门狗(独立看门狗)与窗口看门狗的区别 在cortex-M系列芯片上有两个看门狗:看门狗(独立看门狗)和窗口看门狗. 1.相同点 都是为了保证CPU程序跑飞 2.独立看门狗 根据内部看门狗时钟频率,装 ...

  5. stm32 独立看门狗和窗口看门狗区别

    原文地址https://www.cnblogs.com/pertor/p/9483445.html 一.使用调条件 二.特点对比 三.手册介绍 [注]图中的WDGTB为3表示2^3=8,表示8分频,最 ...

  6. FreeRTOS实验_独立看门狗监视多线程

    1.首先随意创建几个线程,如下图: 2.然后就要思考了,怎么样实现如果其中一个线程死掉了,就不喂狗得以让系统重启? 其实,我们可以反过来想一下,什么情况下才喂狗得以让系统正常运行?答案是,所有线程都活 ...

  7. STM32F103V IWDG 独立看门狗操作

    最近编写一个程序,因为需要考虑到可靠性,所以需要在程序了添加看门狗功能.查了下STM32的相关资料,于是利用下库文件来实现IWDG独立看门狗操作.首先需要调用库文件 #include "st ...

  8. stm32看门狗_「正点原子NANO STM32开发板资料连载」第十一章 独立看门狗实验

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十一章 独 ...

  9. proteus里面没有stm32怎么办_学习STM32日志——独立看门狗实验(20.06.23)

    继续更新学习STM32的历程,今天学习看门狗. 在单片机构成的微型计算机系统中,单片机的工作时常收到外界电磁场的干扰,导致程序跑飞,陷入死循环.为了解决这个问题,产生了一种用于监测单片机程序运行状态的 ...

最新文章

  1. hdu4763 KMP
  2. 获取Json中特定的值
  3. 微信终端跨平台组件 mars 系列(二) - 信令传输超时设计
  4. 培训补坑(day1:最短路two-sat)
  5. 小米人员架构调整:组建中国区,王川任总裁
  6. 可以看下是什么问题吗
  7. 移动端问题列表及解决方案
  8. [转]Android TV 遥控器适配
  9. itunes刷机一直正在恢复固件要多久_ios刷机报错故障汇总指南
  10. 【整理】训练序列与导频序列的概念辨析
  11. 怎么用HTML表格中加上线条,如何在html的表格中加入边框线
  12. python问题 Traceback (most recent call last)
  13. Tangent Convolutions 切面卷积(切线卷积)
  14. 虚幻官方文档使用UMG(虚幻运动图像)的用户界面笔记[VS2019]
  15. Redis安装配置说明
  16. 商用密码应用与安全性评估之(四)密码应用安全性评估实施要点
  17. 如何开发一个完整的Helm charts应用实例
  18. 公众号商城怎么做_分享超市小程序商城开发制作介绍
  19. vue组件间通信六种方式
  20. 计算机毕业设计ssm健身房管理系统y7i9n系统+程序+源码+lw+远程部署

热门文章

  1. 不加大资金投入,仅凭智能名片如何解决企业营销难题的?
  2. 2019年高中数学向量解题技巧_(高考题)
  3. Idea Diagrams生成UML类图
  4. 不知道PPT转PDF简单方法有哪些?三个方法让你知道PPT转PDF怎么转
  5. 游戏建模中ZBrush的十大优秀插件
  6. Matlab·学习 | music:祝你生日快乐
  7. 【转】 IEEE 802.1X-PEAP认证过程分析(抓包)
  8. MSP未来可期,Bespin Global小荷已露尖尖角
  9. Cannot create a generic array of ArrayListDog
  10. can总线短距离不用双绞线_所谓CAN总线的线就是两条双绞线是么?