一、IWDG介绍

1.1 IWDG简介

   STM32F1芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另 一个是窗口看门狗WWDG。两个看门狗外设(独立和窗口)均可用于检测 并解决由软件错误导致的故障。独立看门狗简单理解其是就是一个12位 递减计数器,当计数器从某一个值递减到0时(如果看门狗已激活),系 统就会产生一次复位。如果在计数器递减到0之前刷新了计数器值,那么 系统就不会产生复位。这个刷新计数器值过程我们称之为“喂狗”。看 门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作

1.2 IWDG结构框图

  要更好的理解独立看门狗,就需要了解它内部的结构

二、IWDG配置步骤

(1)开启寄存器访问(给IWDG_KR寄存器写入0X5555)

   IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

2)设置IWDG预分频系数和重装载值

  void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);

  void IWDG_SetReload(uint16_t Reload);

Tout = (4*2^pre) / 40 * rlr

其中Tout为独立看门狗溢出时间,单位是ms。pre是预分频器系数(0-6),rlr 是重装载寄存器的值,公式内的40是独立看门狗的时钟。

(3)重载计数器值(喂狗)(给IWDG_KR寄存器写入0XAAAA)

   IWDG_ReloadCounter();

(4)开启IWDG(给IWDG_KR寄存器写入0XCCCC)(外设开启)

  IWDG_Enable();

4.编写独立看门狗控制程序

  本章所要实现的功能是:通过K_UP按键进行喂狗,喂狗的时候D2指示 灯亮,同时串口输出“喂狗”提示信息,超过喂狗时间系统重启D2指示 灯灭,同时串口输出“复位系统”提示信息,同时使用D1指示灯闪烁表 示系统运行。程序框架如下:

(1)初始化IWDG(开启IWDG,设置溢出时间)

(2)编写主函数

1 #ifndef _iwdg_H
2 #define _iwdg_H
3
4 #include "system.h"
5 void IWDG_Init(u8 pre,u16 rlr);
6 void IWDG_FeedDog(void); //喂狗
7
8 #endif
 1 #include "iwdg.h"
2
3 /*******************************************************************************
4 * 函 数 名 : IWDG_Init
5 * 函数功能 : IWDG初始化
6 * 输 入 : pre:预分频系数(0-6)
7 rlr:重装载值(12位范围0xfff)
8 独立看门狗复位时间计算公式:t=(4*2^pre*rlr)/40
9 * 输 出 : 无
10 *******************************************************************************/
11 void IWDG_Init(u8 pre,u16 rlr)
12 {
13 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护
14 IWDG_SetPrescaler(pre);//设置预分频系数 0-6
15 IWDG_SetReload(rlr);//设置重装载值
16 IWDG_ReloadCounter(); //重装载初值
17 IWDG_Enable(); //打开独立看门狗
18
19 }
20
21 /*******************************************************************************
22 * 函 数 名 : IWDG_FeedDog
23 * 函数功能 : 喂狗
24 * 输 入 : 无
25 * 输 出 : 无
26 *******************************************************************************/
27 void IWDG_FeedDog(void) //喂狗
28 {
29 IWDG_ReloadCounter(); //重装载初值
30 }
 1 #include "system.h"
2 #include "SysTick.h"
3 #include "led.h"
4 #include "usart.h"
5 #include "key.h"
6 #include "iwdg.h"
7
8
9 /*******************************************************************************
10 * 函 数 名 : main
11 * 函数功能 : 主函数
12 * 输 入 : 无
13 * 输 出 : 无
14 *******************************************************************************/
15 int main()
16 {
17 u8 i=0;
18
19 SysTick_Init(72);
20 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
21 LED_Init();
22 USART1_Init(9600);
23
24 KEY_Init();
25 IWDG_Init(4,800); //只要在1280ms内进行喂狗就不会复位系统
26
27 led2=1;
28 printf("复位系统\r\n");
29
30 while(1)
31 {
32 if(KEY_Scan(0)==KEY_UP)
33 {
34 IWDG_FeedDog();//喂狗
35 led2=0;
36 printf("喂狗\r\n");
37 }
38
39 i++;
40 if(i%20==0)
41 {
42 led1=!led1;
43
44 }
45 delay_ms(10);
46 }
47 }

(stm32f103学习总结)—独立看门狗(IWDG)的更多相关文章

  1. stm32 独立看门狗 IWDG

    独立看门狗IWDG 独立看门狗简单理解就是一个12位递减计数器,当计数器从某一个值递减到0时,系统就会产生一次复位 独立看门狗由专用低速时钟LSI驱动,其频率一般在30-60KHz之间,通常选择40K ...

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

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

  3. 独立看门狗 IWDG

    一,独立看门狗 二,独立看门狗的时钟源 独立看门狗拥有自己的时钟源,不依赖PLL时钟输出的分频信号,能够独立运行,这样子的好处就是PLL假如受到干扰, 导致运行异常,独立的看门狗还能正常地进行工作,如 ...

  4. STM8L独立看门狗IWDG

    简单扼要 void IWDG_Init(void)//初始化 { IWDG->KR = 0xcc;//启动IWDG IWDG->KR = 0x55;//解除PR及RLR的写保护 IWDG- ...

  5. stm32 独立看门狗学习

    STM32F10xxx内置两个看门狗,提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障. 独立看门狗(IWDG)由专用的低速 ...

  6. IWDG—独立看门狗

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

  7. 第34章 IWDG—独立看门狗—零死角玩转STM32-F429系列

    第34章     IWDG—独立看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

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

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

  9. STM32独立看门狗(IWDG)

    造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作.看门狗就是一种专门用于检测单片机程序运行状态的硬件结构. STM32内部自带了两个看门狗,独立看门狗(IWD ...

随机推荐

  1. shell脚本的调试sh-x

    转至:https://blog.csdn.net/yjgithub/article/details/80908079 目录 一.简介 二.sh -x 脚本名.sh 三.set -x 一.简介 使用sh ...

  2. Pycharm:使用Edit Custom VM Options导致Pycharm无法启动

    解决办法: Edit Custom VM Options用来扩大内存,但是内存设置不当可能会导致Pycharm无法启动 如果无法启动,可以在我的文档中的pycharm201X.X(日期不同名字也不同) ...

  3. IIS部署遇到问题(没有相关资源/权限不足无法读取配置文件)及解决方法

    1:找不到web.config,如下图: 解决办法: 点击目录浏览--打开功能--启用(应用),再次浏览解决 2:再次预览出现别的错误500.19,权限不足,如下图: 解决办法:(右键编辑权限或者右上 ...

  4. (第二章第一部分)TensorFlow框架之文件读取流程

    本章概述:在第一章的系列文章中介绍了tf框架的基本用法,从本章开始,介绍与tf框架相关的数据读取和写入的方法,并会在最后,用基础的神经网络,实现经典的Mnist手写数字识别. 有四种获取数据到Tens ...

  5. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

  6. laravel7 搜索关键字标红及手机号,身份证号隐藏

    控制器代码 public function index(Request $request) { //接受搜索关键字 $word = $request->get('name'); $start = ...

  7. 利用mysqldump 与 nginx定时器 定时备份mysql库

    1.安装mysqldump(如果备份远程mysql库,本地不用安装mysql 也可以单独使用) yum -y install holland-mysqldump.noarch 2.编写备份脚本 首先这 ...

  8. mysql使用group by分组时出现错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and

    问题: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...

  9. 分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘

    Citus 提供对大型数据集的实时查询.我们在 Citus 常见的一项工作负载涉及为事件数据的实时仪表板提供支持. 例如,您可以是帮助其他企业监控其 HTTP 流量的云服务提供商.每次您的一个客户端收 ...

  10. GitLab 常用命令

    1. 进入本地仓库访问位置之后执行命令 1) 远程仓库相关命令检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remot ...