14.4.2 窗口看门狗实验
功能:程序一运行使得接在PB5上的LED1亮300ms后关闭,进入死循环。等待WWDG中断的到来,在中断里面,喂狗,并对PE5上的LED2进行翻转操作。可以看到LED2不停的闪烁,LED1只在刚启动的时候闪一下。
(1)在上一个实验的wdg.h文件的函数列表区域添加以下代码。
void WWDG_Init( u8 tr, u8 wr, u8 fprer ) ; //窗口看门狗初始化
(2)在上一个实验的wdg.c文件末尾添加以下代码。
/***************************************************
Name :WWDG_IRQHandler
Function :窗口看门狗中断服务程序
Paramater :None
Return :None
***************************************************/
void WWDG_IRQHandler()
{
WWDG->CR = 0x7F ; //重设置7位计数器
WWDG->SR = 0x00 ; //清除提前唤醒中断标志位
LED2 != LED2 ;
}
/***************************************************
Name :WWDG_Init
Function :窗口看门狗初始化
Paramater :
tr:计数器值
wr:窗口值
fprer:分频系数
Return :None
***************************************************/
void WWDG_Init( u8 tr, u8 wr, u8 fprer )
{
RCC->APB1ENR |= 1<<11 ; //使能wwdg时钟
WWDG->CFR |= fprer<<7 ; //PCLK1/4096再除2^fprer
WWDG->CFR &= 0xFF80 ;
WWDG->CFR |= wr ; //设定窗口值
WWDG->CR |= tr&0x7F ; //设定计数器值
WWDG->CR |= 1<<7 ; //开启看门狗
NVIC_Init( 2, 3, WWDG_IRQn, 2 ) ; //抢占2,子优先级3,组2
WWDG->SR = 0x00 ; //清除提前唤醒中断标志位
WWDG->CFR |= 1<<9 ; //使能提前唤醒中断
}
注:由于在中断服务函数中引用了LED2,所以需要添加头文件#include “led.h”。
(3)创建led.h文件,并输入以下代码。
#ifndef _LED_H_
#define _LED_H_
#include "sys.h"
/*********************************************************************************************************
硬 件 端 口
*********************************************************************************************************/
#define LED1 PBout( 5 ) //定义LED1端口
#define LED2 PEout( 5 ) //定义LED2端口
/*********************************************************************************************************
函 数 列 表
*********************************************************************************************************/
void LED_Init( void ) ; //LED初始化
#endif
(4)创建led.c文件,并输入以下代码。
#include "led.h"
/***************************************************
Name :LED_Init
Function :LED初始化
Paramater :None
Return :None
***************************************************/
void LED_Init()
{
RCC->APB2ENR |= 1<<3 ;
GPIOB->CRL &= 0xFF0FFFFF ;
GPIOB->CRL |= 0x00300000 ;
RCC->APB2ENR |= 1<<6 ;
GPIOE->CRL &= 0xFF0FFFFF ;
GPIOE->CRL |= 0x00300000 ;
LED1 = 1 ;
LED2 = 1 ;
}
(5)在1.c文件中输入以下代码。
#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "led.h"
#include "wdg.h"
/***************************************************
Name :main
Function :主函数
Parameter :None
Return :None
***************************************************/
int main()
{
STM32_Clock_Init( 9 ) ; //STM32时钟初始化
SysTick_Init( 72 ) ; //SysTick初始化
USART1_Init( 72, 115200 ) ; //初始化串口1波特率115200
LED_Init() ; //LED初始化
LED1 = 0 ; //点亮DS0
delay_ms( 300 ) ; //延时300ms,让人可以看到DS0亮的状态
WWDG_Init( 0x7F, 0x5F, 3 ) ; //计数器值为7f,窗口寄存器为5f,分频数为8
while( 1 )
{
LED1 = 1 ; //熄灭LED1
}
}
14.5 为何STM32要同时存在窗口看门狗与独立看门狗
14.5.1 独立看门狗的使用条件
(1)程序跑飞
(2)出现死循环
(3)睡眠与休眠不合理
(4)外部主晶振损坏
(5)需要重新复位,且不保留任何数据
14.5.2 窗口看门狗使用条件
(1)软件逻辑出现错误
(2)死机或者死循环
(3)软件执行不按预期效果执行
(4)软件需要重新复位,但是保留所有数据
14.5.3 两者的区别
(1)独立看门狗使用内部专用40kHz低速时钟
窗口看门狗则使用PCLK1的时钟
(2)独立看门狗没有中断,超时直接复位
窗口看门狗有中断,超时可以在中断服务函数中操作或者喂狗
(3)独立看门狗一般用于避免程序跑飞或者死循环
窗口看门狗则是为了避免程序不按照预先设定的逻辑执行
(4)独立看门狗是12位递减操作
窗口看门狗则是6位递减操作
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6078文章
45601浏览量
674186 -
看门狗
+关注
关注
10文章
611浏览量
73239 -
STM32
+关注
关注
2313文章
11196浏览量
374794 -
计数器
+关注
关注
32文章
2321浏览量
98634 -
定时器
+关注
关注
23文章
3376浏览量
124752
发布评论请先 登录
相关推荐
热点推荐
STM32中的独立看门狗和窗口看门狗是什么
在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立看门狗
stm32看门狗时间计算 独立看门狗和窗口看门狗的特性是什么
本文为您讲解STM看门狗时间计算(时限)与频率计算,独立看门狗和窗口看门狗的特性、区别与联系。
发表于 10-10 10:41
•9437次阅读
STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)
stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定
发表于 11-09 17:17
•8929次阅读
STM32的看门狗配置详情解说
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗有自己独立的40Khz时钟,不存
发表于 11-13 11:17
•4977次阅读
基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法
基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
MCU学习笔记_IWDG独立看门狗
MCU学习笔记IWDG独立看门狗1. IWDG独立看门狗概述2. 寄存器和HAL库函数配置3. 实例1. IWDG独立看门狗概述
发表于 10-28 20:21
•9次下载
STM32学习心得十六:独立看门狗实验
记录一下,方便以后翻阅~主要内容:1) 独立看门狗概述;2) 常用寄存器和库函数配置;3) 独立看门狗实验代码解读。官方资料:《STM32
发表于 12-27 18:44
•6次下载
STM32中的独立看门狗和窗口看门狗
一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立
STM32入门学习笔记之看门狗实验(下)
评论