1、IWDG简介 

  STM32F103ZET6的独立看门狗(IWDG)是由内部LSI(内部约40KHZ低速时钟)时钟驱动的。由于IWDG是由内部低速时钟驱动,所以就算主时钟发生故障,IWDG依然能够工作。

  由于LSI是一个内部RC时钟,所以时钟不是很准确的40KHZ,而是在30KHZ~60KHZ之间变化的时钟,所以IWDG时间的计算并不是很准确,只能是一个大概的值。一般用40KHZ来估算。

  IWDG的计数器是一个递减计数器,当IWDG被激活后,计数器开始向下递减计数,当计数器计数至0x0000时产生复位信号,使芯片复位。

  当芯片处于停止和待机模式下工作时,IWDG依然继续工作。

2、IWDG工作原理

  当IWDG被激活后,IWDG的计数器开始向下递减计数,当IWDG的计数器的值递减到0x000时,芯片就会复位。所以为了保证芯片正常工作,必须在IWDG的计数器的值递减到0x000之前,重新给IWDG的计数器赋值,否者芯片就会不断的复位。

  必须注意的是:IWDG一旦启用,就不能在被关闭,想要关闭IWDG,只能复位,并且在复位后不能打开IWDG。

3、IWDG的配置

  IWDG的寄存器并不复杂,只有IWDG_KR键值寄存器、IWDG_PR分频寄存器、IWDG_RLR重装载寄存器这3个寄存器。

  IWDG_KR键值寄存器:

  当向IWDG_KR寄存器写入0xCCCC后,IWDG就开始工作,IWDG的计数器从IWDG_RLR寄存器的值开始向下递减计数,当计数到0x0000时,就会产生一个复位信号。

  当向IWDG_KR寄存器写入0xAAAA后,IWDG_RLR中的值就会重新加载到IWDG计数器中,从而避免IWDG产品复位信号。

  需要注意的是IWDG_RLR和IWDG_PR这两个寄存器是有写保护的,当操作这两个寄存器的时候,必须先向IWDG_KR寄存器写入0x5555,之后才能操作IWDG_RLR和IWDG_PR这两个寄存器。

  IWDG_PR寄存器:

  IWDG_PR寄存器是IWDG的预分频寄存器。IWDG_PR寄存器可以对IWDG的时钟进行分频,分频系数从4分频到256分频。IWDG_PR寄存器只用到了低3位,PR[2:0]组成IWDG的分频系数。如下:

      • PR[2:0] = 000: 4分频
      • PR[2:0] = 001: 8分频
      • PR[2:0] = 010: 16分频
      • PR[2:0] = 011: 32分频
      • PR[2:0] = 100: 64分频
      • PR[2:0] = 101: 128分频
      • PR[2:0] = 110: 256分频
      • PR[2:0] = 111: 256分频

  IWDG_RLR寄存器:

  IWDG_RLR寄存器只有低12位有效,所以IWDG的计数值最大只有0xFFF。

  IWDG的配置流程:

  首先向IWDG_KR写入0x5555,取消IWDG_PR和IWDG_RLR的写保护;

  取消写保护之后设置IWDG_PR和IWDG_RLR的值;

  为了将IWDG_RLR寄存器的值加载到IWDG的计数器中,将0xAAAA的值写入IWDG_KR寄存器中。

  最后将值0xCCCC写入IWDG_KR寄存器中启动IWDG。

  IWDG的时间计算:

  假设IWDG的预分频系数为pr,重装载值为rlr,那么IWDG的时间计算公式为:

  T = ((4*2^pr)*rlr)/40000 (计算后的单位为秒)

4、HAL库操作IWDG

  IWDG初始化代码如下:

void IWDG_Init(void)
{
IWDG_HandleTypeDef IWDG_Handle; IWDG_Handle.Instance = IWDG;
IWDG_Handle.Init.Prescaler = IWDG_PRESCALER_4;
IWDG_Handle.Init.Reload = 0xFFF;
HAL_IWDG_Init(&IWDG_Handle);
}

  IWDG_Handle是IWDG的句柄。

  IWDG_Handle.Instance = IWDG是将句柄指向外设IWDG。

  IWDG_Handle.Init.Prescaler = IWDG_PRESCALER_4是设定IWDG的分频系数。

  IWDG_Handle.Init.Reload = 0xFFF是设定IWDG的重装载值。

  HAL_IWDG_Init(&IWDG_Handle)是将句柄传入HAL_IWDG_Init函数对IWDG进行初始化。

  IWDG重新更新计数器(喂狗)代码如下:

void IWDG_CLR(void)
{
IWDG_HandleTypeDef IWDG_Handle; IWDG_Handle.Instance = IWDG; HAL_IWDG_Refresh(&IWDG_Handle);
}

  将句柄参数传入HAL_IWDG_Refresh函数,HAL_IWDG_Refresh函数的作用是更新IWDG的计数值,防止IWDG的计数值计算到0x0000时产生复位信号。

STM32F103ZET6独立看门狗的更多相关文章

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

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

  2. STM8S 独立看门狗配置及使用

    //独立看门口的时钟来源 内部低速时钟 128khz 除以2 即64khz //选择 IWDG_Prescaler_128 //64/128 =0.5 khz 2ms周期 #define IWDG_5 ...

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

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

  4. stm8的独立看门狗与窗口看门狗

    STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...

  5. [STM31F103]独立看门狗

    独立看门狗步骤: l 取消寄存器写保护: n IWDG_WriteAccessCmd(); l 设置独立看门狗的预分频系数,确定时钟: n IWDG_SetPrescaler(); l 设置看门狗重装 ...

  6. 【转】STM32 独立看门狗简介

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

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

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

  8. FreeRTOS 独立看门狗监测任务执行状态

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 通过前面的几个章节,我们基本已经完成了 FreeRTOS 所有功能的讲解,本章节为大家介绍一种使用独立看门狗 ...

  9. IWDG—独立看门狗

    本章参考资料:<STM32F4XX 中文参考手册> IWDG 章节.学习本章时,配合<STM32F4XX 中文参考手册> IWDG 章节一起阅读,效果会更佳,特别是涉及到寄存器 ...

随机推荐

  1. Matplotlib数据可视化(5):柱状图与直方图

      柱状图和直方图是两种非常类似的统计图,区别在于: 直方图展示数据的分布,柱状图比较数据的大小. 直方图X轴为定量数据,柱状图X轴为分类数据.因此,直方图上的每个条形都是不可移动的,X轴上的区间是连 ...

  2. 基于springcloud搭建项目-Hystrix篇(五)

    1.概述 (1).首先要知道分布式系统面临的问题复杂分布式体系结构中应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败 (2).服务雪崩 多个服务之间相互调用的时候,假设微服务A调用微服 ...

  3. hadoop的伪分布式系统

    1.下载hadoop 链接:https://pan.baidu.com/s/10HBQd57pA4OYNPXe8Dwx9g 提取码:1wtk 运行hadoop需要Java环境,所以还需要安装jdk 链 ...

  4. 《JavaScript 模式》读书笔记(2)— 基本技巧1

    这篇文章的主要内容,介绍了一些js编程中的基本技巧,其实这些技巧,大家在开发的过程中,或多或少都在使用,或者已经可以熟练的应用于自己的代码或项目中了.那么,这篇文章,就一起来回顾下这些“基本技巧”. ...

  5. 《ASP.NET Core 3框架揭秘》博文汇总

    在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的<ASP.NET Core 3框架揭秘>(博文只能算是"初稿",与书 ...

  6. linux相关的帮助文档

    几乎所有linux发行版都会提供大量的有用的文档. 手册页 linux发行版包含了有关常用命令.系统调用和库函数的手册页.手册页被分成不同的章节并分别标以序号: Section      名称     ...

  7. yarn报错error An unexpected error occurred:****ETIMEDOUT

    起因 在一个美好的下午,我敲击键盘输入quasar create Tangerine_Reception 我自豪的使用yarn作为包管理器,本以为万事无忧,不用担心出现npm的种种异常了...... ...

  8. DS01-线性表

    0.PTA得分截图 1.本周内容总结 1.1总结线性表内容 顺序表结构体定义 typedef struct LNode *List struct LNode { ElementType Data[MA ...

  9. Java程序员应该知道的20个有用的lib开源库

    一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...

  10. 推荐几个来自 MOOCs的 Data Science

    数据科学是一个大领域,如果你想成为一个优秀的数据专家,自学是必要的技能. MOOCs是数据科学的主要来源.有许多网站提供了 MOOCs,比如Coursera.Coursera和Udacity都还不错. ...