PY32F003F18之窗口看门狗
一、PY32F003F18窗口看门狗特点:
即使窗口看门狗被禁止,窗口看门狗的"递减计数器"也会继续递减计数。
二、窗口看门狗复位的条件:
1、将"控制寄存器WWDG_CR"中的WDGA=1,激活"窗口看门狗计数器等于0x3F"时,则产生复位
2、装载"窗口看门狗的计数器值"大于"窗口看门狗window寄存器的值",则产生复位。
3、窗口看门狗的"提前唤醒中断EWI=1",且"窗口看门狗递减计数器的值"达到0x40时,则产生EWI中断。
其中断处理程序处理完后,则产生复位。
4、装载"窗口看门狗计数器值"的条件:
递减计数器的值小于或等于窗口寄存器的数值,并且大于0x3F时,才可以向"窗口看门狗计数器值"写入新值,否则会引起复位。
三、窗口看门狗框图:
四、窗口看门狗装载计数器值的时间图:
五、测试程序:
#include "WWDG.h"
#include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()/*
即使窗口看门狗被禁止,窗口看门狗的"递减计数器"也会继续递减计数;
窗口看门狗复位的条件:
1、将"控制寄存器WWDG_CR"中的WDGA=1,激活"窗口看门狗计数器等于0x3F"时,则产生复位
2、装载"窗口看门狗的计数器值"大于"窗口看门狗window寄存器的值",则产生复位。
3、窗口看门狗的"提前唤醒中断EWI=1",且"窗口看门狗递减计数器的值"达到0x40时,则产生EWI中断。
其中断处理程序处理完后,则产生复位。
4、装载"窗口看门狗计数器值"的条件:
递减计数器的值小于或等于窗口寄存器的数值,并且大于0x3F时,才可以向"窗口看门狗计数器值"写入新值,
否则会引起复位。
*/uint32_t WWDG_Config(void);
void WWDG_Counter_Reload(void);
void SysRstSrcRecord(void);uint32_t WWDG_Config(void)
{WWDG_HandleTypeDef WwdgHandle;uint32_t timeoutvalue = 0;uint32_t pclk1 = 0;uint32_t wdgtb = 0;__HAL_RCC_WWDG_CLK_ENABLE(); //使能WWDG时钟WwdgHandle.Instance = WWDG; //选择WWDGWwdgHandle.Init.EWIMode = WWDG_EWI_DISABLE; //窗口看门狗计数器值到达0x40时不会产生中断WwdgHandle.Init.Prescaler = WWDG_PRESCALER_8; //窗口看门狗的预分频器值:选择8分频WwdgHandle.Init.Counter = 0x7F; //窗口看门狗计数器值(7位): 0x7FWwdgHandle.Init.Window = WWDG_Window_Value; //窗口看门狗窗口值(7位): 0x40~0x7fHAL_WWDG_Init(&WwdgHandle);//WWDG初始化
//hwwdg->Init.EWIMode=WWDG_EWI_ENABLE,使能窗口看门狗计数器值到达0x40时产生中断
//hwwdg->Init.EWIMode=WWDG_EWI_DISABLE,窗口看门狗计数器值到达0x40时不会产生中断
//hwwdg->Init.Prescaler表示窗口看门狗的预分频器值
//窗口看门狗产生复位的时间: (hwwdg->Init.Counter - hwwdg->Init.Window + 1 ) * tPCLK * 4096 * 窗口看门狗的预分频器值timeoutvalue=(WwdgHandle.Init.Counter - WwdgHandle.Init.Window) + 1;//计算"窗口看门狗计数器值"和"窗口看门狗窗口值"的差pclk1 = HAL_RCC_GetPCLK1Freq();//获取PCLK的值wdgtb = (1 << ((WwdgHandle.Init.Prescaler) >> 7)); //获取分频值,2^WDGTB[1:0]timeoutvalue = ((4096 * wdgtb * timeoutvalue) / (pclk1 / 1000));//计算超时时间return(timeoutvalue);//返回"窗口看门狗的复位时间",单位为毫秒
}//函数功能:喂狗
void WWDG_Counter_Reload(void)
{WRITE_REG(WWDG->CR,0x7F);//Write to WWDG CR the WWDG Counter value to refresh with 0x7F
}//函数功能:打印CPU复位原因
void SysRstSrcRecord(void)
{uint8_t i;uint8_t Reset_Buffer[11];for(i=0;i<11;i++) Reset_Buffer[i]=0;//清除Reset_Buffer[0] = __HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY);//读取"内部部24MHz时钟源稳定标志"Reset_Buffer[1] = __HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY);//读取"外部4~32MHz时钟源稳定标志"
// Reset_Buffer[2] = __HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY); //读取"PLL时钟稳定标志"
// Reset_Buffer[3] = __HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY);//读取"外部32.768KHz的时钟源稳定标志"Reset_Buffer[4] = __HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY);//读取"内部RC的32KHz时钟源稳定标志"Reset_Buffer[5] = __HAL_RCC_GET_FLAG(RCC_FLAG_PINRST); //读取"外部引脚复位标志"Reset_Buffer[6] = __HAL_RCC_GET_FLAG(RCC_FLAG_PWRRST); //读取"BOR/POR/PDR复位标志"Reset_Buffer[7] = __HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST); //读取"软件复位标志"Reset_Buffer[8] = __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST); //读取"独立看门狗定时器复位标志"Reset_Buffer[9] = __HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST); //读取"窗口看门狗定时器复位标志"Reset_Buffer[10] = __HAL_RCC_GET_FLAG(RCC_FLAG_OBLRST); //读取"Option byte loader复位标志"if( Reset_Buffer[0] ) printf("\r\nHSI OK!");if( Reset_Buffer[1] ) printf("\r\nHSE OK!");
// if( Reset_Buffer[2] ) printf("\r\nPLL OK!");
// if( Reset_Buffer[3] ) printf("\r\nLXTAL OK!");if( Reset_Buffer[4] ) printf("\r\nLSI OK!");if( Reset_Buffer[5] ) printf("\r\nPIN reset!");if( Reset_Buffer[6] ) printf("\r\nPOR reset!");if( Reset_Buffer[7] ) printf("\r\nSWR reset!");if( Reset_Buffer[8] ) printf("\r\nIWDG reset!");if( Reset_Buffer[9] ) printf("\r\nWWDG reset!");if( Reset_Buffer[10] ) printf("\r\nOption byte loader reset!");
}
#ifndef __WWDG_H
#define __WWDG_H#include "py32f0xx_hal.h"#define WWDG_Window_Value 0x50#define _HAL_WWDG_ENABLE(__INSTANCE__) SET_BIT((__INSTANCE__)->CR, WWDG_CR_WDGA)
//将"控制寄存器WWDG_CR"中的WDGA=1,激活"窗口看门狗计数器等于0x3F"时产生复位#define Get_WWDG_Counter(__INSTANCE__) ( (__INSTANCE__)->CR & (~WWDG_CR_WDGA) )
//读窗口计数器的值extern uint32_t WWDG_Config(void);
extern void WWDG_Counter_Reload(void);
extern void SysRstSrcRecord(void);
#endif /* __WWDG_H */
#include "py32f0xx_hal.h"
#include "SystemClock.h"
#include "delay.h"
#include "LED.h"
#include "SystemClock.h"
#include "USART2.h"
#include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()
#include "string.h" //使能strcpy(),strlen(),memset()
#include "WWDG.h"const char CPU_Reset_REG[]="\r\nCPU reset!\r\n";int main(void)
{uint32_t delay;HSE_Config();
// HAL_Init();//systick初始化delay_init();
// HAL_Delay(1000);USART2_Init(115200);//PA0是为USART2_TX,PA1是USART2_RX//中断优先级为0x01//波特率为115200,数字为8位,停止位为1位,无奇偶校验,允许发送和接收数据,只允许接收中断,并使能串口printf("%s",CPU_Reset_REG);SysRstSrcRecord();MCU_LED_Init();TIM1_LED_Init();delay=WWDG_Config();while (1){MCU_LED_Toggle();
// HAL_Delay(delay+5);if( Get_WWDG_Counter(WWDG) <= WWDG_Window_Value)//喂狗时间到WWDG_Counter_Reload();//喂狗}
}
六、测试结果
相关文章:

PY32F003F18之窗口看门狗
一、PY32F003F18窗口看门狗特点: 即使窗口看门狗被禁止,窗口看门狗的"递减计数器"也会继续递减计数。 二、窗口看门狗复位的条件: 1、将"控制寄存器WWDG_CR"中的WDGA1,激活"窗口看门狗计数器等于0x3F"时,则产…...

SpingBoot:整合Mybatis-plus+Druid+mysql
SpingBoot:整合Mybatis-plusDruid 一、特别说明二、创建springboot新工程三、配置3.1 配置pom.xml文件3.2 配置数据源和durid连接池3.2.1 修改application.yml3.2.2 新增mybatis-config.xml 3.3 编写拦截器配置类 四、自动生成代码五、测试六、编写mapper.xml&#…...

计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]
目录标题 VGG参考VGG网络贡献使用尺寸更小的$3 \times 3$卷积串联来获得更大的感受野放弃使用$11 \times 11$和$5 \times 5$这样的大尺寸卷积核深度更深、非线性更强,网络的参数也更少;去掉了AlexNet中的局部响应归一化层(LRN)层。 网络结构主要改进输入…...

入门级制作电子期刊的网站推荐
随着数字化时代的到来,越来越多的人开始尝试制作自己的电子期刊。如果你也是其中的一员,那么这篇文章可以帮助你制作电子期刊。无论是初学者还是有一定经验的制作者,都能快速完成高质量的电子期刊制作 小编经常使用的工具是-----FLBOOK在线制…...

软件测试内容整理
1. 软件测试 1.1. 定义 软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。 软件测试的经典定…...

UniAccess Agent卸载
异常场景: UniAccess Agent导致系统中的好多设置打不开 例如:ipv4的协议,注册表,host等等 需要进行删除,亲测有效,及多家答案平凑的 借鉴了这位大神及他里面引用的大神的内容 https://blog.csdn.net/weixin_44476410/article/details/121605455 问题描述 这个进…...

【C++】C++11——构造、赋值使用条件和生成条件
移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为: 移动构造函数的生成条件:没有自己实现的移动…...

【LeetCode热题100】--56.合并区间
56.合并区间 排序: 如果按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的,如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并为一个大区间,它们在排完序的列表中是连续的 算法&a…...

opencv dnn模块 示例(17) 目标检测 object_detection 之 yolo v5
在前文【opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4】介绍的yolo v4后的2个月,Ultralytics发布了YOLOV5 的第一个正式版本,其性能与YOLO V4不相伯仲。 文章目录 1、Yolo v5 和 Yolo v4 的区别说明1.1、Data Augmentation - 数据增强1…...

关于安卓SVGA浅尝(一)svgaplayer库的使用
关于安卓SVGA浅尝(一)使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中…...

【LFU】一文让你弄清 Redis LFU 页面置换算法
上一次,相信大家已经知道关于 LRU 页面置换算法的思想和实现了,这里可以一键直达: 【LRU】一文让你弄清 Redis LRU 页面置换算法 Redis 的淘汰策略中,关于 LFU 页面置换算法,今天咱们来捋一捋到底思想是啥࿰…...

Python爬虫实战:用简单四步爬取小红书图片
小红书是一个热门的社交分享平台,汇聚了大量精美的图片。如果您希望保存或使用这些图片,本文将为您详细介绍如何使用Python爬虫轻松爬取小红书图片。 一、安装必要的库 在开始之前,确保您已经安装了以下Python库: requests&#…...
行为型模式-解释器模式
提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图:给定一个语言,定义它的文法表示,并定义一个解释…...

Linux系统编程(五):信号
参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 系统编程 1. 信号基础理论 1.1 概念和机制 概念 信号在生活中随处可见,如:古代战争中摔杯为号、现代战争中的信号弹、体育比赛中使用的信号枪他们都有共性:简单、不能携带大量信息、满足…...

学习路之工具--SecureCRT的下载、安装
百度盘: 链接: https://pan.baidu.com/s/1r3HjEj053cKys54DTqLM4A?pwdgcac 提取码: gcac 复制这段内容后打开百度网盘手机App,操作更方便哦 感谢大佬 简单介绍下SecureCRT SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序&a…...

软件定义网络-OpenvSwitch
软件定义网络(SDN)。它主要有以下三个特点: 控制与转发分离:转发平面就是一个个虚拟或者物理的网络设备,就像小区里面的一条条路。控制平面就是统一的控制中心,就像小区物业的监控室。它们原来是一起的&…...
Android Update Engine 分析(二十三)如何在升级后清除用户数据?
文章目录 0. 导读1. 擦除用户数据流程1.1 制作升级包阶段1. 制作升级包的 "--wipe-user-data" 选项2. 什么是 POWERWASH?1.2 OTA 升级阶段1. payload_properties.txt 文件中的 "POWERWASH=1"2. ApplyPayload 函数设置 InstallPlan3. PostinstallRunnerAct…...

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通
任务描述 某公司随着规模的不断扩大,路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司,实施动态路由RIPv2协议配置,实现网络中所有主机之间互相通信。 在路由器较多的网络环境中,手工配置静态路由…...

游戏录屏软件推荐,教你录制高清游戏视频
“有没有好用的游戏录屏软件推荐呀,最近当上了游戏主播,平台要求每天都要发一个游戏视频,可是我的游戏录屏软件太拉胯了,录制出来的视频非常糊,导致平台审核不通过,所以想问问大家有没有游戏录屏软件推荐一…...

四川眼科医院孙丰源教授团队为患者拔除1.4cm长“眼中钉”
在户外劳作进行一些危险性的操作时,如果不注意防护,就很容易造成一些意外事件发生。广元的张先生使用割草机除草时,被割草机断裂的锯片击伤了左眼,伤势严重,所幸在孙丰源教授团队的帮助下,及时获得了治疗&a…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...