STM32F103ZET6独立看门狗

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

  代码如下:

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进行初始化。

原文地址:https://www.cnblogs.com/h1019384803/p/10989189.html

时间: 2024-10-31 01:15:45

STM32F103ZET6独立看门狗的相关文章

独立看门狗和窗口看门狗

独立看门狗没几个寄存器. 1.IWDG_KR,写入0xcccc,启动看门狗.计数器开始从复位值 0xFFF 递减计数.当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)2.任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位.写入键值 5555h 可使能对 IWDG_PR 和 IWDG_RLR 寄存器的访问.3.这个看门狗的时钟源是LSI,IWDG_PR寄存器是这个看门狗时钟的分频设置. 没

STM32的独立看门狗

STM32 内 部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG) STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然 有效.这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是 在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看 门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的. 首先我们得讲解一下看门狗的原理.这个百度百科里面有很详细

cortex_m3_stm32嵌入式学习笔记(五):独立看门狗实验(IWDG)

单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生.看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) . 感觉是是自动复位功能,就是在一定时间内你应该去喂它而如果程序中途进入了死循环(就是喂不了了)这个MCU就挂了..但如果没开IWDG ,你不知道它挂没挂(虽然个人认为也是可以手动按复位键的嘛..)(上面那段话抄自某论坛) IWDG初始化步骤: 1)取消寄存器写保

独立看门狗

Stm32的看门狗有两个,一个是窗口看门狗,还有一个是独立看门狗.这里说的是独立看门狗: 一共有四个寄存器: KR:只写寄存器,写入0x55555555去除PR和PLR的写保护,写入0xAAAAAAAA喂狗,写入0xCCCCCCCC开启看门狗. PR:设置分频系数 PLR:计数器从这个寄存器的值递减,如果KR被写0xAAAAAAAA,这个值会被重新传送到计数器.和PR一起决定两次喂狗之间的间隔. SR:状态寄存器,我没用到... 其使用起来非常简单,使用代码如下: 初始化: 喂狗: 来自为知笔记

STM8S103 独立看门狗和窗口看门狗

独立看门狗时钟来源为LSI:窗口看门狗时钟来源为CPU: 窗口看门狗窗口的含义是:喂狗必须在一定的窗口期内完成,不能过早也不能过晚. 总结:防止程序复位,用独立看门狗.

【转】STM32 独立看门狗简介

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生.看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) . 在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗:此时计数器开始从其复位值 0xFFF 递减计数.当计数器计数到末尾 0x0

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

一     前沿废语: 之前有很风靡的游戏,名字叫<看门狗>.该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden·Pearce(主角)是一名精通黑客技术的高手,当时的世界是处于所有物品都被置了电子设备控制,整个城市都在依赖着他们,主人公决定利用自己的技术为这个世界惩奸除恶.   这个游戏以极高的自由度.出色的游戏质量与丰富的游戏内容被业界公认为开启次世代游戏的大门之作,该游戏被IGN评为年度最佳射击游戏(下载地址:http://down.ali213.net/pcgam

STM8S 独立看门狗配置及使用

//独立看门口的时钟来源 内部低速时钟 128khz 除以2 即64khz //选择 IWDG_Prescaler_128 //64/128 =0.5 khz 2ms周期 #define IWDG_500MS_REST (uint8)250 #define IWDG_400MS_REST (uint8)200 #define IWDG_300MS_REST (uint8)150 #define IWDG_250MS_REST (uint8)125 #define IWDG_200MS_REST

cortex_m3_stm32嵌入式学习笔记(七):独立看门狗&amp;窗口看门狗

总结一下这两种狗吧... 1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的.窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟APB1ENR(系统时钟要是挂了就完了) 独立看门狗Iwdg--独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器.主要用于监视硬件错误.