STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。

看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。

在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA,  IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位  。

IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。

只要对以上三个寄存器进行相应的设置,我们就可以启动 STM32 的独立看门狗,启动过程可以按如下步骤实现(独立看门狗相关的库函数和定义分布在文件 stm32f10x_iwdg.h 和stm32f10x_iwdg.c 中) :

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

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

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

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

设置看门狗的分频系数的函数是:

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

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

void IWDG_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

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

点击(此处)折叠或打开

  1. #include "sys.h"
  2. #include "iwdg.h"
  3. /**
  4. * 初始化独立看门狗
  5. * prer:分频数:0~7(只有低 3 位有效!)
  6. * 分频因子=4*2^prer.但最大值只能是 256!
  7. * rlr:重装载寄存器值:低 11 位有效.
  8. * 时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
  9. */
  10. void IWDG_Init(u8 prer,u16 rlr)
  11. {
  12. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* 使能对寄存器IWDG_PR和IWDG_RLR的写操作*/
  13. IWDG_SetPrescaler(prer);    /*设置IWDG预分频值:设置IWDG预分频值*/
  14. IWDG_SetReload(rlr);     /*设置IWDG重装载值*/
  15. IWDG_ReloadCounter();    /*按照IWDG重装载寄存器的值重装载IWDG计数器*/
  16. IWDG_Enable();        /*使能IWDG*/
  17. }
  18. /**
  19. * 喂独立看门狗
  20. */
  21. void IWDG_Feed(void)
  22. {
  23. IWDG_ReloadCounter();    /*reload*/
  24. }

【转】STM32 独立看门狗简介的更多相关文章

  1. STM32独立看门狗(IWDG)

    造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作.看门狗就是一种专门用于检测单片机程序运行状态的硬件结构. STM32内部自带了两个看门狗,独立看门狗(IWD ...

  2. stm32独立看门狗

    转载:http://blog.sina.com.cn/s/blog_7f1dc53b01010mqa.html 实验现象: 开始LED1亮,LED2熄灭,若不隔时间按KEY1则发现LED2因独立看门狗 ...

  3. stm32独立看门狗实验

    //ALIENTEK Mini STM32开发板V1.9范例代码5//独立看门狗实验//正点原子@ALIENTEK//技术论坛:www.openedv.com STM32F103RBT6属于中容量版本 ...

  4. stm32 独立看门狗学习

    STM32F10xxx内置两个看门狗,提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障. 独立看门狗(IWDG)由专用的低速 ...

  5. stm32 独立看门狗 IWDG

    独立看门狗IWDG 独立看门狗简单理解就是一个12位递减计数器,当计数器从某一个值递减到0时,系统就会产生一次复位 独立看门狗由专用低速时钟LSI驱动,其频率一般在30-60KHz之间,通常选择40K ...

  6. STM32之看门狗(独立与窗口)

    广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...

  7. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  8. STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)

    一     前沿废语: 之前有很风靡的游戏,名字叫<看门狗>.该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden·Pearce(主角)是一名精通黑客技术的高手,当时 ...

  9. STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

随机推荐

  1. postMessage 实现跨源通信 iframe 跨域获取url

    用postMessage实现跨源通信的方法实例 如:在www.bbb.com/index.html页面获取www.aaa.com/index.html的数据,以iframe的形式 www.aaa.co ...

  2. UVA1599-Ideal Path(BFS进阶)

    Problem UVA1599-Ideal Path Time Limit: 3000 mSec Problem Description New labyrinth attraction is ope ...

  3. solidity fallback函数

    什么是fallback函数: 出处:http://me.tryblockchain.org/blockchain-solidity-fallback.html 回退函数是合约里的特殊函数,没有名字,不 ...

  4. mysql各数据类型的存储范围

    文章转自 https://www.cnblogs.com/web21/p/6016120.html mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介 ...

  5. 深入浅出的webpack构建工具---AutoDllPlugin插件(八)

    深入浅出的webpack构建工具---AutoDllPlugin插件(八) DllPlugin插件能够快速打包,能把第三方依赖的文件能提前进行预编译打包到一个文件里面去.提高了构建速度.因为很多第三方 ...

  6. .NET和F#周报第35周-.NET 8月重大更新

    来看看8月份最后一个周F#和.NET最新相关信息. https://www.yuque.com/rock/fsharp-weekly/35 这次我们多聊聊.NET相关的东西, 看看.NET的健康生态. ...

  7. 【dataX】阿里开源ETL工具——dataX简单上手

    一.概述 1.是什么? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase. ...

  8. mui 下拉刷新和上拉加载

    <body> mui文档提供了两种不同模式的下拉刷新,具体情况看文档,链接:http://dev.dcloud.net.cn/mui/pulldown/ 单 webview 模式和 双 w ...

  9. 请允许我转载一篇关于套接字的博客:Socket

    这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...

  10. Luogu P2827 蚯蚓

    看到题目就可以想到直接开的堆模拟的过程了吧,这个还是很naive的 注意在用堆做的时候也是要明智一点的,对于蚯蚓长度的相加肯定不能直接遍历并加上,还是可以差分一下的 其实说白了就是把集体加->单 ...