STM32开发(十八)STM32F103 片内资源 —— 窗口看门狗 WWDG 详解

news2024/11/15 11:21:08

文章目录

    • 一、基础知识点
    • 二、开发环境
    • 三、STM32CubeMX相关配置
    • 四、Vscode代码讲解
    • 五、结果演示


一、基础知识点

独立看门狗和窗口看门狗的区别:
独立看门狗在系统在待机、停机、睡眠阶段还会起效果,这就会导致在做低功耗的时候,看门狗还是会运作复位。
窗口看门狗时钟来源于系统时钟,因此系统在待机、停机、睡眠阶段窗口看门狗会随之停止工作。

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

WWDG内部框图
在这里插入图片描述
看门狗计数器共7位,WDGA是使能位。
WWDG_CFR为配置寄存器也有7位值和WWDG_CR进行比较输出。
时钟来源于系统时钟,因此系统在待机、停机、睡眠阶段窗口看门狗会停止工作。
WDGTB看门狗预分频器对系统时钟进行分频处理。

窗口看门狗时序图
在这里插入图片描述
横轴为时间,纵轴为计数值(也就是WWDG_CR寄存器)。
计数值有两个数值:

   3Fh: 计数值小于0x40, (若看门狗被启动)则产生复位。
   W[6:0]: 窗口值(也就是WWDG_CFR),值范围0xc0~0xff
由这两个值构成的一段时间就是看门狗的刷新窗口。
计数值刷新必须在看门狗刷新窗口中刷新,如果计数值小于3Fh或者大于W[6:0]区域刷新都会产生系统复位。

看门狗公式中T[5:0]+1是为什么?计数值不应该是T[6:0]吗?
这是由于计数值最低到0x40,也就是说低于0x40就复位,则T[6:0]-0x40 = T[5:0]+1


二、开发环境

1、硬件开发准备
主控:STM32F103ZET6
芯片内部窗口看门狗模块WWDG

2、软件开发准备
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。
该部分可参考:软件开发环境构建


三、STM32CubeMX相关配置

1、STM32CubeMX基本配置
本实验基于CubeMX详解构建基本框架 进行开发。

2、窗口看门狗相关配置
在这里插入图片描述
3、窗口看门狗中断优先级配置(配置最高)
在这里插入图片描述


四、Vscode代码讲解

1、定义窗口看门狗相关结构体并初始化

typedef struct MyWWDG_s
{
  uint32_t WWDG_flag;
  void (*Feed_WDG)(void);
} MyWWDG_t;

extern MyWWDG_t MyWWDG;

MyWWDG_t MyWWDG = 
{
  TRUE,
  Feed_WDG
};

2、窗口看门狗喂狗具体函数实现

static void Feed_WDG(void)
{
  HAL_WWDG_Refresh(&hwwdg);
}

3、重构窗口看门狗中断回调函数

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
    if(MyWWDG.WWDG_flag == TRUE)
    {
        MyWWDG.Feed_WDG();            // 喂狗
    }
}

窗口看门狗中断处理函数解析:

void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
{
  /* 检测窗口看门狗中断是否使能 */
  if (__HAL_WWDG_GET_IT_SOURCE(hwwdg, WWDG_IT_EWI) != RESET)
  {
    /* 检测窗口看门狗中断标志位,是否看门狗中断产生 */
    if (__HAL_WWDG_GET_FLAG(hwwdg, WWDG_FLAG_EWIF) != RESET)
    {
      /* 清除看门狗标志位 */
      __HAL_WWDG_CLEAR_FLAG(hwwdg, WWDG_FLAG_EWIF);

      /* 调用看门狗中断回调函数,这是个弱函数允许用户重构 */
      HAL_WWDG_EarlyWakeupCallback(hwwdg);
    }
  }
}

测试看门狗部分,通过之前触摸按键控制喂狗动作(改变看门狗标志位WWDG_flag)

static void Key3_Monitoring_Function(void)
{
  if(Key3.key_flag == TRUE)
  {
    Key3.key_press = FALSE;
    Key3.key_hold = TRUE;

    for(int i=0; i<200; i++)
    {
      HAL_Delay(10);

      if(GPIO_PIN_SET == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin))
      {
        Key3.key_press = TRUE;
        Key3.key_hold = FALSE;
        break;
      }
    }
  }

  if( Key3.key_press == TRUE )
  {
#ifdef STM32_F407_WWDG
    MyWWDG.WWDG_flag = FALSE;
    printf(" System restart \n\r ");
#endif
    LED3_Toggle;
  }

  if( Key3.key_hold == TRUE )
  {
    LED3_ON;
    HAL_Delay(500);
    LED3_OFF;
  }

  Key3.key_flag = FALSE;
  Key3.key_press = FALSE;
  Key3.key_hold = FALSE;
}


五、结果演示

在这里插入图片描述

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

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

相关文章

Elasticsearch:定制 Elasticsearch 镜像

在很多时候&#xff0c;我们希望定制我们的 Elasticsearch 镜像&#xff0c;比如&#xff0c;我们需要安装一些额外的插件&#xff0c;或者如果我们想要一个带有同义词文件和自定义配置的 Elasticsearch&#xff1f;或者我们需要一些相应的配置等。我们想在每次的 docker 部署中…

华为实习笔试复盘(1)配送站和客户问题

写在前面 自己玩了很多项目&#xff0c;但是最近准备秋招的过程中&#xff0c;发现自己对于算法和编程语言的基本功夫实在是太欠缺了。 投递了华为的实习岗位&#xff0c;4.26参加机考&#xff0c;一做题就发现了自己很多地方都不会。这里写下笔试后的复盘以警醒自己。 题目 …

服务网关Gateway

前言 API 网关出现的原因是微服务架构的出现&#xff0c;不同的微服务一般会有不同的网络地址&#xff0c;而外部客户端可能需要调用多个服务的接口才能完成一个业务需求&#xff0c;如果让客户端直接与各个微服务通信&#xff0c;会有以下的问题&#xff1a; 破坏了服务无状态…

python毕业设计之django+vue企业员工在线办公OA系统

该系统分用户和管理员。 管理员界面&#xff0c;具有以下功能&#xff1a; &#xff08;1&#xff09;添加用户&#xff1a;管理员添加本系统的用户信息。 &#xff08;2&#xff09;添加部门信息&#xff1a;管理员添加本系统的部门信息。 &#xff08;3&#xff09;添加职位信…

GLM:ChatGLM的基座模型

介绍 ChatGLM-6B&#xff1a;https://github.com/THUDM/ChatGLM-6B &#xff0c;主要是能够让我们基于单卡自己部署。ChatGLM的基座是GLM: General Language Model Pretraining with Autoregressive Blank Infilling论文中提出的模型。 动机 预训练语言吗模型大体可以分为三…

【MySQL约束】数据管理实用指南

1、数据库约束的认识 数据库约束的概念&#xff1a;数据库的约束是关系型数据库的一个重要的功能&#xff0c;它提供了一种“校验数据”合法性的机制&#xff0c;能够保证数据的“完整性”、“准确性”和“正确性” 数据库的约束&#xff1a; not null&#xff1a;不能存储 nul…

最强Http缓存策略之强缓存和协商缓存的详解与应用实例

HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地&#xff0c;以便下次请求时能够直接从缓存中获取资源&#xff0c;从而减少网络请求次数&#xff0c;提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。 一. 强缓存 强缓存是指浏览器直接从本…

javaweb权限管理简单实现_javaweb管理系统项目

最近在做一个网站类型项目&#xff0c;主要负责后台&#xff0c;ui框架选型为jquery easy ui&#xff0c;项目架构为spring mvc spring jdbc&#xff0c;简单易用好上手&#xff01;搭建好框架后开始了第一个任务&#xff0c;设计并实现一套简单的权限管理功能。 一套最基本的…

深度学习第J8周:Inception v1算法实战与解析

目录 一、Inception v1 1.简介 2. 算法结构 二、pytorch代码复现1.前期准备 2.代码复现 3.训练运行 3.2指定图片进行预测 三、总结 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作…

ChatGPT登陆方法及常见问题

Chatgpt现在推出ChatGPT Plus服务&#xff0c;所以对注册账号限制比较大 Plus账号有什么优势&#xff1f; 我们可以看到官方介绍&#xff1a; 优势1 Available even when demand is high 当访问量大时&#xff0c;依旧可以访问 优势2 Faster response speed 更快的回复速度…

无云服务器,Linux本地快速搭建web网站,并内网穿透发布上线

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章&#xff1a;Linux CentOS本地搭建…

医疗器械的分类与查询

我国根据医疗器械产品安全性对医疗器械进行分类管理。分类目录由国家食品药品监督管理部门依据医疗器械分类规则制定&#xff1a; 第一类是风险程度低&#xff0c;实行常规管理可以保证其安全、有效的医疗器械。如&#xff1a;外科用手术器械&#xff08;刀、剪、钳、镊、钩&a…

RabbitMQ 工作队列模式 Work Queue Demo

工作队列模式,一个消息只能有一个消费者消费 生产者发送20条消息 消费者有两个 第一个消费 睡一秒取一个 第二个睡2秒取 public class WorkConsumerTest1 {public static void main(String[] args) throws IOException, TimeoutException {//1 创建连接工厂ConnectionFactor…

「华熙生物」发来感谢信,企企通赋能生物科技领域数字化采购建设

近日&#xff0c;华熙生物科技股份有限公司&#xff08;以下简称“华熙生物”&#xff09;携手企企通打造的数字化采购管理平台成功上线。为感谢企企通在采购数字化项目上的付出和努力&#xff0c;华熙生物特意发来暖心感谢信。 在感谢信中&#xff0c;华熙生物表示&#xff1a…

【目标检测实验系列】YOLOv5改进实验:结合VariFocal Loss损失函数,减少小目标漏检问题,高效提升模型检测的召回率(超详细改进代码流程)

目录 1. 文章主要内容2. VariFocal Loss损失函数&#xff08;原理&#xff1a;简单介绍&#xff0c;可自行详细研究&#xff09;2.1 VariFocal Loss损失函数2.2 博主数据集实验效果 3. 代码详细改进流程(重要)3.1 新建varifocalLoss.py文件3.2 修改hyp.scratch-low.yaml文件3.3…

【MATLAB图像处理实用案例详解(20)】——利用BP神经网络实现人脸朝向判断

目录 一、问题描述二、算法步骤2.1 读入数据并提取特征2.2 创建神经网络并训练2.3 测试 三、结果分析 一、问题描述 BP神经网络利用输出后的误差来估计输出层的直接前导层的误差&#xff0c;再用这个误差估计更前一层的误差&#xff0c;如此一层一层的反传下去&#xff0c;就获…

4_用dockerfile制作镜像

Docker 镜像原理 思考&#xff1a; Docker 镜像本质是什么&#xff1f; Docker 中一个centos镜像为什么只有200MB&#xff0c;而一个centos操作系统的iso文件要几个个G&#xff1f; Docker 中一个tomcat镜像为什么有500MB&#xff0c;而一个tomcat安装包只有70多MB&#xff…

JavaScript中的Concurrency并发:异步操作下的汉堡制作示例

这篇文章想讲一下JavaScript中同步与异步操作在一个简单的示例中的应用。我们将以制作汉堡为例&#xff0c;展示如何使用同步方法、回调函数&#xff08;callbacks&#xff09;和Promise与async/await来实现该过程。 Let’s imagine we’re trying to make a burger: 1. Get …

基于simulink使用混合波束成形对射频毫米波发射器进行建模

一、前言 本例说明了一种使用66元件混合波束成形天线对32 GHz QPSK射频发射和接收系统进行系统级建模和仿真的方法。该系统包括射频缺陷、发射阵列辐射效应、窄带接收阵列和基带接收器&#xff0c;可校正系统损伤和消息解码。天线波束形成方向使用方位角和仰角定义&#xff0c;…

C语言CRC-16 USB格式校验函数

C语言CRC-16 USB格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同应用规范通过对输…