【STM32开发之寄存器版】(五)-窗口看门狗WWDG

news/2024/10/8 10:46:29 标签: stm32, 单片机, 嵌入式硬件

一、前言

窗口看门狗简介:

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

窗口看门狗主要特性:

● 可编程的自由运行递减计数器
● 条件复位
─ 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。
─ 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。
● 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可 以被用于重装载计数器以避免WWDG复位。

窗口看门狗适用场景:

WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

本次DEMO的目标:

在本次DEMO中将使用窗口看门狗的中断功能来喂狗,通过STM32F103ZET6开发板的DS0和DS1来提示程序的运行状态。

二、时钟树解析

窗口看门狗WWDG是AHB-APB1总线下的外设,其时钟来源于APB1下的PCLK1时钟,本次实验中,将外部高速时钟HSE(8MHz)用锁相环PLL倍频9倍至72MHz作为系统时钟SYSCLK,AHB1分频系数为1(不分频,仍为72MHz),APB1分频系数为2(2分频,达到PCLK1最大频率36MHz),最后供给WWDG外设的基础时钟为36MHz。具体流程如下所示:

三、窗口看门狗功能介绍

窗口看门狗的时序图如下所示:

其中:

  • T[6:0]:控制寄存器(WWDG_CR)的低7位。
  • W[6:0]:配置寄存器(WWDG_CFR)的低7位,为窗口看门狗的上窗口。
  • 3Fh:下窗口0X40的边界。

当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。

窗口看门狗的超时公式如下:

其中:

  • Twwdg:WWDG超时时间(单位ms)
  • Fpclk1:APB1的时钟频率(单位KHz)
  • WDGTB:WWDG的预分频系数
  • T[5:0]:窗口看门狗的计数器低6位

根据第二节时钟树解析,设置Fpclk=36MHz,那么可以得到最大-最小超时时间表如下所示:

WDGTB最小超时值最大超时值
0113μs7.28ms
1227μs14.56ms
2455μs29.12ms
3910μs58.25ms

四、寄存器介绍

对WWDG的程序设计主要涉及3个寄存器:

寄存器作用
WWDG_CR控制寄存器
WWDG_CFR配置寄存器
WWDG_SR状态寄存器

下面将对这几个寄存器进行一一介绍。

4.1 WWDG_CR控制寄存器

《STM32中文参考手册》对WWDG_CR寄存器的描述如下:

  • WWDG_CR控制寄存器只有低8位有效。其中T[6:0]存储的是看门狗的计数器值,当计数器值从40h变为3FH时(T6变为0),产生看门狗复位。
  • WDGA 位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。

4.2 WWDG_CFR配置寄存器

《STM32中文参考手册》对WWDG_CFR寄存器的描述如下:

该位中的 EWI 是提前唤醒中断,也就是在快要产生复位的前一段时间(T[6:0]=0X40)来提醒我们,需要进行喂狗了,否则将复位!因此,我们一般用该位来设置中断,当窗口看门狗 的计数器值减到 0X40 的时候,如果该位设置,并开启了中断,则会产生中断,我们可以在中断里面向 WWDG_CR 重新写入计数器的值,来达到喂狗的目的。注意这里在进入中断后,必须在不大于 1 个窗口看门狗计数周期的时间(在 PCLK1 频率为 36M 且 WDGTB 为 0 的条件下,该时间为 113us)内重新写 WWDG_CR,否则,看门狗将产生复位!

4.3 WWDG_SR状态寄存器

《STM32中文参考手册》对WWDG_SR寄存器的描述如下:

该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1。它必须通过软件写 0 来清除。对此位写 1 无效。即使中断未被使能,在计数器的值达到 0X40的时候,此位也会被置 1。

五、程序设计

对于窗口看门狗的程序设计主要分为3个部分:窗口看门狗初始化、重置WWDG计数器的值、窗口看门狗中断服务程序。

5.1 窗口看门狗初始化

该部分程序位于HARDWARE/wdg.c/WWDG_Init(),主要功能是使能APB1下wwdg时钟、通过WWDG_CFR寄存器设置窗口值,通过WWDG_CR寄存器设置计数器值并开启看门狗,注册WWDG中断(中断号0),软件清除提前唤醒标志位并使能提前唤醒中断。具体程序如下所示:

//初始化窗口看门狗 	
//tr   :T[6:0],计数器值 
//wr   :W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 
void WWDG_Init(u8 tr,u8 wr,u8 fprer) 
{    
	RCC->APB1ENR|=1<<11; 	//使能wwdg时钟 
	WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     
	WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer 
	WWDG->CFR&=0XFF80;      
	WWDG->CFR|=wr;     		//设定窗口值      
	WWDG->CR|=WWDG_CNT; 	//设定计数器值 
	WWDG->CR|=1<<7;  		//开启看门狗      
	MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2     
	WWDG->SR=0X00; 			//清除提前唤醒中断标志位 
	WWDG->CFR|=1<<9;        //使能提前唤醒中断 
} 

5.2 重置WWDG计数器的值

该部分程序位于HARDWARE/wdg.c/WWDG_Set_Counter(),主要功能是通过WWDG_CR寄存器重置7位计数器,相当于喂狗。具体程序如下所示:

//重设置WWDG计数器的值 
void WWDG_Set_Counter(u8 cnt) 
{ 
	WWDG->CR =(cnt&0x7F);//重设置7位计数器 
} 

5.3 窗口看门狗中断服务程序

该部分程序位于HARDWARE/wdg.c/WWDG_IRQHandler(),主要功能是在中断中喂狗(重置WWDG计数器的值),软件清除提前唤醒中断标志位,并控制DS1翻转(提示信息)。具体代码如下所示:

//窗口看门狗中断服务程序 
void WWDG_IRQHandler(void) 
{      
	WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!         
	WWDG->SR=0X00;//清除提前唤醒中断标志位 
	LED1=!LED1; 
}

六、上机实验

将代码烧录至STM32F103ZET6,窗口看门狗不断触发中断,DS1灯不停闪烁,如下所示:


http://www.niftyadmin.cn/n/5694028.html

相关文章

CompletionFormer 点云补全 学习笔记

目录 依赖项 数据集 KITTI DC NYUv2 提供深度图 模型 依赖项 conda create -n completionformer python3.8 conda activate completionformer # For CUDA Version 11.3 pip install torch1.10.1cu113 torchvision0.11.2cu113 torchaudio0.10.1cu113 pip install mmcv-fu…

开放式耳机是什么意思?分享几款适合各类运动佩戴的蓝牙耳机

其实目前有很多热爱运动的人士常常会陷入一个纠结之中&#xff0c;那就是在进行爬山、骑行、步行、跑步或者健身等各类运动的时候&#xff0c;到底佩戴什么样的蓝牙耳机才最为合适呢&#xff1f;那就我个人而言&#xff0c;我觉得开放式耳机无疑会是运动人士的救星。因为作为一…

信息安全工程师(37)防火墙概述

前言 防火墙是一种网络安全系统&#xff0c;旨在监控和控制网络流量&#xff0c;根据预定义的安全规则决定是否允许数据包的传输。 一、定义与功能 定义&#xff1a;防火墙是网络安全的第一道防线&#xff0c;由硬件设备和软件系统共同构成&#xff0c;位于外网与内网之间、公共…

ReactRouter快速梳理

快速开始 创建项目并安装所有依赖 npx create-react-app react-router-pro安装最新的reactrouter包 npm i react-router-dom启动项目 npm run start搭建路由&#xff08;index.js) //index.js项目的入口 从这里开始运行//react必要的两个核心包 import React from react; impo…

力扣16~20题

题16&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 双指针法&#xff0c;和15题差不多&#xff0c;就是要排除了&#xff0c;如果total<target则排除了更小的&#xff08;left右移&#xff09;&#xff0c;如果total>target则排除了更大的&#xff08;rig…

使用 Maven 与 Spring Boot 集成的详细指南

一、Maven 简介 Maven 是一个基于 POM&#xff08;Project Object Model&#xff09;的项目管理工具&#xff0c;它提供了以下功能&#xff1a; 依赖管理&#xff1a;Maven 可以轻松地管理项目所需的第三方库&#xff0c;并能自动解决库之间的依赖关系。构建自动化&#xff1…

【EXCEL数据处理】000021 案例 保姆级教程,附多个操作案例。EXCEL文档安全性设置。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000021 案例 保姆级教程&#xff0c;附多个操作案例。…

微信小程序学习实录9:掌握wx.chooseMedia实现多图片文件上传功能(选择图片、预览图片、上传图片)

要实现多图片上传到服务器&#xff0c;需要在小程序前端和PHP后端分别进行相应的设置。 基本流程 微信小程序提供了丰富的API来支持多图片上传功能。在微信小程序中实现多图片的选择、预览以及上传到服务器的功能&#xff1a; 1. 选择图片 使用 wx.chooseImage API 可以让用…