STM32
直播中

赵辉

12年用户 889经验值
私信 关注
[问答]

STM32之独立看门狗概述

STM32独立看门狗的喂狗是什么意思?
stm32独立看门狗的示例程序是怎样的?

回帖(1)

王兰英

2021-9-23 10:39:01
  一、独立看门狗概述:
  独立看门狗其实就是一个独立于主时钟的定时复位狗。一旦开启独立看门狗,它就会根据自己设定的时间不断倒数,倒数到0后就开始复位。
  二、关于喂狗:
  喂狗就是让狗去吃东西,分心后,这只狗就得重新倒数。
  三、stm32看门狗示例程序:
  #include “led.h”
  #include “delay.h”
  #include “key.h”
  #include “sys.h”
  #include “usart.h”
  void IWDG_Init(u8 prer,u16 rlr)
  {
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作
  IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64
  IWDG_SetReload(rlr); //设置IWDG重装载值
  IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器
  IWDG_Enable(); //使能IWDG} int main(void)
  {
  //延时函数初始化 delay_init()
  //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  //初始化与LED连接的硬件接口 LED_Init();
  //按键初始化 KEY_Init();
  delay_ms(500); //与分频数为64,重载值为625,溢出时间为1s
  IWDG_Init(4,625); //点亮LED0 LED0=0;
  while(1)
  {
  if(KEY_Scan(0)==WKUP_PRES)
  {
  IWDG_ReloadCounter();
  //如果WK_UP按下,则喂狗
  }
  }
  }
  从主程序main的第一行开始运行到下面的代码时,开启看门狗
  //与分频数为64,重载值为625,溢出时间为1s IWDG_Init(4,625);
  此时,键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
  所以我们会看到等一亮一灭。
  此时,如果检测到按键按下,那么就会运行喂狗程序:
  if(KEY_Scan(0)==WKUP_PRES)
  {
  IWDG_ReloadCounter();
  //如果WK_UP按下,则喂狗
  }
  喂狗后, 键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器,也就是对应到初始化设置的计数值,我们设置的1S,那么计数器就将重1s处开始递减,如果我们持续按按键,那么计数器就会持续保持在那个值,不会倒数到0,也就不会产生复位,那么灯就会始终保持亮的状态。
  从而验证了看门狗和喂狗的功能。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分