STM32入门笔记(02):独立看门狗(IWDG)和窗户看门狗(WWDG)(SPL库函数版)
1.IWDG狗简介
除了始终控制器的RCC_CSR寄存器的父为标志位和备份区域中的寄存器以外,系统复位 将复位所有寄存器至它们的复位状态。
当发生以下任一事件时,产生一个系统复位:
- 1.NRST引脚上的 低 电平,即 外部复位;
- 2.窗口看门狗计数器终止,即 WWDG复位;
- 3.独立看门狗计数器终止,即 IWDG复位;
- 4.软件复位 , 即 SW复位;
- 5.低功耗管理复位。
1.1IWDG应用场景
1.2 IWDG工作原理
2. IWDG配置步骤
略
3.编程实战:验证不及时喂狗,系统将自动重启
3.1 公式计算:自动重载值和预分频系数
Tout = psc*rlr / fIWDG
- Tout 是溢出时间 ,由开发人员确定,例如:1S
- psc 是预分频系数,根据库头文件去查找, 例如:IWDG_PRESCALER_32 , 分频系数/32,最长时间是2.2758秒
- fIWDG是独立的内部时钟源频率,这个要查芯片手册,例如:40KHz = 40 000
- rlr 是自动重载值,根据公式计算得出。
(函数参数中的自动重载值和预分频系数,根据溢出时间和时钟频率进行设置。不要乱填写。)
3.2 程序截图
3.3 航顺HK32F030M 的IWDG
3.3.1 HK32F030M的看门狗时钟
独立的看门狗是基于一个 12 位的递减计数器和一个 8 位的预分频器,它由一个内部独立的114kHz 的 RC 振荡器 提供时钟,因为这个 RC 振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选择字节可以配置成是软件或硬件启动看门狗。在调试模式,计数器可以被冻结。
HK32F030M数据手册_V1.0.13
3.3.2 HK32F030M的结构框架图
ARM 的 Cortex™-M0 处理器是最新一代的嵌入式 32 位 RISC 处理器,它是一个低成
本、低功耗的 MCU 平台,同时提供卓越的计算性能和先进的中断系统响应。
HK32F030M 系列产品拥有内置的 Cortex™-M0 核心,因此它与所有的 ARM 工具和软件
兼容。
该系列产品的功能框图如下图:
114kHz
片内时钟
系统时钟需要在【system_hk32f030m.c】文件中设置;否则默认32MHz。
3.3.4 程序
3.3.4.1 自动重载值和预分频系数计算
计算 IWDG 的超时时间 1s。
Tout(s) = prv*rlv (s)/114000
(片内慢速 LSI 时钟:114kHz)
rlv = 1S*114000Hz /128 = 890
3.3.4.2 程序实现
bsp_iwdg.c
#include "bsp_iwdg.h"/** 设置 IWDG 的超时时间* Tout(s) = prv*rlv (s)/114000 // 114Khz HK32F030M片内时钟* rlv = 1S*114000Hz /128 = 890* prv可以是[4,8,16,32,64,128,356]* prv:预分频系数,取值如下:* @arg IWDG_Prescaler_4: IWDG prescaler set to 4* @arg IWDG_Prescaler_8: IWDG prescaler set to 8* @arg IWDG_Prescaler_16: IWDG prescaler set to 16* @arg IWDG_Prescaler_32: IWDG prescaler set to 32* @arg IWDG_Prescaler_64: IWDG prescaler set to 64* @arg IWDG_Prescaler_128: IWDG prescaler set to 128* @arg IWDG_Prescaler_256: IWDG prescaler set to 256* rlv:重载值,取值范围为:0-0xFFF* 函数调用举例:* IWDG_Config(IWDG_Prescaler_128, 890); // IWDG 1s 超时溢出
*/void IWDG_Config(uint8_t prv, uint16_t rlv)
{/* 使能 预分频寄存器PR和重装载寄存器RLR可写 */IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable);/* 设置预分频器值 */IWDG_SetPrescaler( prv );/* 设置重装载寄存器值 */IWDG_SetReload( rlv );/* 把重装载寄存器的值放到计数器中 */ IWDG_ReloadCounter();/* 使能IWDG */IWDG_Enable();
}/* 喂狗 */
void IWDG_Feed(void)
{/* 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位当计数器的值减到0的时候会产生系统复位*/IWDG_ReloadCounter();
}
bsp_iwdg.h
#ifndef __IWDG_H
#define __IWDG_H#include "hk32f030m.h"void IWDG_Feed(void);
void IWDG_Config(uint8_t prv, uint16_t rlv);#endif
main.c
/********************************************************************************* @file main.c* @author Alexander* @version V1.0* @date 2022-xx-xx* @brief IWDG独立看门狗实验******************************************************************************
* */
#include "hk32f030m.h"
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_iwdg.h"static void Delay(__IO uint32_t nCount); /*** @brief 主函数* @param 无 * @retval 无*/int main(void)
{/* LED端口初始化 */LED_GPIO_Config();Delay(0xFFFFF);/*-----------------------------------------------------------------------*//* 检查是否为独立看门狗复位 */if( RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET){/* 独立看门狗复位 */LED3_ON;/* 清除标志 */RCC_ClearFlag();/*如果一直不喂狗,会一直复位,加上前面的延时,会看到LED3灯闪烁。在1s时间内喂狗的话,则会持续灭LED3*/}else{/* 不是独立看门狗复位(可能为上电复位或者手动按键复位之类的) *//* 亮LED3 */// LED2_ON;}/*-----------------------------------------------------------------------*//* 按键端口初始化 */Key_GPIO_Config();/* IWDG 1s 超时溢出 */IWDG_Config(IWDG_Prescaler_128, 890); while(1) { /* 这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉 */if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON ){/* 喂狗,如果不喂狗,系统则会复位,LED1则会灭一次,如果在1s时间内准时喂狗的话,则LED3会在重启的时候亮,复位的时候灭 */IWDG_Feed();/* 喂狗后,LED3灭 */LED3_OFF;} }
}static void Delay(__IO uint32_t nCount) //简单的延时函数
{for(; nCount != 0; nCount--);
}#ifdef USE_FULL_ASSERT
/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/
void assert_failed(char* file , uint32_t line)
{/* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */while (1){ }
}
#endif /* USE_FULL_ASSERT */
3.3.4.3 成果展示
HK32F030MF4P6最小系统板之《独立看门狗复位》
4.独立看门狗总结
5.WWDG简介
6. WWDG配置步骤
7.IWDG 和 WWDG的主要区别
如果我们知道whlie(1)
里的代码执行总时间,比如是500ms
,那么我们可以设置独立看门狗的溢出;时间是600ms
,比500ms多一点,如果要被监控的程序没有跑飞正常执行的话,那么执行完 毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗的程序,此 时产生系统复位。
但是也不排除程序跑飞了又跑回来的了,刚好喂狗了,歪打正着。
所以 要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在规定的窗口时间内喂狗。
参考资料
-
[1] 【B站@正点原子官方】全是干货无套路 | 手把手教你深入学习独立看门狗&窗口看门狗
-
[2] 【B站@阿熊话太多】单片机中居然也有狗?STM32两条看门狗详解,独立看门狗和窗口看门狗
相关文章:
STM32入门笔记(02):独立看门狗(IWDG)和窗户看门狗(WWDG)(SPL库函数版)
1.IWDG狗简介 除了始终控制器的RCC_CSR寄存器的父为标志位和备份区域中的寄存器以外,系统复位 将复位所有寄存器至它们的复位状态。 当发生以下任一事件时,产生一个系统复位: 1.NRST引脚上的 低 电平,即 外部复位;2…...
javaSE系列之方法与数组的使用
[TOC] javaSE系列之方法与数组的使用 方法的定义 方法类似于C语言中的"函数"。 方法的种类 这里方法分为有参方法也分为无参方法, 形参和实参是两个实体(这里相当于函数的传值调用和传址调用) 1.非静态方法:普通方法/…...
常用命令总结
将常用命令汇集于此,以便在忘记的时候查询,持续更新…… Git Local changes 添加名字: git config --global user.name "<你的名字>"添加邮件: git config --globa user.email "<你的邮箱>"…...
【Linux:程序地址空间--原来操作系统也喜欢画大饼】
目录 1 代码感受 2 进程地址空间 3 扩展 1 代码感受 在正式讲程序地址空间前我们先来看一段简单的代码来分析分析: 1 #include<iostream>2 #include<unistd.h>3 using namespace std;4 5 int g_val100;6 7 int main()8 {9 pid_t idfork();10 if(i…...
Python实现简单信号滤波实战
在有些项目中需要对信号进行滤波处理,尤其是在医疗的设备中如心跳、脉搏等设备的采样后进行处理。滤波的目的就是除去某些频率的信号如噪声。常见的包括有低通滤波、高通滤波、带通滤波。 低通滤波指的是去除高于某一阈值频率的信号;高通滤波去除低于某…...
Java(110):非对称加密RSA的使用(KeyPair生成密钥)
Java(110):非对称加密RSA的使用(KeyPair生成密钥) RSA 算法是一种非对称加解密算法。服务方生成一对 RSA 密钥,即公钥 私钥,将公钥提供给调用方,调用方使用公钥对数据进行加密后,服务方根据私钥进行解密。 1、RSA生…...
(Mybatis 学习【1】)整合 Mybatis 开发流程
Mybatis 整合流程 ① 添加MyBatis的依赖 ② 创建数据库表 ③ 编写pojo实体类 ④ 编写映射文件UserMapper.xml ⑤ 编写核心文件mybatis-config.xml ⑥ 编写测试类** 编写 pojo 实体类 (设计相应的数据库) Data AllArgsConstructor NoArgsConstructor public class…...
一文搞懂Kerberos
Kerberos一词来源于古希腊神话中的Cerberus——守护地狱之门的三头犬,Kerberos是为TCP/IP 网络设计的可信第三方鉴别协议,最初是在麻省理工学院(MIT)为Athena 项目而开发的。Kerberos服务起着可信仲裁者的作用,可提供安全的网络鉴别ÿ…...
Go爬虫学习笔记(三)
day3 04|敏捷之道:大型Go项目的开发流程是怎样的? 瀑布模式 流程: 市场调研需求分析产品设计研发实现集成与测试项目交付与维护 适用场景: 需求在规划和设计阶段就已经确定了,而且在项目开发周期内&…...
CASTEP参数设置(2)
虚拟试验(分子模拟) 在表征材料以及材料的相关性质时,只要是采用已有的理论加以解释 但是通常来说,需要采用已有的理论来进行设计和探索,伴随着工业软件的发展,应当选用仿真技术来缩小探索范围 传统试验V…...
浅谈对Promise的理解以及在工作中的应用
浅谈对Promise的理解以及在工作中的应用Promise的概念背景知识JavaScript的同步和异步JavaScript事件循环回调函数进行异步操作解决方案:PromisePromise 在工作中的运用创建PromisePromise封装AJAXPromise链式操作Promise.all()Promise.race()async和await总结Promi…...
开源|快速入门和理解并模拟实现GPS户外机器人的定位与导航
户外机器人的定位导航相对于需要建图的场景来说,是比较简单容易实现的,因为可以借助第三方地图完成定位,并在第三方地图中完成路径规划和下发航点等操作,实现的难题在于如何控制机器人完成步行和转弯。 这些在不引进RTK高精度定位…...
Java多线程系列--synchronized的原理
原文网址:Java多线程系列--synchronized的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的synchronized的原理。 反编译出字节码 Test.java public class Test {private static Object LOCK new Object();public static int main(String[] args) {synchro…...
QEMU启动ARM64 Linux内核
目录前言前置知识virt开发板ARM处理器家族简介安装qemu-system-aarch64安装交叉编译工具交叉编译ARM64 Linux内核交叉编译ARM64 Busybox使用busybox制作initramfs使用QEMU启动ARM64 Linux内核前言 本文介绍采用 qemu 模拟ARM-64bit开发板(针对ARM-32bit的有另一篇文…...
Linux->进程程序替换
目录 前言: 1 程序替换原理 2 单进程替换 3 替换函数 3.1 函数使用 4 程序去替换自己的另一个程序操作方式 5 实现自己的shell 前言: 通过我们之前对于子进程的应用,我相信大家一定是能够想到创建子进程的目的之一就是为了代劳父进程执…...
最强分布式锁工具:Redisson
1 Redisson概述1.1 什么是Redisson?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, Sorted…...
Java9-17新特性
Java9-17新特性 一、接口的私有方法 Java8版本接口增加了两类成员: 公共的默认方法公共的静态方法 Java9版本接口又新增了一类成员: 私有的方法 为什么JDK1.9要允许接口定义私有方法呢?因为我们说接口是规范,规范时需要公开…...
电脑开机找不到启动设备怎么办?
电脑正常开机,却提示“找不到启动设备”,这时我们该怎么办呢?本文就为大家介绍几种针对该问题的解决方法,一起来看看吧!“找不到启动设备”是什么意思?可引导设备(又称启动设备)是一…...
使用langchain打造自己的大型语言模型(LLMs)
我们知道Openai的聊天机器人可以回答用户提出的绝大多数问题,它几乎无所不知,无所不能,但是由于有机器人所学习到的是截止到2021年9月以前的知识,所以当用户询问机器人关于2021年9月以后发送的事情时,它无法给出正确的答案&#x…...
assert()宏函数
assert()宏函数 assert是宏,而不是函数。在C的assert.h文件中 #include <assert.h> void assert( int expression );assert的作用是先计算表达式expression, 如果其值为假(即为0),那么它会打印出来assert的内容…...
Docker圣经:大白话说Docker底层原理,6W字实现Docker自由
说在前面: 现在拿到offer超级难,甚至连面试电话,一个都搞不到。 尼恩的技术社群(50)中,很多小伙伴凭借 “左手云原生右手大数据”的绝活,拿到了offer,并且是非常优质的offer&#…...
Redis+Caffeine多级(二级)缓存,让访问速度纵享丝滑
目录多级缓存的引入多级缓存的优势CaffeineRedis实现多级缓存V1.0版本V2.0版本V3.0版本多级缓存的引入 在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中࿰…...
C#和.net框架之第一弹
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录C# 简介一、微软平台的编程二、使用VS创建第一个c#程序1、第一步2、第二步3、第三步4、第四步5、第五步C# 简介 C# 是一个现代的、通用的、面向对象的编程语言&…...
C++---背包模型---潜水员(每日一道算法2023.3.12)
注意事项: 本题是"动态规划—01背包"和"背包模型—二维费用的背包问题"的扩展题,优化思路不多赘述,dp思路会稍有不同,下面详细讲解。 题目: 潜水员为了潜水要使用特殊的装备。 他有一个带2种气体…...
C++类的成员变量和成员函数详解
类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类…...
(枚举)(模拟)(位运算)116. 飞行员兄弟
目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 116. 飞行员兄弟 - AcWing题库 我草,又~在~水~字~数~啦!我草,又~在~水~字~数~啦…...
详解Array.prototype.shift.call(arguments)
经常看到如下代码: function foo() {let k Array.prototype.shift.call(arguments);console.log(k) } foo(11,22) //11 Array.prototype.shift.call(arguments)的作用是: 取 arguments 中的第一个参数 一、为啥要这么写,不直接使用argume…...
Tina_Linux_Wi-Fi_开发指南
Tina Linux Wi-Fi 开发指南 1 前言 1.1 文档简介 介绍Allwinner 平台上Wi-Fi 驱动移植,介绍Tina Wi-Fi 管理框架,包括Station,Ap 以及Wi-Fi 常见问题。 1.2 目标读者 适用Tina 平台的广大客户和对Tina Wi-Fi 感兴趣的同事。 1.3 适用范…...
Spring AOP(AOP概念、组成、Spring AOP实现及实现原理)
文章目录1. Spring AOP 是什么2. 为什么要用 AOP3. 怎么学 Spring AOP4. AOP 组成5. Spring AOP 实现5.1 添加 Spring AOP 框架支持5.2 定义切面和切点5.3 实现通知方法5.4 使⽤ AOP 统计 UserController 每个⽅法的执⾏时间 StopWatch5.4 切点表达式说明 AspectJ6. Spring AOP…...
8.条件渲染指令
目录 1 v-if v-show 2 v-if v-else-if v-else 1 v-if v-show v-if与v-show都可以控制DOM的显示与隐藏 由于flag是布尔值,所以这里可以直接写 v-if"flag" 当flag为true的时候,v-if与v-show控制的div都会被显示出来 当flag为false的时候&a…...
广州做网站建设的公司排名/媒体公关
(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素). 不同设备显示效果相同,一般…...
建设网站要多久到账/seo技术培训泰州
周末终于有时间整理一下这篇文章,几天主要谈的内容是秒杀的细节,在电商平台,一个非常重要的活动就是秒杀哦,那关于下单秒杀时,能带来哪些问题,我们看一看 秒杀的场景下,会遇到哪些问题…...
做公司网站需要什么材料/我想找一个营销团队
来自:三顿(ID:wordpptdream)作者:三顿华为出品的PPT长什么样?很多小伙伴第一反应想到的一定是高大上的发布会PPT:然而这次我在华为的官网上却发现了不少一言难尽的案例,一眼望去密密麻麻铺满了各种图示图表…...
怎样做网站流量统计/爱站网影院
1、私募基金概念 私募基金,是指以非公开方式向特定投资者募集资金并以特定目标为投资对象的证券投资基金。私募基金是以大众传播以外的手段招募,发起人集合非公众性多元主体的资金设立投资基金,进行证券投资。 私募(Private Plac…...
制作网站图片不显示/网络营销软文范文
目录 一、事件监听 API 二、同步 API 三、异步 API 四、API大全 五、api的私人订制 一、事件监听 API 以 on 开头的 API 用来监听某个事件是否触发。 二、同步 API 以 Sync 结尾的 API 都是同步 API。 三、异步 API 大多数 API 都是异步 API。 四、API大全 请戳这里&a…...
郑州微信网站建设/网站宣传
今天偶然看到沈大哥写的一段内容,颇有感触,分享给大家几段非常有意义的内容:在我们的价值体系中,“努力”是一件无比正确的事情,但在我们努力的同时,其实并不会去思考努力背后的价值,很多时候&a…...