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…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
