STM32
直播中

杨静

7年用户 1443经验值
私信 关注
[问答]

窗口看门狗WWDG的实验步骤有哪些


窗口看门狗的实验步骤有哪些?
窗口看门狗WWDG是怎样工作的?

回帖(1)

刘勇

2021-9-26 10:16:16
  实验步骤:
  1、使能窗口看门狗时钟(※)
  2、设置窗口值, 分频数 和计数器 初始值(※)
  3、开启WWDG(※)
  4、喂狗(WWDG 的喂狗操作实际就是往 CR 寄存器重写计数器值)
  (可选:当窗口看门狗的计数器值减到 0X40 的时候,若开启了中断,则会产生中断,但是计数器仍会递减)
  5、使能中断通道并配置中断优先级(※)
  6、编写中断服务函数
  看门狗的计数器值,随每个窗口看门狗计数周期(4096×分频系数)/PCLK1 减 1
  窗口看门狗工作示意图:
  
  1、使能窗口看门狗时钟(※)
  不同于独立看门狗,窗口看门狗使用的是PCLK1时钟
  __HAL_RCC_WWDG_CLK_ENABLE();
  2、设置窗口值, 分频数 和计数器 初始值(※)
  WWDG_HandleStruct.Instance = WWDG;
  WWDG_HandleStruct.Init.Counter = 0x7f; //0x40~ 0x7f
  WWDG_HandleStruct.Init.Prescaler = WWDG_PRESCALER_8; //分频系数 1,2,4,8
  WWDG_HandleStruct.Init.Window = 0x5f; //《0x80
  HAL_WWDG_Init(&WWDG_HandleStruct);
  3、开启WWDG(※)
  HAL_WWDG_Start_IT(&WWDG_HandleStruct);
  或者
  HAL_WWDG_Start(&WWDG_HandleStruct);
  注意,两者使用一个即可,我刚开始用时没弄清两个的区别,两个都添加到程序中(先HAL_WWDG_Start,再HAL_WWDG_Start_IT)导致出错(但是反过来却没问题),看了一下源码HAL_WWDG_Start_IT里面包含了HAL_WWDG_Start的操作。
  4、喂狗(WWDG 的喂狗操作实际就是往 CR 寄存器重写计数器值)
  HAL_WWDG_Refresh(&WWDG_HandleStruct,0x7f);
  (可选:当窗口看门狗的计数器值减到 0X40 的时候,若开启了中断,则会产生中断,但是计数器仍会递减)
  5、使能中断通道并配置中断优先级(※)
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); //设置优先级分组
  HAL_NVIC_SetPriority(WWDG_IRQn,2,2); //设置优先级
  HAL_NVIC_EnableIRQ(WWDG_IRQn); //使能中断
  6、编写中断服务函数
  void WWDG_IRQHandler(void)
  {
  HAL_WWDG_IRQHandler(&WWDG_HandleStruct);//官方提供HAL_WWDG_IRQHandler
  }
  void HAL_WWDG_WakeupCallback(WWDG_HandleTypeDef* hwwdg) //回调函数
  {
  HAL_WWDG_Refresh(&WWDG_HandleStruct,0x7f);
  LED0^=1;
  }
  建议使用官方的HAL_WWDG_IRQHandler,里面已经添加好了清除中断标志等一系列操作,将自己要做的操作在回调函数HAL_WWDG_WakeupCallback中编写。
举报

更多回帖

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