STM32F103_DDWG窗口看门狗
简介:
独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗时间不能过晚。
而窗口看门狗喂狗时间有个上下限的范围(称为窗口),课以通过设定相关的寄存器,设定其上限时间(下限固定)。喂狗时间不能过晚也不能过早。
1.WWDG主要特性
● 可编程的自由运行递减计数器 ● 条件复位 ─ 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。 ─
当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。
● 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可 以被用于重装载计数器以避免WWDG复位
2.WWDG功能描述
如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从0x40翻转到0x3F(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,将产生一个复位。
看门狗框图
应用程序在正常运行过程中必须定期地写入WWDG_CR寄存器以防止MCU发生复位。只有当计数器值小于窗口寄存器的值时,才能进行写操作。储存在WWDG_CR寄存器中的数值必须在 0xFF和0xC0之间:
● 启动看门狗
在系统复位后,看门狗总是处于关闭状态,设置WWDG_CR寄存器的WDGA位能够开启看 门狗,随后它不能再被关闭,除非发生复位。
●控制递减计数器 递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门狗被启用时,T6位必须被设置,以防止立即产生一个复位。
T[5:0]位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入WWDG_CR寄存器时,预分频值是未知的。 配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在其值 小于窗口寄存器的数值并且大于0x3F时被重新装载,0描述了窗口寄存器的工作过程。
另一个重装载计数器的方法是利用早期唤醒中断(EWI)。设置WWDG_CFR寄存器中的WEI 位开启该中断。当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(ISR)可以用来加载计数器以防止WWDG复位。在WWDG_SR寄存器中写’0’可以清除该中断。
窗口看门狗时序图
3.寄存器描述
3.1.控制寄存器(WWDG_CR)
3.2.配置寄存器(WWDG_CFR)
3.3. 状态寄存器(WWDG_SR)
介绍要如何启用 STM32 的窗口看门狗。这里我们介绍库函数中用中断的方式来喂狗的方法。
1)使能 WWDG 时钟
WWDG 不同于 IWDG,IWDG 有自己独立的 40Khz 时钟,不存在使能问题。而 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。方法是:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能
2)设置窗口值和分频数
void WWDG_SetWindowValue(uint8_t WindowValue);
3.用来设置看门狗的分频值。
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
3)开启 WWDG 中断并分组
开启 WWDG 中断的函数为:
WWDG_EnableIT(); //开启窗口看门狗中断
4) 设置计数器初始值并使能看门狗
void WWDG_Enable(uint8_t Counter);//该函数既设置了计数器初始值,同时使能了窗口看门狗。
5) 编写中断服务函数
在最后,还是要编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。
4.示例代码
.c
include "WWDG.h"
#include "led.h"//保存WWDG计数器的设置值,默认为最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低2位有效
//Fwwdg=PCLK1/(4096*2^fprer).
void WWDG_NVIC_Init()
{NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2,子优先级3,组2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}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);//设置窗口值 ,指定的窗口值。该参数取值必须在 0x40 与 0x7F 之间。WWDG_Enable(WWDG_CNT); // 使能 WWDG 并装入计数器值(1) Counter:指定看门狗计数器值。该参数取值必须在 0x40 与 0x7F 之间。 WWDG_ClearFlag();//清除提前唤醒中断标志位 WWDG_NVIC_Init();//初始化窗口看门狗 NVICWWDG_EnableIT(); //开启窗口看门狗中断
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{WWDG_Enable(cnt);//使能看门狗 , 设置 counter .
}
//窗口看门狗中断服务程序void WWDG_IRQHandler(void) //当计数器值到达0x40之后,执行中断服务函数{WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位 设置 WWDG 计数器值WWDG_ClearFlag(); //清除提前唤醒中断标志位GPIOE->ODR^= 0X1<<5; //LED状态翻转}
.h
#ifndef _WWDG_H_
#define _WWDG_H_
#include "stm32f10x.h"
void WWDG_Init(u8 tr,u8 wr,u32 fprer);
void WWDG_Set_Counter(u8 cnt);#endif
STM32F103_DDWG窗口看门狗相关推荐
- STM32F103ZET6窗口看门狗
1.WWDG简介 窗口看门狗(WWDG)通常被用来检测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障. WWDG是一个不断往下递减的计数器.当WWDG的计数器递减到固定 ...
- 看门狗(独立看门狗)与窗口看门狗的区别!
看门狗(独立看门狗)与窗口看门狗的区别 在cortex-M系列芯片上有两个看门狗:看门狗(独立看门狗)和窗口看门狗. 1.相同点 都是为了保证CPU程序跑飞 2.独立看门狗 根据内部看门狗时钟频率,装 ...
- 【转载】如何使用STM32的窗口看门狗
STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值 ...
- 【STM32】窗口看门狗 WWDG 实验代码详解
文章目录 main.c wwdg.c wwdg.h main.c #include "led.h" #include "delay.h" #include &q ...
- stm32 独立看门狗和窗口看门狗区别
原文地址https://www.cnblogs.com/pertor/p/9483445.html 一.使用调条件 二.特点对比 三.手册介绍 [注]图中的WDGTB为3表示2^3=8,表示8分频,最 ...
- stm32 窗口看门狗学习(二)
窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...
- stm32 窗口看门狗学习(一)
什么是窗口看门狗? 1)独立看门狗 限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗 之所以称为窗口就是因为其 ...
- stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗
点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...
- 【STM32】窗口看门狗
00. 目录 文章目录 00. 目录 01. WWDG简介 02. WWDG主要特性 03. WWDG功能说明 04. 设置看门狗超时 05. WWDG寄存器 5.1 控制寄存器 (WWDG_CR) ...
最新文章
- SAP MM PO Item Category 内部code的用处?
- html屏幕宽度一体式下拉菜单怎么做_针对白屏埋点,我是这样做的
- 伪类 伪元素 如何区分
- python dict常用操作
- HANA全面上市,成为SAP史上用户数量增长最快的产品之一
- [链表]---链表中环的入口节点
- 2017西安交大ACM小学期数论 [阅兵式]
- python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...
- Git的使用——解决中文乱码
- Synchronized 锁升级机制
- qt中如何模拟按钮点击_怎么在qt中实现一个按钮列表?
- 【图像加密】基于LSB算法实现图像隐写含Matlab源码
- 图解HTTP读书笔记
- 小甲鱼(鱼C)课后作业代码 39讲
- 计算机c盘中哪些东西能删除吗,电脑c盘哪些文件可以删除,教您c盘里哪些文件可以删除...
- Deepgreen/Greenplum删除节点步骤
- 芝诺数解|「十六」绿水青山就是金山银山——重庆环保
- 计算机视觉方向就业怎么样?可以做什么?
- Android 9.0 framework 授予安装未知来源应用权限(去掉未知来源弹窗)
- PyQt5 | PyQt5环境配置及组件介绍