什么是看门狗

如果程序跑飞了怎么办?

可以用看门狗来监控。

看门狗是:

一个递减的计数器,如果不按时给计数器赋值,计数器的值减到一定程度,就会使系统复位。

也就是说如果程序运行异常,无法正常给计数器赋值(喂狗),系统会自动复位。

STM32F407有两种看门狗:

  1. 独立看门狗
  2. 窗口看门狗

独立看门狗

  • 在键值寄存器(IWDG_KR)中写入0xCCCC:开始启用独立看门狗。
  • 此时计数器开始递减
  • 当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
  • 无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗),
  • 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
  • 如果程序异常,就无法正常喂狗,从而系统复位。

  • 时钟源是频率为32K的LSI(low speed internal 时钟),经过预分频寄存器的值分频后,即为独立看门狗的计数器的频率。
  • 预分频寄存器IWDG_PR和键值寄存器IWDG_KR都有写保护功能,要操作他们需要先取消写保护。

独立看门狗时间计算

如何计算超时时间,即独立看门狗多久不喂会复位?

下图适用与M4:



由图可知

分频系数 = (2^PR寄存器的值)×4

∴超时时间= 周期×初值

=(分频系数/32K)× rlr

=(2^PR寄存器的值)×4 ×rlr

独立看门狗适用场合

  • 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。
  • 独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。

独立看门狗代码写法

#include "iwdg.h"

////////////////////////////////////////////////////////////////////////////////// 

//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//rlr:自动重装载值,0~0XFFF.
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{
//1.取消寄存器写保护:0x5555使能
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写 //2. 设置IWDG分频系数:写PR
IWDG_SetPrescaler(prer); //3. 设置IWDG装载值
IWDG_SetReload(rlr); //4. 喂狗:写0xAAAA到KR,赋初值
IWDG_ReloadCounter(); //reload //5. 使能看门狗:写0xCCCC到KR
IWDG_Enable();
} //喂独立看门狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter();//喂狗:写0xAAAA到KR
}

最新文章

  1. iOS 使用xib后获取view的frame出错的问题
  2. HTML的初体验
  3. 服务端性能测试校准v1.2
  4. Struts+Hibernate+Spring实现用户登录功能
  5. PHP核心编程知识点
  6. javaweb项目中的WEB-INF与META-INF
  7. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
  8. 【转】 iOS日常学习 - iOS10上关于NSPhotoLibraryUsageDescription等问题
  9. 第一个完整的cppunit单元测试程序
  10. jQuey事件委托
  11. C#在客户端验证数字证书(Certificate)
  12. 【转义字符】HTML 字符实体< &gt: &
  13. Gatling简单测试SpringBoot工程
  14. 使用Random类生成指定范围的随机数
  15. 11.6 正睿停课训练 Day17
  16. 2017-9-3模拟赛T2 取数(win)
  17. 函数表达式(JavaScript高程笔记)
  18. Linux下如何查看tomcat是否启动/系统日志等
  19. 【BZOJ2754】[SCOI2012]喵星球上的点名
  20. 题解 P2089 【烤鸡】

热门文章

  1. Arthur and Table CodeForces - 557C
  2. [未读]JavaScript高效图形编程
  3. Linux离线安装pip和numpy
  4. AJPFX关于表结构的相关语句
  5. poj2677 Tour
  6. myeclipse 安装svn(subeclipsesite)插件
  7. vue跨域解决及打包
  8. Kali 2017.3开启VNC远程桌面登录
  9. PHP 中空字符串介绍0、null、empty和false之间的关系
  10. 把特征网络换成resnet-50