第35章 WWDG—窗口看门狗—零死角玩转STM32-F429系列

STM32—窗口看门狗(WWDG) STM32 有两个看门狗,一个是独立看门狗,一个是窗口看门狗。我们知道独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到 0 之前如果没有喂狗的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生 复位,这个值叫窗口的上限,上限值由用户独立设置。 阅读详情
 

第35章     WWDG—窗口看门狗

全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn

野火视频教程优酷观看网址:http://i.youku.com/firege

 

 

 

本章参考资料:《STM32F4xx中文参考手册》WWDG章节。

学习本章时,配合《STM32F4xx中文参考手册》WWDG章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。

35.1 WWDG简介

STM32有两个看门狗,一个是独立看门狗,一个是窗口看门狗。我们知道独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到0之前如果没有喂狗的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值0X40时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义

图 351 IWDG与WWDG区别

RLR是重装载寄存器,用来设置独立看门狗的计数器的值。TR是窗口看门狗的计数器的值,由用户独立设置,WR是窗口看门狗的上窗口值,由用户独立设置。

35.2 WWDG功能框图剖析

图 352 窗口看门狗功能框图

1.    ①窗口看门狗时钟

窗口看门狗时钟来自PCLK1,PCLK1最大是45M,由RCC时钟控制器开启。

2.    ②计数器时钟

计数器时钟由CK计时器时钟经过预分频器分频得到,分频系数由配置寄存器CFR的位8:7  WDGTB[1:0]配置,可以是[0,1,2,3],其中CK计时器时钟=PCLK1/4096,除以4096是手册规定的,没有为什么。所以计数器的时钟CNT_CK=PCLK1/4096/(2^WDGTB),
这就可以算出计数器减一个数的时间T= 1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB)。

3.    ③计数器

窗口看门狗的计数器是一个递减计数器,共有7位,其值存在控制寄存器CR的位6:0,即T[6:0],当7个位全部为1时是0X7F,这个是最大值,当递减到T6位变成0时,即从0X40变为0X3F时候,会产生看门狗复位。这个值0X40是看门狗能够递减到的最小值,所以计数器的值只能是:0X40~0X7F之间,实际上用来计数的是T[5:0]。当递减计数器递减到0X40的时候,还不会马上产生复位,如果使能了提前唤醒中断:CFR位9 EWI 置1,则产生提前唤醒中断,如果真进入了这个中断的话,就说明程序肯定是出问题了,
那么在中断服务程序里面我们就需要做最重要的工作,比如保存重要数据,或者报警等,这个中断我们也叫它死前中断。

4.    ④窗口值

我们知道窗口看门狗必须在计数器的值在一个范围内才可以喂狗,其中下窗口的值是固定的0X40,上窗口的值可以改变,具体的由配置寄存器CFR的位6:0 W[6:0]设置。其值必须大于0X40,如果小鱼或者等于0X40就是失去了窗口的价值,而且也不能大于计数器的值,所以必须得小于0X7F。那窗口值具体要设置成多大?这个得根据我们需要监控的程序的运行时间来决定。如果我们要监控的程序段A运行的时间为Ta,当执行完这段程序之后就要进行喂狗,如果在窗口时间内没有喂狗的话,那程序就肯定是出问题了。一般计数器的值TR设置成最大0X7F,窗口值为WR,计数器减一个数的时间为T,那么时间:(TR-WR)*T应该稍微大于Ta即可,这样就能做到刚执行完程序段A之后喂狗,起到监控的作用,这样也就可以算出WR的值是多少。

5.    ⑤计算看门狗超时时间

图 353 窗口看门狗时序图

这个图来自数据手册,从图我们知道看门狗超时时间:Twwdg = Tpclk1 x 4096 x 2^wdgtb x (T[5:0] + 1) ms,当PCLK1 = 30MHZ时,WDGTB取不同的值时有最小和最大的超时时间,那这个最小和最大的超时时间该怎么理解,又是怎么算出来的? 讲起来有点绕,这里我稍微讲解下WDGTB=0时是怎么算的。递减计数器有7位T[6:0] ,当位6变为0的时候就会产生复位,实际上有效的计数位是T[5:0],而且T6必须先设置为1。如果T[5:0]=0时,递减计数器再减一次,就产生复位了,那这减一的时间就等于计数器的周期=1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB) = 1/30 * 4096 *2^0 = 136.53us,这个就是最短的超时时间。如果T[5:0]全部装满为1,即63,当他减到0X40变成0X3F时,所需的时间就是最大的超时时间=113.7*2^5=136.53*64=8.74ms。同理,当WDGTB等于1/2/3时,代入公式即可。

35.3 怎么用WWDG

WWDG一般被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。比如一个程序段正常运行的时间是50ms,在运行完这个段程序之后紧接着进行喂狗,如果在规定的时间窗口内还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。

35.4 WWDG喂狗实验

35.4.1 硬件设计

4、WWDG一个

5、LED两个

WWDG属于单片机内部资源,不需要外部电路,需要两个LED来指示程序的运行状态。

35.4.2 软件设计

我们编写两个 WWDG驱动文件,bsp_wwdg.h 和bsp_wwdg.c,用来存放WWDG的初始化配置函数。

1.    代码分析

这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。

WWDG配置函数

代码 351 WWDG配置函数

 1 /* WWDG 配置函数
			
 2  * tr :递减计时器的值,取值范围为:0x7f~0x40
				
 3  * wr :窗口值,取值范围为:0x7f~0x40
				
 4  * prv:预分频器值,取值可以是
			
 5  *      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1
				
 6  *      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2
				
 7  *      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4
				
 8  *      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8
				
 9  */
				
10 void WWDG_Config(uint8_t tr, uint8_t wr, uint32_t prv)
				
11 {
				
12 
								// 开启 WWDG 时钟
				
13     RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
				
14 
			
15 
							// 设置递减计数器的值
			
16     WWDG_SetCounter( tr );
				
17 
			
18 
							// 设置预分频器的值
			
19     WWDG_SetPrescaler( prv );
				
20 
			
21 
							// 设置上窗口值
			
22     WWDG_SetWindowValue( wr );
				
23 
			
24 
								// 设置计数器的值,使能WWDG
				
25     WWDG_Enable(WWDG_CNT);
				
26 
			
27 
							// 清除提前唤醒中断标志位
			
28     WWDG_ClearFlag();
				
29 
								// 配置WWDG中断优先级
				
30     WWDG_NVIC_Config();
				
31 
								// 开WWDG 中断
				
32     WWDG_EnableIT();
				
33 }
				
			

WWDG配置函数有三个形参,tr是计数器的值,一般我们设置成最大0X7F,wr是上窗口的值,这个我们要根据监控的程序的运行时间来设置,但是值必须在0X40和计数器的值之间,prv用来设置预分频的值,取值可以是:

代码 352 形参 prv 取值

1 /*

 2 *     @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1
				
 3 *     @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2
				
 4 *     @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4
				
 5 *     @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8
				
 6 */
				
			

这些宏在stm32f10x_wwdg.h中定义,宏展开是32位的16进制数,具体作用是设置配置寄存器CFR的位8:7  WDGTB[1:0],获得各种分频系数。

WWDG中断优先级函数
 1 // WWDG 中断优先级初始化
			
 2 static void WWDG_NVIC_Config(void)
				
 3 {
				
 4     NVIC_InitTypeDef NVIC_InitStructure;
				
 5 
			
 6     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
				
 7     NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
				
 8     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
				
 9     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
				
10     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
				
11     NVIC_Init(&NVIC_InitStructure);
				
12 }
				
			

在递减计数器减到0X40的时候,我们开启了提前唤醒中断,这个中断我们称它为死前中断或者叫遗嘱中断,在中断函数里面我们应该出来最重要的事情,而且必须得快,因为递减计数器再减一次,就会产生系统复位。

提前唤醒中断复位程序

代码 353 提前唤醒中断服务程序

1 // WWDG 中断复服务程序,如果发生了此中断,表示程序已经出现了故障,

 2 // 这是一个死前中断。在此中断服务程序中应该干最重要的事,
			
 3 // 比如保存重要的数据等,这个时间具体有多长,要
			
 4 // 由WDGTB的值决定:
				
 5 // WDGTB:0   113us
				
 6 // WDGTB:1   227us
				
 7 // WDGTB:2   455us
				
 8 // WDGTB:3   910us
				
 9 void WWDG_IRQHandler(void)
				
10 {
				
11 
							// 清除中断标志位
			
12     WWDG_ClearFlag();
				
13 
			
14 
								//LED2亮,点亮LED只是示意性的操作,
				
15 
							//真正使用的时候,这里应该是做最重要的事情
			
16     LED2(ON);
				
17 }
				
			
喂狗函数

代码 354 喂狗函数

 1 // 喂狗
			
 2 void WWDG_Feed(void)
				
 3 {
				
 4 
								// 喂狗,刷新递减计数器的值,设置成最大WDG_CNT=0X7F
				
 5     WWDG_SetCounter( WWDG_CNT );
				
 6 }

喂狗就是重新刷新递减计数器的值防止系统复位,喂狗一般是在主函数中喂。

主函数

代码 355 主函数

1 int main(void)

2 {

3 uint8_t wwdg_tr, wwdg_wr;

4

5 /* LED 端口初始化 */

6 LED_GPIO_Config();

7

8 // BLUE 蓝色灯亮

9 LED3(ON);

10 Delay(0XFFFFFF);

11

12 // WWDG配置

13

14 /* WWDG 配置函数

15 * tr :递减计时器的值,取值范围为:0x7f~0x40,超出范围会直接复位

16 * wr :窗口值,取值范围为:0x7f~0x40

17 * prv:预分频器值,取值可以是

18 * @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(45MHz)/4096)/1

19 约10968Hz 91us

20 * @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(45MHz)/4096)/2

21 约5484Hz 182us

22 * @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(45MHz)/4096)/4

23 约2742Hz 364us

24 * @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(45MHz)/4096)/8

25 约1371Hz 728us

26 *

27 * 例:tr = 127(0x7f,tr的最大值)

28 * wr = 80(0x50, 0x40为最小wr最小值)

29 * prv = WWDG_Prescaler_8

30 * 窗口时间为728 * (127-80) = 34.2ms < 刷新窗口 < ~728 * 64 = 46.6ms

31 * 也就是说调用WWDG_Config进行这样的配置,若在之后的34.2ms前喂狗,

32 * 系统会复位,在46.6ms后没有喂狗,系统也会复位。

33 * 需要在刷新窗口的时间内喂狗,系统才不会复位。

34 */

35 // 初始化WWDG:配置计数器初始值,配置上窗口值,启动WWDG,使能提前唤醒中断

36 WWDG_Config(127,80,WWDG_Prescaler_8);

37

38 // 窗口值我们在初始化的时候设置成0X5F,这个值不会改变

39 wwdg_wr = WWDG->CFR & 0X7F;

40

41 while (1)

42 {

43 // BLUE 蓝色灯

44 LED3(OFF);

45 //-----------------------------------------------------

46 // 这部分应该写需要被WWDG监控的程序,这段程序运行的时间

47 // 决定了窗口值应该设置成多大。

48 //-----------------------------------------------------

49

50 // 计时器值,初始化成最大0X7F,当开启WWDG时候,这个值会不断减小

51 // 当计数器的值大于窗口值时喂狗的话,会复位,当计数器减少到0X40

52 // 还没有喂狗的话就非常非常危险了,计数器再减一次到了0X3F时就复位

53 // 所以要当计数器的值在窗口值和0X40之间的时候喂狗,其中0X40是固定的。

54 wwdg_tr = WWDG->CR & 0X7F;

55

56 if ( wwdg_tr < wwdg_wr )

57 {

58 // 喂狗,重新设置计数器的值为最大0X7F

59 WWDG_Feed();

60 }

61 }

62 }

主函数中我们把WWDG的计数器的值设置 为0X7F,上窗口值设置为0X5F,分频系数为8分频,则计数器减1的时间约为728us。在while死循环中,我们不断读取计数器的值,当计数器的值减小到小于上窗口值的时候,我们喂狗,让计数器重新计数。

在while死循环中,一般是我们需要监控的程序,这部分代码的运行时间,决定了上窗口值应该设置为多少,当监控的程序运行完毕之后,我们需要执行喂狗程序,比起独立看门狗,这个喂狗的窗口时间是非常短的,对时间要求很精确。如果没有在这个窗口时间内喂狗的话,那就说明程序出故障了,会产生提前唤醒中断,最后系统复位。

35.4.3 下载验证

把编译好的程序下载到开发板,LED3被点亮,一段时间之后熄灭,之后LED3一直就没有被点亮过,说明系统没有产生复位,如果产生复位的话LED3会再被点亮一次。中断服务程序中的LED也没被点亮过,说明喂狗正常。

 

STM32——看门狗(独立看门狗,窗口看门狗,附代码) 看门狗(独立看门狗、窗口看门狗)的原理及代码实现。 阅读详情

相关推荐

STM32入门--看门狗

STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

weixin_57604904的博客 6710

STM32——窗口看门狗

窗口看门狗用于监测单片机程序运行时效是否精准,

m0_49830036的博客 1012

STM32——WWDG(窗口看门狗)

本质:能产生系统复位信号和提前唤醒中断的计数器。特性:递减的计数器;当递减计数器值从 0x40减到0x3F时复位(即T6位跳变到0);计数器的值大于W[6:0]值时喂狗会复位;提前唤醒中断 (EWI):当递减计数器等于 0x40 时可产生;喂狗:在窗口期内重装载计数器的值,防止复位。作用:软件异常,精准时间把控。

weixin_52706451的博客 1144

小白学STM32---窗口看门狗

窗口看门狗(WWDG)简介之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间 (下限固定)。喂狗的时间不能过早也不能过晚。而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG->CR 的第六位)

weixin_62802580的博客 1685

别再只会画方块了!Cesium 1.62 实战:用 Polygon、Ellipse 和 PolylineVolume 玩转复杂地理围栏与3D管道

本文深入探讨了Cesium 1.62在复杂地理围栏与3D管道开发中的高级应用,通过Polygon、Ellipse和PolylineVolume等API实现不规则禁飞区建模、椭圆围栏设计及地下管线可视化。文章结合实战代码,详细解析了性能优化技巧和工程实践,帮助开发者突破基础图形绘制局限,构建真实业务场景中的三维空间系统。

weixin_26763955的博客 104

STM32F103C8T6与OV7670摄像头在TFT屏上的实时数字识别系统实现

本文详细介绍了基于STM32F103C8T6单片机和OV7670摄像头实现实时数字识别系统的全过程。系统通过图像采集、预处理、二值化和模板匹配算法,在TFT屏上实时显示识别结果,并针对资源受限的单片机环境提供了内存与性能优化策略,适用于智能家居、工业仪表读数等低成本嵌入式视觉应用场景。

open4的博客 278

STM32的窗口看门狗详解及案例(基于HAL库)

STM32 窗口看门狗是一种非常有效的保障系统稳定性和可靠性的手段。通过合理配置窗口看门狗,可以在系统出现故障时及时复位系统,避免系统出现严重故障。在实际应用中,需要根据系统的实际情况合理设置时间窗口和喂狗操作的时机,以确保窗口看门狗能够正常工作。同时,还需要注意早期唤醒中断的处理,以避免影响系统的正常运行。

千千道的博客 3001

Docker一键部署NextCloud+OnlyOffice:打造企业级私有云办公环境(含HTTPS配置)

本文详细介绍了如何使用Docker Compose一键部署NextCloud与OnlyOffice,构建安全、高效的企业级私有云办公平台。内容涵盖从架构设计、Docker编排配置、HTTPS证书自动化管理,到系统初始化、性能优化及高级功能扩展的全栈实战指南,帮助企业实现数据自主可控与高效的在线文档编辑协作。

Apple的专栏 1240

STM32单片机——看门狗(独立看门狗&窗口看门狗)

窗口看门狗用于监测单片机程序运行时效是否精准,主要检测。

weixin_46216674的博客 3378

SAP-PP 返工订单成本归集优化:从物料结算到成本中心的配置与增强实践

本文深入探讨SAP-PP模块中返工订单成本归集的优化方案,重点解析从物料结算到成本中心的配置与增强实践。通过结算参数文件配置、分配结构调整及增强开发实战,解决返工费用误计入物料成本的问题,确保财务核算精准性。文章还提供测试验证方案与常见报错处理技巧,助力企业实现成本数据清晰流向分析。

weixin_29260291的博客 365

Vitis Model Composer闪退?手把手教你用命令行启动Vivado 2021后的System Generator

本文详细解析了Vitis Model Composer闪退问题的根本原因,并提供了命令行启动Vivado 2021后System Generator的完整解决方案。从环境变量配置、组件缺失排查到权限问题处理,手把手教你通过命令行深度排错,并分享高级自动化脚本和系统优化技巧,帮助开发者高效使用Vitis Model Composer与System Generator进行HDL开发。

weixin_26905487的博客 348

STM32F4_窗口看门狗精讲(WWDG)

是在0~重载值之间任何时间段都可以喂狗,如果在这个时间段程序死循环结束,或者说程序跑飞之后又跑回正常,这时候恰好又刷新了看门狗,这种情况下独立看门狗是检测不到复位芯片的;但是窗口看门狗不同,严格限时了喂狗的时间,即使程序跑飞又跑回正常,只要不在限定的时间窗口内,MCU都会产生复位。之所以这么讲,是因为在计数器值为0x40时使用EWI中断,不仅仅可以用来管理软件系统检查/或系统恢复/功能退化,也可以使用相应的中断服务程序ISR来重载WWDG计数器以避免WWDG复位。:在系统复位后,看门狗总是处于关闭状态。

light_2025的博客 3039

目前最强的价格行为技术分析AI!大A也能用!还免费!

有球友推荐了一个历史最强的价格行为技术分析AI工具,使用下来确实很惊艳,解决了 很多AI工具黑盒过程,难以回溯的问题,他的决策过程可解释,提供决策树、诊断结果、原始响应、调试信息和未来走势预期。用户能够看到模型为什么选择“做多、做空或不下单”。会检查置信度、入场条件、盈亏比、结构失效和冷却期。最大的优点不是“预测一定准确”,而是把主观的价格行为分析整理成了可重复、可解释、可校验、可持续跟踪的工程化流程。本文记录本项目在 Windows 上的实际部署与启动方法。

木头大左的博客 75

STM32实战总结:HAL之看门狗

STM32实战总结:HAL之看门狗

qq_28576837的博客 3781

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题

摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 435

Vue3 - 超详细“纯前端“将文件上传到阿里云OSS对象存储,最新阿里云前端直传音频、视频、图片、文件、office文档等任意文件,vue3单个或批量从本地选择文件,秒传到阿里云oss无需后端接口!

vue3,阿里云oss存储,前端直传oss,上传图片/office文档/音视频/zip压缩包到阿里云oss,项目中上传文件到阿里云oss详细教程,如何将本地文件上传到阿里云OSS存储,纯前端实现阿里云OSS上传,纯前端直传至阿里OSS对象存储教程,如何解决上传文件到阿里云OSS本地环境调试出现跨域问题,直传阿里云oss跨域报错解决,前端直接上传文件到oss服务端,不经过后端直传,浏览器直接上传文件,阿里云oss上传sdk官方文档,阿里云错误,解决这个问题,上传很慢,一直签名失败,权限,不经过后端,纯前端直传

🏆 前端领域优质创作者 1万+

手把手教你开发stm32——看门狗(基于hal库)

看门狗定时器(WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。看门狗主要是用于在发生系统软件故障时,将系统复位。也可以用于将系统从休眠或空闲模式唤醒。

nbbskk的博客 5244

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32实现看门狗(HAL库)

单片机在日常工作中常常会因为用户配置代码出现BUG,而导致芯片无法正常工作;或者会受到来自外界电磁场的干扰,造成程序跑飞 ,或陷入死循环。如果无法系统复位,那么整个系统都会卡死,这对产品的使用是灾难性的后果。出于对单片机运行状态进行实时监测的考虑,产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称看门狗(WatchDog) 。

冬瓜的博客 6055

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32—看门狗详解入门(独立看门狗、窗口看门狗)

什么是看门狗?看门狗又分为独立看门狗、窗口看门狗,看门狗的原理是什么?本质是什么? 怎么配置和使用看门狗?本文对这些问题进行详解。

Ai1101224的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32 看门狗

STM32 的独立看门狗与窗口看门狗,分别从 "独立稳定" 和 "精准实时" 两个维度,为嵌入式系统提供了可靠的故障自救机制。掌握两种看门狗的原理、参数计算和编程配置,能有效提升系统在复杂环境下的稳定性和容错能力。无论是简单的硬件监控,还是复杂的实时任务管理,合理选用看门狗功能,都能让你的嵌入式系统拥有一位全天候的 "硬件保镖",从容应对各类突发故障。

2501_92368462的博客 1051

【STM32笔记】STM32的看门狗详解(独立看门狗和窗口看门狗)

首先,它不是真的狗。看门狗(Watchdog)是一种硬件定时器,用于监测程序执行是否正常,并在系统出现故障或死锁时重启系统。

Macy~的博客 1万+

stm32之看门狗

STM32 有两个看门狗,和,独立看门狗又称宠物狗,窗口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时,产生系统复位,对于窗口型看门狗同时会产生一个中断。独立看门狗(IWDG)由专用的内部低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动。

TSC1235的专栏 3463

【STM32开发之寄存器版】(五)-窗口看门狗WWDG

窗口看门狗的时序图如下所示:T[6:0]:控制寄存器(WWDG_CR)的低7位。W[6:0]:配置寄存器(WWDG_CFR)的低7位,为窗口看门狗的上窗口。3Fh:下窗口0X40的边界。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。窗口看门狗的超时公式如下:Twwdg:WWDG超时时间(单位ms)Fpclk1:APB1的时钟频率(单位KHz)WDGTB:WWDG的预分频系数T[5:0]:窗口看门狗的计数器低6位WDGTB最小超时值最大超时值0。

Daemon.Chen的博客 2059

单片机STM32看门狗详解(嵌入式学习)

单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立看门狗,IWDG)和窗口看门狗定时器(WWDG),以提供更可靠的系统保护。独立看门狗(IWDG)是STM32中常用的看门狗,它是一个独立的硬件模块,可以在系统内部独立运行。通过配置IWDG定时器的计数器和预分频器,可以设置看门狗的定时时间。

1万+

STM32 HAL库窗口看门狗

STM32 窗口看门狗介绍及使用,涉及相关寄存器说明、cubemx配置、验证程序代码段。

优快云_joker_的博客 1895
上一篇: 第33章 TIM—电容按键检测—零死角玩转STM32-F429系列
下一篇: 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列
0木木0
博客等级 码龄17年 458粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值