第十二章 STM32单片机看门狗编程及其应用
STM32F103V IWDG 独立看门狗操作

STM32F103V IWDG 独立看门狗操作最近编写一个程序,因为需要考虑到可靠性,所以需要在程序了添加看门狗功能。
查了下STM32 的相关资料,于是利用下库文件来实现IWDG 独立看门狗操作。
首先需要调用库文件#include “stm32f10x_iwdg.h”再配置下看门狗相关参数//////////独立看门狗IWDG 设置////////////////////////////////////void WatchDog_int(void)// 独立看门狗IWDG 设置{/* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: 32KHz(LSI) / 32 = 1KHz */ IWDG_SetPrescaler(IWDG_Prescaler_32); //独立看门狗预分频为32 /* Set counter reload value to 1000 */ IWDG_SetReload(1000);//设置IWDG 重装载值范围为0~0x0FFF;/* Reload IWDG counter */ IWDG_ReloadCounter();//按照重装载的寄存器的值来重装载IWDG 计数器/* Enable IWDG (the LSI oscillator will be enabled by hardware) */ IWDG_Enable();//使能独立看门狗}在主程序中实现喂狗的程序如下:///////////主程序//////////////////int main(void){ RCC_Configuration(); //时钟配置NVIC_Configuration();//中断配置GPIO_Configuration();//GPIO 配置WatchDog_int();// 独立看门狗IWDG 设置/* 检查是否看门狗复位*/if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { printf(“WatchDog Reset\r\n”); speakertest(); RCC_ClearFlag();//清除标志位} else {;}}。
stm32看门狗

LSI (40KHz) LSI /4(8,16,…256) [100us, 26.2s] 计数器自减到0 喂狗时间在窗外
注意事项
可以利用T6和WDGA配合来软件产生复位
2
Quiz
When can be generated the WWDG reset? ____________ What is the maximum WWDG timeout? ____________
独立窗口看门狗特性
可通过选项字节来配置由硬件或软件 启动独立看门狗 先进的安全特性:
WWDG Reset WWDG_CFR
comparator = 1 when T6:0 > W6:0 CM P Write WWDG_CR
W6 W5 W4 W3 W2 W1 W0
WDGA T6 T5 T4 T3 T2 T1 T0
WWDG_CR 6-Bit Down Counter
在合适的时机喂狗以防止WWDG复位: 在设定的时间窗内写T[6:0](T6必需是1) 早期唤醒中断(EWI):当计数器自减到 0x40时触发该中断
窗口看门狗注意事项
复位时看门狗默认处于关闭状态,直到软件激活 之,之后就不能关闭它,直到产生复位。 即使还未使能看门狗(WDGA@CR),其计数器也 在一直自减运行着
因此使能它的时候要保证T6=1,否则一使能就复位了 @ WWDG_CR
时钟来源于PCLK
低功耗模式下,窗口看门狗停止工作
窗口看门狗 WWDG & IWWDG
计数器外设
窗口看门狗特性
可配置的时间窗,用来检测应用程序非 预期中的运行流程(过早或过晚) 看门狗复位条件
使能了看门狗的情况下,自减计数器值 小于0x40 使能了看门狗的情况下,喂狗时间超出 时间窗范围
stm32看门狗原理

stm32看门狗原理stm32看门狗原理解析什么是看门狗•看门狗(Watchdog)是一种用于监控嵌入式系统运行状态的设备或模块。
•它可以定时检测系统是否正常运行,并在异常情况下采取相应措施,比如重启系统。
•stm32看门狗是一种特殊的硬件单元,用于监控stm32微控制器的运行状态。
看门狗的工作原理•stm32看门狗是通过一个可配置的定时器和一个计数器实现的。
•看门狗的计数器会在系统启动时开始计数,超过预设的阈值时,看门狗将产生一个复位信号。
•在正常的系统运行过程中,我们需要定期喂狗,也就是重置看门狗的计数器。
如果超过计数器范围内指定的时间没有重置,看门狗就会认为系统发生故障。
•当看门狗检测到系统异常时,它会强制将stm32芯片重新启动,使系统恢复到初始状态。
stm32看门狗的配置方法•首先,我们需要在stm32的初始化代码中启用看门狗模块。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // 使能看门狗时钟WWDG_SetPrescaler(WWDG_Prescaler_8); // 设置预分频器的分频系数为8WWDG_SetWindowValue(127); // 设置看门狗的窗口值WWDG_Enable(80); // 启动看门狗并设置计数器初值为80•上述代码会启用stm32看门狗模块,并进行一些基本的参数配置。
•接下来,在系统的运行过程中,我们需要定期喂狗,以防止系统异常。
WWDG_SetCounter(80); // 重置看门狗计数器•上述代码会重置看门狗计数器,确保系统正常运行时不会触发看门狗的复位信号。
看门狗的注意事项•为了确保系统的正常运行,需要根据系统的需求合理设置看门狗的参数,包括预分频器、窗口值和计数器初值等。
•设置过小的参数可能会导致误触发看门狗的复位信号,系统频繁重启。
•设置过大的参数可能无法及时检测到系统异常,系统在故障时无法及时恢复。
STM32 独立看门狗IWDG 与窗口看门狗WWDG

STM32 独立看门狗IWDG 与窗口看门狗WWDG独立看门狗Iwdg 有独立时钟(内部低速时钟LSI---40KHz),所以不受系统硬件影响的系统故障探测器。
主要用于监视硬件错误。
窗口看门狗wwdg 时钟与系统相同。
如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。
一,独立看门狗看门狗定时时限= IWDG_SetReload()的值/ 看门狗时钟频率看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数1.STM32独立看门狗IWDG 的时限定为280 微秒。
这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微小的变化。
/* IWDG timeout equal to 280 ms (the timeout may varies due to LSI frequency dispersion) --------------------------------------- ----------------------*//* Enable write access to IWDG_PR and IWDG_RLR registers */IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);/* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz */IWDG_SetPrescaler(IWDG_Prescaler_32);/* Set counter reload value to 349 */IWDG_SetReload(349);/*该参数允许取值范围为0 – 0x0FFF */* Reload IWDG counter */IWDG_ReloadCounter();/* Enable IWDG (the LSI oscillator will be enabled by hardware) */IWDG_Enable();2.独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。
最新STM32窗口看门狗实验

2020/10/23
广州市星翼电子科技有限公司
9
ALIENTEK
《例说STM32》
8.3 窗口看门狗配置步骤
1)使能WWDG时钟。
WWDG不同于IWDG,IWDG有自己独立的40Khz时钟, 不存在使能问题。而WWDG使用的是PCLK1的时钟,需 要先使能时钟。
2)设置WWDG_CFR和WWDG_CR两个寄存器
上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一 定要确保窗口值大于0X40,否则窗口就不存在了。 窗口看门狗的超时公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1; 其中:
Twwdg:WWDG超时时间(单位为ms) Fpclk1:APB1的时钟频率(单位为Khz) WDGTB:WWDG的预分频系数 T[5:0]:窗口看门狗的计数器低6位
STM32窗口看门狗实验
ALIENTEK
《例说STM32》
8.1 窗口看门狗原理
➢ 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成 的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6 位(WWDG->CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周 期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG>CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也 将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新 。他们的关系可以用下图来说明:
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但 这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执 行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了。
STM32之窗口看门狗

STM32之窗⼝看门狗简介:跟独⽴看门狗⼀样,也是⽤来检测软件可能出现的错误,不⼀样的是,当独⽴看门狗计数器的值减到0时会产⽣复位,在减到0之前喂狗防⽌复位。
窗⼝看门狗:在某⼀值到0x40之间喂狗才不会产⽣复位,其他情况均会产⽣复位信号,这个某⼀个值称之为窗⼝上限。
计数器数值由看门狗控制寄存器决定可以看出计数器占7位,最⼤值为0x7f功能框图:1.PCLK1默认为36MHz2.PCLK1经过分频器分频⽣成CNT_CK给计数器提供时钟从图中可以看出CNT_CK=PCLK1/4096/(2^WDGTB)3.计数器,见最上⾯第1 2张图,当计数器最⾼位T6由1变为0时,产⽣复位4.设置窗⼝上限值,见配置寄存器,窗⼝上限值不得⼤于计数器最⼤值,不得⼩于窗⼝下限值超时时间计算:超时时间指计数器值减到窗⼝下限下⼀个数值即0x3f所花时间最短超时时间在计数器的值为0x40的时候,最长超时时间在计数器值为0x7f的时候当WDGTB为0时,CNT_CK=36M/4096/1=8789.0625Hz 计数器减⼀次所花时间为 1/8789.0625(s) 最短超时时间=(0x40-0x3f)*/8789.0625约等于113us最长超时时间=(0x7f-0x3f)/8789.0625 约等于7.28ms相关函数:上⾯中的中断函数使能是当计数器从0x40减到0x3f时产⽣的,这个中断称为死前中断。
实验:设置计数器值和窗⼝上限值都为0x7f配置死前中断,在中断中喂狗,并且LED2反转main函数中,LED1⼀直点亮原理图:看门狗头⽂件和源⽂件:#ifndef _WWDG_H#define _WWDG_H#include "stm32f10x.h"void WWDG_Config(void);#endif#include "wwdg.h"static void LED1_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_SetBits(GPIOC,GPIO_Pin_1);//默认熄灭}//中断优先级配置static void WWDG_NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);}void WWDG_Config(void){WWDG_NVIC_Config();LED1_GPIO_Config();RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//开启看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//设置分频系数WWDG_SetWindowValue(0x7f);//设置窗⼝上限值WWDG_SetCounter(0x7f);//设置计数器值WWDG_EnableIT();//使能中断WWDG_Enable(0x7f);//开启看门狗}void WWDG_IRQHandler(void){WWDG_ClearFlag();WWDG_SetCounter(0x7f);//设置计数器值//LED2反转if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)==SET)GPIO_ResetBits(GPIOC,GPIO_Pin_1);elseGPIO_SetBits(GPIOC,GPIO_Pin_1);//默认熄灭}mian⽂件:#include "stm32f10x.h"#include "wwdg.h"static void LED0_GPIO_Config(void);int main(void){LED0_GPIO_Config();WWDG_Config();while(1);}static void LED0_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_ResetBits(GPIOC,GPIO_Pin_0);//默认点亮}。
单片机的看门狗

引言概述:
单片机的看门狗(二)是在第一篇文章中讨论的单片机看门狗的延伸,本文将深入探讨单片机看门狗的使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面的内容。
单片机看门狗是一种重要的硬件设备,在系统稳定性和可靠性方面起到关键作用,因此了解和掌握单片机看门狗的相关知识是非常有必要的。
正文内容:
一、单片机看门狗的使用场景
1.1实时系统
1.2长时间运行的设备
1.3类似于操作系统的应用
二、单片机看门狗的工作原理
2.1看门狗定时器
2.2看门狗计数器
2.3看门狗复位信号
三、单片机看门狗的设置参数
3.1看门狗定时器的预分频和计数器
3.2看门狗复位信号的触发条件
3.3看门狗溢出时间的设置
四、单片机看门狗的使用注意事项
4.1错误的看门狗设置
4.2看门狗溢出时间过短
4.3看门狗溢出时间过长
五、单片机看门狗的常见问题及解决方法
5.1看门狗复位问题
5.2看门狗延时问题
5.3看门狗定时器设置问题
总结:
单片机看门狗是一项重要的硬件设备,它在保证系统稳定性和可靠性方面起到关键作用。
本文从使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面深入探讨了单片机看门狗的相关知识。
在实际应用中,我们应该根据具体情况,合理设置单片机看门狗的参数,避免错误的配置导致系统异常。
同时,我们也要注意单片机看门狗的溢出时间,不要设置过短或过长,以免影响系统的正常运行。
通过深入了解和掌握单片机看门狗的相关知识,我们可以更好地应用它,提高系统的稳定性和可靠性。
STM32学习笔记---WWDG窗口看门狗实验

STM32学习笔记---WWDG窗⼝看门狗实验继做了SYSTICK实验后,继续进⾏第8个实验-WWDG窗⼝看门狗实验,本实验通过设置窗⼝看门狗WWDG间断时间来中断来定期的检查是否出错,在WWDG中断函数中加⼊了流⽔灯⽤来测试是否运⾏了看门狗程序中断,⽤PB5-LED1通过窗⼝看门狗间断时间来闪烁,编程⼯程⼤致和USART实验过程差不多,先是开启系统时钟,然后GPIO端⼝时钟,然后复⽤功能时钟AFIO,然后各个模块⽤的的时钟,,呵呵,之后进⼊各个模块初始化,设置,编写⼦程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。
以下为WWDG函数主要部分://WWDG窗⼝看门狗设置初始化void WWDG_Config(void){//软件看门狗初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8); //时钟8分频4ms// (PCLK1/4096)/8= 244 Hz (~4 ms)WWDG_SetWindowValue(65); //计数器数值WWDG_Enable(127); //启动计数器,设置喂狗时间// WWDG timeout = ~4 ms * 64 = 262 msWWDG_ClearFlag(); //清除标志位WWDG_EnableIT(); //启动中断}*****************************************************void WWDG_IRQHandler(void){WWDG_SetCounter(0x7F); //更新计数值WWDG_ClearFlag(); //清除标志位switch(WWDGFLAG){case 0:GPIO_SetBits(GPIOB, GPIO_Pin_5);break;case 1:GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;default:break;}WWDGFLAG=!WWDGFLAG;}以下为WWDG函数结果部分:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 在WWDG中断服务程序中,不应该重装递减计数器,而是让应 用程序在发生复位前,安排一些紧急处理的任务:保存一些 重要数据和状态参数、或做系统刹车等操作。
工程素质和技能归纳
• 复习C语言中的函数指针内容,掌握其在嵌入式系统中的应 用。 • 理解看门狗的作用,掌握STM32单片机独立看门狗的工作机 制、配置流程和方法。 • 掌握STM32单片机窗口看门狗的工作机制、配置流程和方 法,以及注意事项。
STM32单片机窗口看门狗编程
• 窗口看门狗( Window Watchdog,WWDG),通常用来检 测由外部干扰或不可预见的逻辑条件造成的应用程序背离正 常运行序列而产生的软件故障。WWDG从APB1时钟分频后 得到的时钟驱动,通过可配置的时间窗口来检测应用程序非 正常的过迟或过早的操作。
独立看门狗与窗口看门狗的区别
机器人辅助32位单片机课程
第十二章 STM32单片机看门狗编程及其应用
华中科技大学控制科学与工程系 深圳市中科鸥鹏智能科技有限公司 彭刚
摘要
• 看门狗介绍 • STM32单片机独立看门狗编程
任务一 任务二 独立看门狗编程 认识系统节编程
任务三 窗口看门狗编程
任务一 独立看门狗编程
• 利用IWDG进行检测和解决由系统错误引起的故障。 • 例程参考P284:IWDG.c • 当程序正常运行时,每隔30ms会重新装载IWDG计数器。当程 序进入死循环时,计数器递减到0,系统发生复位。当系统检 测到复位后电量LED。
任务一 独立看门狗编程
• 需要注意: • (1)因为独立看门狗使用的是LSI,所以复位与时钟初始化 函数RCC_Configuration中加入:
WWDG“过早”复位
WWDG“过迟”复位和“过早”复位
任务二 窗口看门狗编程
• 如果主程序不再进行SysTick初始化,即每隔30ms不再重新装 载WWDG计数器,且While(1)中的循环代码不再做修改,而 在WWDG中断服务函数中添加复位WWDG看门狗代码。这样修改 后程序运行期间没有间隔一定时间就去重新装载WWDG计数 器,因此当这个计数器递减到0x40时,会进入 WWDG_IRQHandler中断服务函数,重新装载WWDG递减计数器, 防止WWDG产生系统复位。
•
STM32单片机窗口看门狗编程
• WWDG有一个7位的递减计数器,被当成看门狗用于发生问 题是复位整个系统。 • STM32单片机窗口看门狗线管的寄存器有:
WWDG控制寄存器:WWDG_CR,递减计数器被包含在这个寄存器中, 初值为0x7F. • WWDG配置寄存器: WWDG_CFR ,初值为0x7F. • WWDG状态寄存器: WWDG_SR •
任务二 认识系统节拍定时器
• ARM Cortex-M3内核集成了一个系统节拍定时器SysTick, 它是一个24位递减计数器,SysTick设定初值并使能后,每 经过一个系统时钟周期,计数值就减1,减到0时,计数器自 动重装初值并继续计数,同时内部的COUNTFLAG标志会置 位,触发中断。 • 尝试一下用SysTick编写LED闪烁程序。
• 工程素质和技能归纳
看门狗介绍
• 单片机系统会由于受到外界的干扰,而造成程序执行紊乱, 系统无法正常运行。为了防止这种情况的发生,产生了一种 用于检测程序运行状态的电路或芯片,俗称看门狗 (Watchdog)。
• 看门狗可以分为独立与单片机外部的看门狗芯片和单片机内 集成的看门狗外设模块两种。 • 看门狗有一个输入信号,也称“喂狗”;有一个输出信号给 MCU的复位端。系统运行后启动看门狗计数器,看门狗开始 计数,当计数满后(一定时间)未收到清零信号(喂狗), 看门狗计数器会溢出,引起看门狗中断,造成系统复位。 • STM32F10x内置两个看门狗:独立看门狗和窗口看门狗。
STM32单片机独立看门狗编程
• STM32单片机IWDG结构如图
• 工作原理:在键寄存器中写入0xCCC,开启独立看门狗,此时 计数器开始从复位值0xFFF递减计数。当计数到0时产生一个 复位信号。无论何时向键寄存器中写入0xAAAA,重载寄存 器中的值就会被重新加载到计数器,从而避免看门狗复位。
• 独立看门狗IWDG有独立的时钟,它不受系统硬件影响,可以作为系统故 障探测程序用,主要用于监视硬件的错误。而窗口看门狗WWDG的时钟 与系统相同,可以认为是系统内部的故障探测器。如果系统时钟不走了 ,这个窗口看门狗也就失去作用了,主要用于监视软件错误。WWDG计 数器达到给定的超时值时,会触发中断,这是给应用程序最后一次喂狗 的机会。 通常这个中断不是让应用程序执行喂狗操作,因为既然进入到这个中断 ,就表示应用程序在其他地方的喂狗操作不能奏效,所以发生这种现象 时,肯定是系统有问题了,或者是程序有Bug,或者是碰到了干扰。因此 在这种情况下,WWDG中断是为了让应用程序在发生复位前,安排一些 紧急处理的任务:保存重要的数据和状态参数,或做系统刹车(如电梯 控制)等操作。由此看出,简单地在WWDG中断服务程序中“喂狗”,既 没有发挥WWDG相对于IWDG的优势,又因为在WWDG中断中喂狗而为 系统留下了隐患,发生不可预料甚至灾难性的后果,达不到看门狗的作 用。
STM32单片机独立看门狗编程
• 独立看门狗(Independent watchdog,IWDG)的时钟系统是 由一个12位递减计数器和一个8位的预分频器构成的使用独立 40KHZ内部低速LSI RC振荡器提供。
• STM32单片机的IWDG相关的寄存器有:
– – – – IWDG键寄存器: IWDG_KR IWDG重装载寄存器: IWDG_RLR IWDG预分频寄存器: IWDG_PR IWDG状态寄存器: IWDG_SR
STM32单片机窗口看门狗编程
• STM32单片机窗口看门狗模块结构图如下所示:
STM32单片机窗口看门狗编程
• • 窗口看门狗会在以下两种情况下产生复位: (1)如果7位递减计数器值在T6位便0之前没有被刷新,即未被重置, 那么看门狗电路在达到预置时间周期时,会产生一个MCU复位。可以理 解为“过迟”复位。 (2)在递减计数器达到窗口寄存器数值之前,即大于这个设定数值时, 如果递减计数器数值被刷新,那么也将产生一个MCU复位。可以理解为 “过早”复位。
• 窗口看门狗,每隔30ms重新装载计数器,此时WWDG计数器的 值为0x5F,满足WWDG递减计数器必须在其值小于窗口寄存器的 数值0x70并大于0x3F时才能被重新装载的条件,不会产生 WWDG复位。
任务二 窗口看门狗编程
• 如果程序进入某个代码片段,如在按键中断服务程序中发生 了死循环,不能退出来,那么喂狗程序无法执行,当计数器 从0x40递减到0x3F时,发生系统复位。这是过迟复位。复位 后程序检测到复位与时钟配置寄存器中的控制/状态寄存器标 志位“WWDGRSTF”为1,表明窗口看门狗复位,点亮LED。
任务一 独立看门狗编程
• (4)独立看门狗在使用SysTick中断来重新装载计数器。为 了不影响SysTick其他的应用,在“stm32f10x_it.c”文件中加入 以下代码:
• int Tic_IWDG;//喂狗循环程序的频率判断变量 • void SysTickHandler(void) • { • Tic_IWDG++;//变量递增 • if(TIC_IWDG>=10)//每10个SysTick周期,喂狗一次 • { • IWDG_ReloadCounter();//喂狗 • Tic_IWDG=0;//清零 • } • }
•
任务二 窗口看门狗编程
• 程序正常时,每隔一定的时间重新装载WWDG计数器,即“喂 狗”一次,假设程序进入某个代码片段,比如按键中断,发 生了死循环,不能退出来,那么“喂狗”程序无法执行,当 WWDG计数器递减到0x3F时,达到设定的超时值,系统复位。 例程参考P293:WWDG-1.c
任务二 窗口看门狗编程
• • RCC_LSICmd(ENABLE);//打开LSI While(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==REST);//等待直到 LSI稳定
• (2)喂狗周期要小于独立看门狗计数超时值;同时超时值要 大于程序正常执行循环一次的周期。 • (3)IWDG初始化程序要在SysTick的初试化之后。