STM32 窗口看门狗

来源:本站
导读:目前正在解读《STM32 窗口看门狗》的相关信息,《STM32 窗口看门狗》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32 窗口看门狗》的详细说明。
简介:窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。

库函数中用中断的方式来喂狗的方法,窗口看门狗库函数相关源码和定义分布在文件stm32f10x_wwdg.c 文件和头文件 stm32f10x_wwdg.h 中。步骤如下: 1)使能 WWDG 时钟 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。方法是: RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能 2)设置窗口值和分频数 设置窗口值的函数是: void WWDG_SetWindowValue(uint8_t WindowValue); 这个函数就一个入口参数为窗口值,很容易理解。 设置分频数的函数是: void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); 这个函数同样只有一个入口参数就是分频值。 3)开启 WWDG 中断并分组 开启 WWDG 中断的函数为: WWDG_EnableIT(); //开启窗口看门狗中断 接下来是进行中断优先级配置,使用 NVIC_Init()函数即可。 4)设置计数器初始值并使能看门狗 这一步在库函数里面是通过一个函数实现的: void WWDG_Enable(uint8_t Counter); 该函数既设置了计数器初始值,同时使能了窗口看门狗。 5)编写中断服务函数 在最后,还是要编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。 完成了以上 5 个步骤之后,我们就可以使用 STM32 的窗口看门狗了。 1.static u8 WWDG_CNT=0x7f; /*保存WWDG计数器的设置值,默认为最大. */2.3./**4. * 初始化窗口看门狗5. * tr :T[6:0],计数器值6. * wr :W[6:0],窗口值7. * fprer:分频系数(WDGTB),仅最低2位有效8. * Fwwdg=PCLK1/(4096*2^fprer).9. */10.void WWDG_Init(u8 tr,u8 wr,u32 fprer)11.{12.// RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); /*WWDG时钟使能*/13.14. WWDG_SetPrescaler(fprer); /*设置IWDG预分频值*/15. WWDG_SetWindowValue(wr); /*设置窗口值*/16.17. WWDG_CNT=tr&WWDG_CNT; /* 初始化WWDG_CNT. */18. WWDG_Enable(WWDG_CNT); /*使能看门狗 , 设置 counter . */19. WWDG_ClearFlag(); /*清除提前唤醒中断标志位*/20.21. WWDG_NVIC_Init();/* 初始化窗口看门狗 NVIC */22. WWDG_EnableIT(); /* 开启窗口看门狗中断 */23.}24.25./**26. * 窗口看门狗中断服务程序27. */28.void WWDG_NVIC_Init(void)29.{30. NVIC_InitTypeDef NVIC_InitStructure;31. NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; /*WWDG中断*/32. /* 抢占2,子优先级3 */33. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;34. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;35. NVIC_Init(&NVIC_InitStructure);/* NVIC初始化*/36.}37.38./**39. * 重设置WWDG计数器的值40. */41.void WWDG_Set_Counter(u8 cnt)42.{43. WWDG_Enable(cnt); /*使能看门狗 , 设置 counter . */44.}45.46./**47. * 看门狗中断服务程序48. */49.void WWDG_IRQHandler(void)50.{51. WWDG_Set_Counter(WWDG_CNT);52. WWDG_ClearFlag(); /*清除提前唤醒中断标志位*/53. LED1 = ~LED1; /*LED状态翻转 */54.} 调用:WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);/* 计数器值为 7f,窗口寄存器为 5f,分频数为 8 */

提醒:《STM32 窗口看门狗》最后刷新时间 2024-03-14 01:09:48,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32 窗口看门狗》该内容的真实性请自行鉴别。