1.独立看门狗:

1) 取消寄存器写保护(向 IWDG_KR 写入 0X5555)

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能或者失能

2) 设置独立看门狗的预分频系数和重装载值

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值

void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

注意的是分频的取值范围为0~7,且计算时间为Tout=((4×2^prercaler) ×reload) /40

3) 重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)

IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器

4) 启动看门狗(向 IWDG_KR 写入 0XCCCC)

IWDG_Enable(); //使能 IWDG

这里要注意的是一旦开启了看门狗,就关闭不了了,除非重启。

 void IWDG_Init(u8 prer,u16 rlr)
{
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //①使能对寄存器 I 写操作
  IWDG_SetPrescaler(prer); //②设置 IWDG 预分频值:设置 IWDG 预分频值
  IWDG_SetReload(rlr); //②设置 IWDG 重装载值
  IWDG_ReloadCounter(); //③按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
  IWDG_Enable(); //④使能 IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{
  IWDG_ReloadCounter();//reload
}

2.窗口看门狗:

1) 使能 WWDG 时钟

由于WWDG和IWDG不一样,WWDG使用的是PCLK1时钟,因此使用前要使能时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能

2) 设置窗口值和分频数

void WWDG_SetWindowValue(uint8_t WindowValue);

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);

3) 开启 WWDG 中断并分组

WWDG_EnableIT(); //开启窗口看门狗中断

接下来是进行中断优先级配置,这里就不重复了,使用 NVIC_Init()函数即可。

4) 设置计数器初始值并使能看门狗

void WWDG_Enable(uint8_t Counter);

5) 编写中断服务函数

 u8 WWDG_CNT=0x7f;
//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB) ,仅最低 2 位有效
//Fwwdg=PCLK1/(4096*2^fprer).
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能
  WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.
  WWDG_SetPrescaler(fprer); //设置 IWDG 预分频值
  WWDG_SetWindowValue(wr); //设置窗口值
  WWDG_Enable(WWDG_CNT); //使能看门狗,设置 counter
  WWDG_ClearFlag(); //清除提前唤醒中断标志位
  WWDG_NVIC_Init(); //初始化窗口看门狗 NVIC
  WWDG_EnableIT(); //开启窗口看门狗中断
}
//重设置 WWDG 计数器的值
void WWDG_Set_Counter(u8 cnt)
{
21   WWDG_Enable(cnt); //使能看门狗,设置 counter .
}
//窗口看门狗中断服务程序
void WWDG_NVIC_Init()
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ; //抢占 2 子优先级 3 组 2
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = ; //抢占 2,子优先级 3,组 2
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
}
void WWDG_IRQHandler(void)
{
35   WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位
  WWDG_ClearFlag(); //清除提前唤醒中断标志位
  LED1=!LED1; //LED 状态翻转
}

知识来源:STM32F1开发指南-库函数版本_V3.1

stm32 看门狗配置的更多相关文章

  1. STM8|STM32 看门狗使用

    源:STM8|STM32 看门狗使用 STM8和STM32都配备了独立看门狗,其作用之大不言而喻.以下为STM8及STM32的独立看门狗使用例: 对于STM32单片机: #define SYS_IWD ...

  2. STM32F4xx系列_独立看门狗配置

    看门狗由内部LSI驱动,LSI是一个内部RC时钟,并不是准确的32kHz,然而看门狗对时间的要求不精确,因此可以接收: 关键字寄存器IWDG_KR: 写入0xCCCCH开启独立看门狗,此时计数器开始从 ...

  3. stm32看门狗详细解答,看了觉得一下子明白了很多

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

  4. STM8S 独立看门狗配置及使用

    //独立看门口的时钟来源 内部低速时钟 128khz 除以2 即64khz //选择 IWDG_Prescaler_128 //64/128 =0.5 khz 2ms周期 #define IWDG_5 ...

  5. STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示

    一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料:             ...

  6. STM32F407 窗口看门狗 个人笔记

    窗口看门狗的喂狗时间范围 由框图知: 复位条件是:当且仅当 { 启动位启动 且 { T6为0 (计数器的值减小到0X03F即下限,还没喂狗,即喂狗太晚) 或 计数器的值高于上限时喂狗,即喂狗太早 } ...

  7. STM32之看门狗(独立与窗口)

    广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...

  8. STM32之独立看门狗与窗口看门狗总结

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

  9. MM32看门狗学习(兼容STM32)

    MM32看门狗学习(兼容STM32) IWDG独立看门狗 思维导图 IWDG框图与理解 1.独立看门狗分为两个部分,配置寄存器在1.8V供电区,计数器的核心部分在VDD供电区(即使停机/待机模式计数器 ...

随机推荐

  1. Enumerable扩展方法

    主要记录一些平时在工作中用到操作Enumerable的常用方法 /// <summary> /// The i enumerable extension. /// </summary ...

  2. STL_算法_中使用的函数对象

    写在前面: STL算法中的 函数对象的功能: (1).都是提供一种比较的函数,比较相邻的左右两个值的 相等/大小 等的关系, (2).返回值都是bool :该返回值 貌似是指明 遍历元素是否还要继续往 ...

  3. HDU2017新生赛 友好整数

    思路: 很简单的一个状态压缩,比赛时没想出来. 最多只有2^10个状态,n^2暴力一下也就1e6. 代码: #include<bits/stdc++.h> using namespace ...

  4. 关于Dos命令中存在中文的解决方法

    问题:当我们直接打开dos窗口并在里面写入中文时是没有问题的,但是当我们把这些命令放在bat文件中执行时就出问题了解决:1.首先可以通过pause命令来查看错误原因2.记事本默认是UTF-8格式的,而 ...

  5. python通过get方式,post方式发送http请求和接收http响应-urllib urllib2

    python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/xyc ...

  6. "is not allowed to connect" mysql

    好像过几次,安装mysql时,总会遇到这个问题. 每次都忘怎么解决. 这回写下来吧. 编辑 mysql数据库的 user表太麻烦了, 最简单的方法是加一个用户,以后就用这个用户登录 CREATE US ...

  7. 女生学java是否真的没有优势

    随着女性越来越独立,我们可以看到再以前我们认为不适合女性朋友从事的工作,也出现了越来越多的女生,例如对IT行业也不再跟之前一样畏惧.虽然当下很多人所持的观点依旧是,女生不适合IT行业,但是很多女生已经 ...

  8. 20170711筛选OutLook主题并转发

    Sub 筛选OutLook主题并转发() On Error Resume Next Dim OutApp As Application Set OutApp = Application Dim Out ...

  9. UVA-10710 Skyscraper Floors (找规律+幂取模)

    题目大意:题目中给了一种数的定义,根据定义,让判断一个给定的数是不是这种数.题中叫这种数为吉米数,定义如下:对序列1,2,3,,,,n,做n-1次SF变换(对该变换的解释在下文),如果能得到原序列,则 ...

  10. (转)RocketMQ源码学习--消息存储篇

    http://www.tuicool.com/articles/umQfMzA 1.序言 今天来和大家探讨一下RocketMQ在消息存储方面所作出的努力,在介绍RocketMQ的存储模型之前,可以先探 ...