STM32(10)——窗口看门狗
简介:
窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个 MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
看门狗是一个定时器电路,一般有一个输入,叫喂狗。一个输出到mcu正常工作时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果规定超过时间不喂狗,一般程序跑飞,WDT定是超出,就会给一个复位信号到mcu,使mcu复位,防止mcu死机。看门狗的作用就是防止程序发生死循环,或者程序跑飞,对单片机进行状态进行实时监测的考虑。
库函数中用中断的方式来喂狗的方法,窗口看门狗库函数相关源码和定义分布在文件stm32f10x_wwdg.c 文件和头文件 stm32f10x_wwdg.h 中。步骤如下:
1.使能 WWDG 时钟
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 中断的函数为:
WWDG_EnableIT(); //开启窗口看门狗中断
接下来是进行中断优先级配置,使用 NVIC_Init()函数即可。
4.设置计数器初始值并使能看门狗
这 一步在库函数里面是通过一个函数实现的:
void WWDG_Enable(uint8_t Counter);
该函数既设置了计数器初始值,同时使能了窗口看门狗。
5.编写中断服务函数
在最后,还是要编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。
完成了以上 5 个步骤之后,我们就可以使用 STM32 的窗口看门狗了。
static u8 WWDG_CNT=0x7f; /*保存WWDG计数器的设置值,默认为最大. */ /**
* 初始化窗口看门狗
* 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_SetPrescaler(fprer); /*设置IWDG预分频值*/
WWDG_SetWindowValue(wr); /*设置窗口值*/ WWDG_CNT=tr&WWDG_CNT; /* 初始化WWDG_CNT. */
WWDG_Enable(WWDG_CNT); /*使能看门狗 , 设置 counter . */
WWDG_ClearFlag(); /*清除提前唤醒中断标志位*/ WWDG_NVIC_Init();/* 初始化窗口看门狗 NVIC */
WWDG_EnableIT(); /* 开启窗口看门狗中断 */
} /**
* 窗口看门狗中断服务程序
*/
void WWDG_NVIC_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; /*WWDG中断*/
/* 抢占2,子优先级3 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_Init(&NVIC_InitStructure);/* NVIC初始化*/
} /**
* 重设置WWDG计数器的值
*/
void WWDG_Set_Counter(u8 cnt)
{
WWDG_Enable(cnt); /*使能看门狗 , 设置 counter . */
} /**
* 看门狗中断服务程序
*/
void WWDG_IRQHandler(void)
{
WWDG_Set_Counter(WWDG_CNT);
WWDG_ClearFlag(); /*清除提前唤醒中断标志位*/
LED1 = ~LED1; /*LED状态翻转 */
}
调用:WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);/* 计数器值为 7f,窗口寄存器为 5f,分频数为 8 */
STM32(10)——窗口看门狗的更多相关文章
- STM32之窗口看门狗
1.有个7位递减计数器(WWDG->CR),就这个计数器和窗口计数器(WWDG->CFR)决定什么时候喂狗.狗喂早了,复位——“早”体现在 计数器值(tr)>窗口值(wr),也就是计 ...
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料: ...
- stm32 窗口看门狗学习(二)
窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...
- stm32 窗口看门狗学习(一)
什么是窗口看门狗? 1)独立看门狗 限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗 之所以称为窗口就是因为其 ...
- 嵌入式02 STM32 实验09 独立/窗口看门狗
一.独立看门狗和窗口看门狗 看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象导致死循环,或者崩溃,看门狗电路就是为了避免这种情况的发生,看门狗的作用就是在一定的事件内(通过计数器实现)若没有收到喂 ...
- stm32 窗口看门狗 WWDG
窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WW ...
- STM32窗口看门狗WWDG库函数的一点思考
WWDG当前计数器的值以及激活位和WWDG_CR这个寄存器相关.如下图所示: 而STM32f10x的库函数提供了两种设置WWDG_CR[0:6]位的方式. WWDG_SetCounter方法 #def ...
随机推荐
- window 服务注册、卸载
1.以管理员身份打开 命令窗口 2.服务注册命令:sc create myServer binpath= path 3.服务卸载命令:sc delete myServer Topshelf 服务安装 ...
- mysql io过高
背景: 晚上,公司业务群里发信息说,有玩家在游戏里面赠送别人礼物后,赠送记录在20多分钟以后才出现,延时太高. 问题: 公司数据库使用mysql,配置了主从.配置的是,游戏程序写数据到主库,读数据到从 ...
- python全栈学习笔记(一)网络基础之网络协议篇
阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...
- LVM逻辑卷的管理和使用
本篇将从头到尾演示一遍逻辑卷的管理. 主要步骤 1.创建lv逻辑卷步骤 前提:先创建3个磁盘分区,类型为8e: 1.PV创建 pvcrete /dev/ ...
- SVD singular value decomposition
SVD singular value decomposition https://en.wikipedia.org/wiki/Singular_value_decomposition 奇异值分解在统计 ...
- hdu-3388 Coprime---容斥定理&&DFS版
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3388 题目大意: 求同时与m,n互质的第k个数是多少! 解题思路: 和HDU-4135类似,将m和n ...
- list使用方法
转:https://www.cnblogs.com/epeter/p/5648026.html Java中对List集合的常用操作 目录: list中添加,获取,删除元素: list中是否包含某个元素 ...
- 视频(video)属性
Figure 3视频相关的属性: 属性 值 描述 muted muted 定义音频的初始状态,目前仅支持muted. crossorigin 空 定义当前视频是否是一个跨域的项目. me ...
- mybatis实现最简单的增删改查
1.数据库设计 2.项目结构(针对User不用管Blogger) User.java package com.yunqing.mybatis.bean; public class User { pri ...
- ssh调用matplotlib绘图报错RuntimeError: Invalid DISPLAY variable
1.问题:在本地用matplotlib绘图可以,但是在ssh远程绘图的时候会报错 RuntimeError: Invalid DISPLAY variable 2.原因:matplotlib的默认ba ...