STM32-窗口看门狗-工作过程-配置-实验

窗口看门狗

窗口看门狗概述

之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。

窗口看门狗工作示意图

计数器从初值计数到上窗口的值,不能喂狗,必须在上窗口值到0x3f值这个过程中喂狗。0x3f=0011 1111,所以0x3f上面一个数是0100 0000,也就是说t6位由1跳变为0.如果说t6位由1跳变为0,并且仍然没有喂狗,那么就复位。

在这里插入图片描述

窗口看门狗框图:

在这里插入图片描述

窗口看门狗工作过程总结

STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位:
当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
当计数器的数值从0x40减到0x3F时【T6位跳变到0】。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位。中断时间不宜过长。

窗口看门狗超时时间

在这里插入图片描述

为什么要窗口看门狗?

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;
如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行、非正常地跳过了某些程序段的情况。

窗口看门狗注意事项:

上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。

常用寄存器和库函数配置

控制寄存器WWDG_CR

在这里插入图片描述

配置寄存器WWDG_CFR

在这里插入图片描述

在这里插入图片描述

状态寄存器WWDG_SR

可以通过查这个标志位来判断是否到达0x40.

在这里插入图片描述

WWDG操作HAL库函数

HAL_WWDG_Start是启动看门狗,HAL_WWDG_Start_IT还开启了提前唤醒中断

HAL_StatusTypeDef   HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);
void     HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg);
HAL_StatusTypeDef HAL_WWDG_Start(WWDG_HandleTypeDef *hwwdg);
HAL_StatusTypeDef HAL_WWDG_Start_IT(WWDG_HandleTypeDef *hwwdg);
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);
void     HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg);
void     HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg);

窗口看门狗配置过程

1.使能窗口看门狗时钟:
HAL_WWDG_MspInit中
2.初始化窗口看门狗:设置分频系数,窗口值,计数值等。
HAL_WWDG_Init();
该函数还可以使能窗口看门狗提前唤醒中断 。
3.设置提前唤醒中断优先级:
HAL_WWDG_MspInit
4.编写提前唤醒中断处理函数,喂狗:
HAL_WWDG_EarlyWakeupCallback();
HAL_WWDG_Refresh();

窗口看门狗实验

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "exti.h"void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{__HAL_RCC_WWDG_CLK_ENABLE();//使能时钟HAL_NVIC_EnableIRQ(WWDG_IRQn);				//使WWDG_IRQn断通道HAL_NVIC_SetPriority(WWDG_IRQn,3,3);			//抢占优先级3,子优先级3
}
WWDG_HandleTypeDef wwdg_handler;void WWDG_IRQHandler(void)
{HAL_WWDG_IRQHandler(&wwdg_handler);}
void HAL_WWDG_WakeupCallback(WWDG_HandleTypeDef* hwwdg)
{HAL_WWDG_Refresh(&wwdg_handler,0x7f);LED1=!LED1;
}
int main(void)
{HAL_Init();                     //初始化HAL库   Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhzdelay_init(180);                //初始化延时函数uart_init(115200);              //初始化USARTLED_Init();                     //初始化LED EXTI_Init();LED0 = 0;delay_ms(300);wwdg_handler.Instance=WWDG; wwdg_handler.Init.Counter=0x7f;//初始值wwdg_handler.Init.Prescaler=WWDG_PRESCALER_8;wwdg_handler.Init.Window=0x5f;//上窗口值HAL_WWDG_Init(&wwdg_handler);HAL_WWDG_Start_IT(&wwdg_handler);while(1){LED0=1;}
}

PCLK1=180/4=45MHZ
45MHZ/4096/8=1373hz
0x7f-0x40+1个时钟=64个时钟
64/1373=0.0466s=22hz
经过0.0466s后执行中断服务函数。
在之前肯定会进入while循环把LED0灯灭掉。
执行中断服务函数之后,LED1灯会进行反转,并对计数值刷新 重新从0x7f计数。
每隔0.0466s,LED1进行一次翻转。开启后LED0只进行一次闪烁。
如果把回调函数中的喂狗操作删掉,那么进行到0x3f后会进行复位,led0会一直进行闪烁。
进行到0x40时,LED1翻转,然后又进行到0x3f,程序又进行复位。最终led0和led1都会闪烁,而且他们的频率相近。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频和视频的基础知识

目录PCM-脉冲编码调制录音的原理记录声音-音频数字化音频数字化-PCM采样采样采样率采样定理量化位深度编码声道(Channel)比特率信噪比编码(Encode)解码(Decode)常见的音频编码和文件格式无损Monkeys AudioF…

神经网络算法-论证单层感知器的局限性

神经网络算法-论证单层感知器的局限性 今天课上学习了一个思路 将真值表转换到平面直角坐标系中 来论证线性可分还是不可分,挺有意思记录一下。 简单感知器模型实际上仍然是MP模型的结构,但是它通过采用监督学习来逐步增强模式划分的能力,达…

python 通过pip安装库 pycharm里面使用第三方库

安装所需的模块(python) pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 首先命令行输入pip3 --version查看是否有pip C:\Users\jym>pip3 --version pip 19.2.3 from d:\program files\python38\l…

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信python实例

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信实例socket是什么?服务器和客户端通信的流程python 实现TCP socket通信例子关于Host和PORT的设置socket函数socket编程思路基于TCP socket的HTTP服务器分析HTTP服务器代码服务器的response文本客户端的r…

判断ROS版本号-ubuntu20.04安装ROS_noetic-修改镜像源

判断ROS版本号-ROS安装-修改镜像源 linux版本:ubuntu20.04 ROS版本:noetic判断ROS版本号安装ROS改镜像源判断ROS版本号 机器人用的是树莓派、stm32、ros。 首先要配置网络,把机器人上的sd卡插到树莓派开发板上,然后配置连接的热点。 接下来&#xff0…

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令ROS是什么ROS文件系统文件系统工具:rospack、roscd、rosls创建ROS 软件包catkin是什么创建和构建一个catkin工作空间:catkin软件包的结构catkin工作空间中存放软件包的结构创建catkin软件包-catkin_c…

ubuntu 中 ROS 一些报错的解决

1. Unable to load type jymubuntu:~/catkin_ws$ rosservice args /add_two_ints ERROR: Unable to load type [beginner_tutorials/AddTwoInts]. Have you typed make in [beginner_tutorials]?由于当前使用的终端的工作环境没有更新导致无法找到自定义的消息。使用下面的命…

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本rosedmsg和srv创建msg使用rosmsg创建srv使用rossrv重新make一下软件包编写发布者节点发布者节点代码解析编写订阅者节点订阅者节点代码解析构建节点运行发布者和订阅者节点编写服务节点编写客户端节…

从空间中理解线性代数

线性代数-从空间中理解总结向量线性组合空间的基 Basis张成的空间 Span线性相关和线性无关向量空间的一组基变换线性变换数值描述线性变换复合变换行列式矩阵的用途线性方程组逆矩阵列空间零空间秩非方阵基变换基变换矩阵特征向量 特征值特征基关于坐标总结 空间中不共线的两个…

python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

python 做视频后期单个视频转图片所有图片转视频视频压缩 - ffmpeg图片降低分辨率图像处理这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。 对视频进行后期处理,思路就是,视频转图片,然后对图片进行处理…

矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积

一小部分矩阵论的整理复习,这个由于公式输入的太麻烦了,所以就弄了一点。后面直接看着书复习的。 矩阵论复习线性空间基与维数基变换公式、过渡矩阵、坐标变换公式线性子空间齐次方程组的解空间特征子空间生成子空间交空间和空间维数定理直和线性映射线性…

使用Anaconda3安装pytorch、paddle环境并在pycharm里面进行环境测试

安装完Anaconda后,也配好了框架的环境,接下来就需要在pycharm里面写代码了。 Anaconda里面的一些命令 1.新建环境,pytorch 是自己命的名(新建虚拟环境)conda create -n pytorch python3.82.看conda 环境中&#xff0…

Anaconda配置的环境里面增加第三方库的方法

用Anaconda3配置了paddle框架的环境,但是环境里面没有项目代码用到的一些包,比如matplotlib。 在Anaconda的Powershall里面输入如下内容可以增加一些包: 有三句话,第一句是看在conda 环境中,创建的所有环境。 第二句话…

python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量

python numpy常用操作 Numpy基本操作 # 导入numpy import numpy as np # 生成numpy数组 x np.array([1.0, 2.0, 3.0]) print(x) # [1. 2. 3.] print(type(x)) # <class numpy.ndarray> # Numpy的算术运算 x np.array([1.0, 2.0, 3.0]) y np.array([2.0, 4.0, 6.0]…

【数据结构】——期末复习题题库(1)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

感知机实现与、或、与非门和异或门

机器学习-感知机【perceptron】what is 感知机单层感知机运用实例多层感知机what is 感知机 感知机接收多个输入信号&#xff0c;输出一个信号。 接收两个信号的感知机&#xff0c;如下图&#xff1a; x1与x2是输入信号&#xff1b;y是输出信号&#xff1b; w1与w2是权重。圆…

神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现what is 激活函数激活函数的python实现python实现阶跃函数python实现sigmoid函数python实现ReLU函数激活函数的特点what is 激活函数 感知机的网络结构如下&#xff1a; 左图中&#xff0c;偏置b没有被画出来&#xff0c;如果要表示出b&…

下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

下载MNIST数据集并使用python将数据转换成NumPy数组首先来分析init_mnist函数接下来继续分析load_mnist函数实现数据集转换的python脚本的代码显示MNIST图像并确认数据下载MNIST数据集并将数据转换成NumPy数组的Python脚本里面最重要的就是load_mnist函数&#xff0c;其他项目想…

使用python构建三层神经网络、softmax函数

【机器学习】使用python手写三层神经网络输入层到第一层的传递表示第一层到第二层的传递表示第二层到第三层的传递表示全过程传递表示代码输入层到第一层的传递表示 首先看输入层到第一层的第一个神经元的信号传递过程&#xff1a; 可以用数学式子表示第一层的第一个神经元的值…

使用python对数据集进行批处理

【机器学习】使用python对数据集进行批处理 只输入一张图像数据过程和一次性处理100张图像数据过程中&#xff0c;数组形状变换如下图所示&#xff1a; 这些数组形状可以在代码中输出出来&#xff1a; def get_data():(x_train, t_train), (x_test, t_test) load_mnist(norm…