STM32自学☞WDG(看门狗)及其案例

 

 一、WDG简介

e2c0dfb3c3ce497e992e6dc3ba9b3fb4.jpg

由于看门狗的代码很少所以就直接在main主函数中写了,没单独建文件

 二、独立看门狗

涉及的按键可参考之前的key.c和key.h文件

独立看门狗配置流程:

1.开启时钟(LSI)

2.解除IWDG_PR和IWDG_RLR的写保护

3.写入预分频和重装值

4.启用独立看门狗

5.喂狗

相关函数:

IWDG_WriteAccessCmd() //写使能控制

IWDG_SetPrescaler() //写预分频器

IWDG_SetReload() //写重装值

IWDG_ReloadCounter() //重新装载寄存器(喂狗)

IWDG_Enable() //启动独立看门狗

IWDG_GetFlagStatus() //获取标志位状态

main.c文件

#include "stm32f10x.h"

#include "stm32f10x_iwdg.h"

#include "delay.h"

#include "OLED.h"

#include "key.h"

int main (void)

 //初始化

 OLED_Init();

 key_Init();

 OLED_ShowString(1,1,"IWDG TEST:");

 //如果查看独立看门狗复位标志位==SET说明本次复位是独立看门狗导致的

 //否则是正常复位导致的

 if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)==SET)

 {

  OLED_ShowString(2,1,"IWDGRST");

  delay_ms(500);

  OLED_ShowString(2,1,"");

  delay_ms(100);

  RCC_ClearFlag();

 }else

 {

  OLED_ShowString(3,1,"RST");

  delay_ms(500);

  OLED_ShowString(3,1,"");

  delay_ms(100);

 }

//开启时钟

/*如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。在LSI振荡器稳定后,时钟供应给IWDG*/

//解除写保护

 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

//写预分频器

  IWDG_SetPrescaler(IWDG_Prescaler_16);

//写重装值

 IWDG_SetReload(2499);

//喂狗

 IWDG_ReloadCounter();

//启动独立看门狗

 IWDG_Enable();

 while(1)

 {

  key_Getnum();

  IWDG_ReloadCounter();

  OLED_ShowString(4,1,"FEED");

  delay_ms(200);

  OLED_ShowString(4,1," ");

  delay_ms(600);

 }

}

三、窗口看门狗

 

 相关函数:

 WWDG_DeInit(); //恢复缺省配置

 WWDG_SetPrescaler( ); //写入预分频器

 WWDG_SetWindowValue( ); //写入窗口值

 WWDG_EnableIT(); //使能中断

 WWDG_SetCounter(); //写入计数器

 WWDG_Enable( ); //使能窗口看门狗

 FlagStatus WWDG_GetFlagStatus(); 

 WWDG_ClearFlag(); 

涉及的按键可参考之前的key.c和key.h文件

main.c文件

#include "stm32f10x.h"

#include "stm32f10x_wwdg.h"

#include "delay.h"

#include "OLED.h"

#include "key.h"

int main (void)

 //初始化

 OLED_Init();

 key_Init();

 OLED_ShowString(1,1,"WWDG TEST:");

 //如果查看独立看门狗复位标志位==SET说明本次复位是独立看门狗导致的

 //否则是正常复位导致的

 if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)==SET)

 {

  OLED_ShowString(2,1,"WWDGRST");

  delay_ms(500);

  OLED_ShowString(2,1,"");

  delay_ms(100);

  RCC_ClearFlag();

 }else

 {

  OLED_ShowString(3,1,"RST");

  delay_ms(500);

  OLED_ShowString(3,1,"");

  delay_ms(100); }

//开启时钟

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

//写入预分频器

  WWDG_SetPrescaler(WWDG_Prescaler_8);   

//写入窗口值

  WWDG_SetWindowValue(0x40|21);

//使能  

 WWDG_Enable(0x40|54);

 while(1)

 {

  key_Getnum();

  OLED_ShowString(4,1,"FEED");

  delay_ms(20);

  OLED_ShowString(4,1," ");

  delay_ms(20);

  WWDG_SetCounter(0x40|54);

 }

}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 15:10:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 15:10:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 15:10:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 15:10:06       20 阅读

热门阅读

  1. scss for循环,$变量,全局样式

    2024-03-10 15:10:06       23 阅读
  2. js-判断变量是否定义

    2024-03-10 15:10:06       22 阅读
  3. CSS 长度单位

    2024-03-10 15:10:06       21 阅读
  4. 【Apache的安装与目录结构】讲解

    2024-03-10 15:10:06       24 阅读
  5. 为何学习外语被视为一种“酷”的行为

    2024-03-10 15:10:06       20 阅读
  6. 计算机的存储方式

    2024-03-10 15:10:06       24 阅读
  7. flutter截屏的方式生成图片水印

    2024-03-10 15:10:06       23 阅读
  8. 探索云原生世界:Serverless 技术的崛起与应用

    2024-03-10 15:10:06       24 阅读
  9. 使用SVM进行评论情感分析

    2024-03-10 15:10:06       25 阅读
  10. 剑指offer-第二版

    2024-03-10 15:10:06       26 阅读
  11. 区块链基础知识01

    2024-03-10 15:10:06       23 阅读
  12. QWebEngineView添加chrome参数的方法

    2024-03-10 15:10:06       21 阅读
  13. 随机森林原理&sklearn实现

    2024-03-10 15:10:06       21 阅读