STM32—IWDG独立看门狗的使用
- 格式:docx
- 大小:11.59 KB
- 文档页数:4
ST单片机:独立看门狗和窗口看门狗
STM32单片机中有两只看门狗,分别是独立看门狗和窗口看门狗。
这两只看门狗有什么区别,今天来看一下。
1. 时钟源的区别
▪独立看门狗使用的是内部低速时钟,其频率为40kHz,但是这个40KHz不是准确的,其大致的范围是(30-60)KHz。
该时钟与外设时钟无关,所以不受系统晶振影响。
▪窗口看门狗使用的是PCLK1的时钟,该时钟与晶振相关。
2. 喂狗时间不同
▪独立看门狗喂狗时只要下限大于0就可以,上限是0XFFF。
而窗口看门狗必须在一个区域内喂狗才可以,上限是0x7F,下限是0X40,
3. 计数器不同
▪独立看门狗的计数器是12位递减的,即最大值是0XFFF;
▪窗口看门狗的计数器是7位递减的,即最大值是0X7F;
4. 产生结果不同
▪独立看门狗时,如果超时不喂狗,则直接产生复位,程序从头执行;
▪独立看门狗会在计数器到达0X40时产生中断,在0X3F时产生复位,所以可以把独立看门狗看成是一种中断。
使用用途举例
▪独立看门狗可以用来防止程序跑飞,在程序中开启看门狗,定时喂狗,尤其在通讯中使用广泛,当逻辑处理不当,使程序一直处于发送或接收状态不退出时,这时独立看门狗可以使程序复位,程序从头执行。
▪窗口看门狗可以产生中断,利用这一特点可以用来进行数据保存,当产生窗口看门狗中断时,可以用来保存数据。
如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。
看门狗主要是用于在发生系统软件故障时,将系统复位。
也可以用于将系统从休眠或空闲模式唤醒。
STM32 独立看门狗IWDG 与窗口看门狗WWDG2010年05月03日星期一21:54 独立看门狗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独立看门狗和低功耗模式_RTC定时唤醒来喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。
其中独立看门狗的时钟由独立的RC振荡器(STM32F10x 一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。
而且独立看门狗一旦启动,除了系统复位,它不能再被停止。
但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。
那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用?
一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。
比如看门狗复位的时间间隔为10s。
那么在进入休眠模式前设置RTC闹钟中断时间为5s。
这样每隔5s唤醒一次喂一次狗。
便可以很好的解决这个问题。
while(1)
{
// 执行任务
Task1();
Task2();
// ..
// 喂狗
dev_iwdg_feed();
// 进入待机模式开关
if(m_bEnterStandByMode)
{
// 使能外部中断,GPIOB3,用以MCU从待机模式唤醒
dev_exTI_enable(TRUE);
ENTERSTOPMODE:
// 设置RTC闹钟,5秒钟产生一次RTC闹钟中断*/
dev_rtc_setAlarm(5);。
STM32 看门狗WWDG 和IWDG 的区别是什么STM32 有2 个看门狗:独立看门狗和窗口看门狗。
独立看门狗IWDG:独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同。
如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。
简单的讲,看门狗就是检测系统故障的,如果因为系统故障而没有及时喂狗,则引发复位重启。
对于一般的独立看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是这样有一个隐患,有可能程序跑乱了又跑回正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一按的看门狗就检测不出来故障了;但是如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行,非正常地跳过了某些程序段的情况。
STM32 单片机中的独立看门狗与窗口看门狗有哪些
不同之处
1.关于看门狗的解释不再说明,窗口看门狗简而言之即只能看某个窗口期即某段时间内才能够喂狗。
32 的独立看门狗是没有中断的,而窗口看门狗可根据需要配置中断
2.关于独立看门狗和窗口看门狗的应用,手册p316 即17.1 节讲的非常清楚。
首先独立看门狗和窗口看门狗都可用来监视软件程序是否正常运行,而
具体而言,因为独立看门狗独立于系统时钟单独运行,因此其可用来监视是
否发生了硬件错误,比如说系统时钟故障,看门狗仍然能够起到重启的作
用,但是独立看门狗的计时精度比较差,更多的应用在独立系统运行之外的
对计时要求低的地方。
而窗口看门狗是由系统时钟提供的,因此其计时也会
很准确,当然其也就只能用来检测软件故障,比如硬件故障系统时钟坏了,
自身也就不动了,也就没有检测硬件故障的作用,因此窗口看门狗是用在检
测应用软件是否准确运行时使用的。
当然我们用系统情况下其实完全可以不使用32 提供的看门狗,我们自己某个任务的一个变量即实现看门狗的功能了。
3.另外注意,看门狗只是解决软件异常,独立看门狗称为硬件看门狗是其。
IWDG和WWDG分析关于本博文的介绍:1.基于STM32F103ZET芯片和3.5V标准库2.分开介绍两种模式:独立看门狗IWDG和窗口看门狗WWDG3.从寄存器,介绍到对应的库函数;一什么是看门狗?单片机系统在正常执行程序时,当收到外界各种物理干扰或其他原因出现程序跑飞或者陷入死循环的现象,而使得正常的程序无法正常运行,导致MCU挂掉,看门狗就是为了解决这么个问题而出现的;二工作原理在一定时间内(时间由看门狗定时计数器决定)没有接收到喂狗信号(表示MCU挂了),便实现处理器自动复位重启(发出复位信号);** IWDG和WWDG的时钟源 **从图中可以看出:1.独立看门狗IWDG有自己独立的时钟源——LSI2. 窗口看门狗WWDG的时钟源——PCLK1由此图可以看出:在编程时,IWDG不需要使能时钟源,而WWDG需要;所以IWDG的操作会比较简单一些;独立看门狗定时器IWDG一相关寄存器以及功能(1)键值寄存器IWDG_KR功能和使用方法:1.当[15:0]位被写入0xCCCC时,使能,此时寄存器从其0xFFF 开始递减计数,当递减到0x0000时,会产生一个复位信号(IWDG_RESET)2.当[15 : 0]位被写入0xAAAA时,IWDG_RLR寄存器中的值将会被重新加载到计数器中(这就是喂狗的过程),就是通过这个功能,从而避免产生MCU复位;3.当寄存器被写入0x5555时,可以访问IWDG_PR和IWDG_RLR寄存器;(这里要注意了,这个重要,因为如果IWDG_PR和IWDG_RLR不能被写入数据,也就是相当于无法给IWDG预分频和重载值)(2)预分频寄存器IWDG_PR功能和使用:对照着对[2:0]位的介绍选择分频因子;(3)重载寄存器IWDG_RLR功能和使用方法:看方框中吧;(4)状态寄存器IWDG_SR功能和使用方法:看方框中吧;二编程步骤1.取消寄存器写保护(也即是先IWDG_KR中写入0x5555)2.目的:取消PR和RLR寄存器写保护,从而可以操作这两个寄存器3.库函数:4.void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);5.设置预分频系数和重装载值6.库函数:7.void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);8.void IWDG_SetReload(uint16_t Reload);9.这里要明白一个重要的概念:10.Tout(ms) = ((4*2^prer) * rlr)/40;Tout:要设置的溢出时间,也就是多久初始化一次MCU,单位是msprer :分频系数rlr :重载值;比如:prer = 4,rlr = 625时,Tout = 1000ms11.重载计数值喂狗(向IWDG_KR写入0xAAAA)12.库函数:13.void IWDG_ReloadCounter(void);14.启动看门狗(向IWDG_KR 写入0xCCCC)15.库函数:16.void IWDG_Enable(void);自此,整个程序就完成了;比较简单;窗口看门狗WWDG“窗口”的原因:因为喂狗的时间有一个时间上的限制,必须在一定时间范围内(窗口);这个时间范围(窗口)上限是相关寄存器配置;下限时间是0x40;在这段时间内要完成喂狗,否则将会发生MCU复位;一 WWDG发出复位信号的条件1.计数器的数值从0x40减到0x3F时候;2.喂狗的时候,计数器的值大于WWDG_CFG寄存器设置的数值;注意:上面第二点需要特别注意,在后面进行编程的时候,我们会发现有两个喂狗函数:1.看门狗设置计数器(喂狗)函数WWDG_SetCounter(0xXX),这是一个经常放在WWDG中断函数中的一个专门又来喂狗的函数,0XX被送往CR寄存器;2.看门狗启动函数**WWDG_Enable(0xXX)**的这个括号里有一个0xXX值,也同样被送到CR函数执行了一次喂狗操作;所以一定要注意一个原则:这两个函数的实参都不能是大于窗口值,否则就直接发生复位了;**二 WWDG的特点 **当MCU受到外界干扰或者内部干扰时候,导致程序出现跑飞或者死循环现象的时候,有一种情况是:程序在死循环的时候同时执行了喂狗程序,这就尴尬了,看门狗就无法起到了作用;如果使用窗口看门狗,程序员可以根据程序执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗或滞后刷新看门狗,这样可以检测出程序有没有正常的执行程序;三相关寄存器功能先总结一下:控制寄存器——WWDG_CR——使能WWDG,WWDG倒计数计时器;配置寄存器——WWDG_CFG——设置唤醒中断标志位,设置分频因子,设置上窗口的值;状态寄存器——WWDG_SR——唤醒中断位中断标志;1.控制寄存器WWDG_CR2.3.功能和使用:4.[7]:WWDG功能的开关位;5.[6:0] : 1. 这7位的值为要递减的值;6.2. 喂狗就是要对这7位赋值(赋值的时候绝对不能大于窗口值);7.3. 这几个位所能承受的最大值0x7F,最小值是0x40;2.配置寄存器WWDG_CFG[9] : EWI提前唤醒中断,说白了此位置1会开启WWDG中断,调用相应中断相应函数;[8:7]:设置分频因子;经过此处分频后,即可得到CR寄存器中的递减周期;[6:0]:窗口值,是可以喂狗和不可以喂狗的临界点,当此处的值大于计数器的值时方可喂狗,否则不可喂狗;3.状态寄存器WWDG_SR当EWIF位被置1,说明程序正在执行中断函数或并没有开启WWDG中断四窗口看门狗WWDG关于周期的计算:《STM32f103使用手册》中给出了下面这个超时公式,但是我觉得实在是有些无厘头的计算,为什么要给一个T[5:0]的计算,并且我也没搞懂所谓的超时公式这个“超时”到底超的是谁;所以我觉得要正确的配置窗口值和喂狗的值只要对计数器T[6:0]的递减周期足够理解就好了;所以我总结如下:一,计数器T[6:0]的递减周期:T1 = (4096*2^WDGTB)/PCLK1;PCLK1:APB1上的时钟频率,在库函数提供的默认配置下,PCLK1默认为36MHz;WDGTB:分频系数(1,2,4,8);二,在配置窗口值,喂狗值时要遵循的规则:0x7F >= 窗口值 >= 喂狗值 >=0x41; 超时时间范围:(图片下方用我总结的计数器递减周期公式计算一下怎么得到的下边的这个表格) 例如:当配置将使WDGTB=2^3时,PCLK1=36MHz时,可得递减周期约为910us,然而我们又知道T[6:0]的最大值为0x7f,最小值为0x40,则(0x7f - 0x3f)=0x40=64(十进制),即64*910=58240us=58.240≈58.25ms;当窗口值和喂狗值同时设置为0x41时,中断周期就是910us,为0x7f时,中断周期就是58.25ms;所以当WDGTB=8时,中断周期就可以认为的在910us~58.25ms中间设定;事实就是这样;编程思路五编程步骤一定要切记这个步骤,不然因为对EWIF位的不理解导致错误(1)开启WWDG时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);(2)设置窗口值和分频系数值(配置WWDG_CFG)void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//设置分频因子void WWDG_SetWindowValue(uint8_t WindowValue);//设置窗口值(3)使能WWDG,并加载初值void WWDG_Enable(uint8_t Counter);这里需要特别注意:如果说Counter的值为0x7F(MAX),会使得WWDG_SR寄存器中的EWIF位(提醒中断标志位)。
stm32 独立看门狗[操作寄存器+库函数]以单片机为核心的微型计算机系统中,单片机经常会受到来自外界电磁场的干扰。
造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作。
看门狗就是一种专门用于检测单片机程序运行状态的硬件结构。
stm32也是如此。
stm32 的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障时,它也仍然有效。
这里需要注意的是独立看门狗的时钟是一个内部时钟,所以不是准确的40Khz,而是在30~60Khz之间的一个可变化的时钟,看门狗的时钟对时间的要求不是很精确,所以时钟有偏差可以接受。
本例直接操作寄存器实现验证独立看门狗的复位功能,设定一个800ms的喂狗时间,在主函数中实现LED闪烁,如果设定一个1s的延时,则触发独立看门狗复位,LED常亮。
库函数实现当外部中断发生(按下PA0按键),长时间不喂狗,引发独立看门狗复位时,向外用串口输出复位提示。
直接操作寄存器使用独立看门狗,需要了解一下寄存器:键值寄存器:(IWDG_KR)低16位有效的寄存器,只写寄存器,读出值恒为0x0000. 软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。
写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。
写入0xCCCC,启动看门狗工作。
预分频寄存器:(IWDG_PR)第三位有效寄存器,用于设置看门狗的分频系数,最低为4,最高位256.通过设置PR[2:0]:位来选择计数器时钟的预分频因子。
要改变预分频因子,IWDG_SR寄存器的PVU位必须为0。
000: 预分频因子=4100: 预分频因子=64001: 预分频因子=8101: 预分频因子=128010: 预分频因子=16110: 预分频因子=256011: 预分频因子=32111: 预分频因子=256重装载寄存器:(IWDG_RLR)低12位有效,RL[11:0]。
stm32看门狗时间计算独立看门狗和窗口看门狗的特性是什么STM32看门狗时间计算(TWDG):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 的低速时钟为驱动; 因此,即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的行为。
可通过IWDG_SetPrescaler(IWDG_Prescaler_32); 对其时钟进行分频,4-256,通过以下方式喂狗:/* Reload IWDG counter */IWDG_ReloadCounter();3. 1.25KHz 即每周期为0.8ms。
单片机看门狗简介单片机看门狗(Watchdog Timer,简称WDT),是一种常见于嵌入式系统中的硬件设备,用于监控系统的运行状态并在出现故障时采取相应措施。
该设备在单片机的内部,通过定时器和逻辑电路实现对系统的监控,一旦系统停止响应或发生意外情况,看门狗会自动执行预定义的操作,如复位系统等。
工作原理单片机看门狗的工作原理是基于定时器和逻辑电路的组合。
在系统正常运行时,定时器会周期性地进行倒计时,并通过逻辑电路的判断来确认系统是否正常。
如果系统一直能够及时喂狗(喂狗指的是定时器的计数周期内向看门狗喂入脉冲),看门狗认为系统处于正常状态,并在每次喂狗后重新计时。
如果在设定的时间内没有喂狗,看门狗会判断系统发生故障,进而执行相应的操作,如复位系统。
应用场景单片机看门狗在嵌入式系统中的应用场景非常广泛,特别是对于那些对系统可靠性要求较高的应用。
以下是几种常见的应用场景:1. 实时操作系统(RTOS)在实时操作系统中,单片机看门狗经常被用来监控任务的运行状态。
通过设定适当的看门狗定时器,并在每个任务执行的过程中定时喂狗,可以确保系统在出现任务堵塞或死循环等情况时得以及时恢复。
2. 工业控制系统在工业控制系统中,单片机看门狗常用于监控各个任务的运行状态,并保证系统的稳定性和可靠性。
例如,对于PLC (可编程逻辑控制器)等系统,单片机看门狗能够在检测到系统堵塞或故障时及时进行恢复,避免生产过程中的停机等问题。
3. 汽车电子领域在汽车电子领域,单片机看门狗被广泛应用于汽车电子控制模块(ECM)等关键系统。
通过监控系统的运行状态,单片机看门狗可以在检测到系统故障时进行自动恢复,并确保汽车电子系统的稳定性和可靠性。
优势与注意事项单片机看门狗作为嵌入式系统的重要组件,具有以下优势:1.提高系统可靠性:通过定期检测系统状态并自动执行相应操作,单片机看门狗可以在系统发生故障时迅速恢复系统的正常运行。
2.简化系统设计:单片机看门狗可以作为一个独立的硬件设备存在,与系统的其他部分相互独立,从而简化了系统设计和整合的复杂性。
【青风带你学stm32f051系列教程】第4课看门狗WDG爱板网【青风带你学stm32f051系列教程】第4课看门狗WDG2012年12月10日 ? 教程 ? 暂无评论 ? 被围观 1,034+第4课看门狗WDG在stm32f051系列CORTEX M0中内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。
两个看门狗设备( 独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗(IWDG) 由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
这里面我们举一个例子,设置IWDG的实验,也就是独立看门狗。
我们演示了独立看门狗重导计数器如何在一个常规周期内升级并且在设定周期内通过模拟软件错误产生MCU的独立看门狗复位。
正常情况向程序在实现无限循环,当通过外部中断模拟一个软件错误,就要进行喂狗,整个循环中断跳出,看门狗进行系统复位。
这就是我们需要达到的效果。
下面就通过软硬件方面进行分析:软件准备:打开keil编译环境,设置系统工程树如下图所示:如上图所示,我们需要配置的就是IWDG和定时器TIM14的设置,库函数调用stm32f0xx_iwdg.c,中断函数在stm32f0xx_it.c函数内。
独立看门狗的整个系统结构如下图所示:在设置定时器时我们主要配置TIM14去测量LSI振荡频率,在中断中,写一个无效地址产生一个硬故障异常使得无法回到主程序(这时IWDG从导计数器没有被更新),设置代码如下:上面同时设定了定时器TIM14的嵌套中断,中断函数中我们要计算出 LsiFreq ,也就是LSI 的时钟频率,可以按照下面方式进行设定:然后我们需要确定定时器的工作方式:上面的工作做完后,我们就可以通过TIM14定时器来确定LIS的工作频率,那么IWDG需要通过LSI的工作频率驱动装载值,试验中,我们设240ms的循环时间,250ms为超时时间,当超过250ms的时候认为出现了软件错误,需要喂狗。
一文了解STM32窗口看门狗的真正作用
STM32有2个看门狗:独立看门狗和窗口看门狗。
独立看门狗IWDG--独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
窗口看门狗WWDG----系统内部的故障探测器,时钟与系统相同。
如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。
简单的讲,看门狗就是检测系统故障的,如果因为系统故障而没有及时喂狗,则引发复位重启。
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是这样有一个隐患,有可能程序跑乱了又跑回正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一按的看门狗就检测不出来故障了;但是如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行,非正常地跳过了某些程。
Same as STM32F-1系统外设独立看门狗(IWDG)IWDG ——概述可通过option byte来选择是否使能硬件IWDG功能更先进的安全功能:IWDG使用独立的低速时钟LSI作为时钟源,并在主时钟无效时仍然保持运行 一旦使能了IWDG,该功能就不能被禁止(LSI也不能被停止)安全的刷新修改序列由于IWDG模块属于VDD供电域,因此即使在停止和待机模式下,仍然保持功能(IWDG的复位信号能将芯片从待机模式下唤醒)防止IWDG复位信号产生:在计数器自减到0之前,向IWDG_KR寄存器写入AAAAhRCC_CSR寄存器的IWDGRSTF位指示是否产生了IWDG复位事件使用32KHz的LSI,IWDG复位的最短和最长时间间隔为125us和32.7s8-bitPRESCALERLSI(38KHz)12-bitreload value12-bitdown counterPrescalerRegisterStatusRegisterReloadRegisterKeyRegisterIWDGReset VDD voltage domainVCORE voltage domainIWDG最适合那些不需要很高精度,但需要独立于主进程之外的独立看门狗的应用Same as STM32F-1系统外设窗口看门狗(WWDG)WWDG ——概述可配置的时间窗口,应用程序需要在一个有限的时间窗口内刷新自减计数器有条件的复位: 当窗口看门狗使能,并且自减计数器小于40h(T6=0)时,产生复位当窗口看门狗使能,并且在自减计数器达到窗口寄存器数值之前更新了自减计数器,产生复位防止窗口看门狗复位信号产生:定期的,在自减计数器数值小于窗口范围(W[6:0])时,写T[6:0](其中T6位写1)早期唤醒中断(EWI):当自减计数器达到40h 时产生中断Î此中断可用于重载自减计数器 RCC_CSR 的WWDGRSTF 位指示是否发生了WWDG 复位事件使用32MHz 的PCLK1时钟时,WWDG 的最短和最长复位时间间隔分别是128us 和65.54msWWDG最适合那些需要精准时间控制的看门狗的应用Refreshnot allowed Refresh WindowT[6:0] CNT down countertimeW[6:0]3FhT6 bitResetCM PW0W1W2W3W4W5W6-T0T1T2T3T4T5T6WDGAWWDG_CR WWDG_CFR PRESCALER (WDGTB)6-Bit Down CounterPCLK1(up to 32MHz)Write WWDG_CRcomparator = 1 whenT6:0 > W6:0WWDG Reset。
STM32F103系列单片机最实用看门狗的详细资料概述为什么使用看门狗事情很简单先前做的一款采集数据的产品不知道为何异常,陷入死循环然后“死机”,分析了很多次,没发现原因,但是每次重新上点后就能正常采集到数据。
后来找到了解决方法:看门狗!目的是当程序走入死循环或者硬件异常时,可以自动复位,这样就可以得到跟重新上电后差不多的效果了。
使用的平台:stm32f103系列单片机使用的烧写调试模式:Jlink SWD 模式。
使用STM32官方模板库。
ST系列单片机看门狗分为两种:1.独立看门狗,2.窗口看门狗。
独立看门狗:可参看RM(reference Manual)的Independent watchdog (IWDG)当然,只是简要查看下RM中的介绍(至于寄存器的操作,我们可以略过,因为我们使用库的开发,但是基本流程一定要了解!)。
在这里我们要抓住几个关键点:a、stm32f10x系列有两个看门狗,看门狗主要用于检测由于软件出错的问题,并触发系统自动复位,或者触发一个中断(窗口看门狗才有)。
b、独立看门狗的时钟源为LSI,尽管主时钟出错,它还是能保持激活状态。
窗口看门狗的时钟源为APB1时钟,并且可以修改分频值。
c、独立看门狗:有独立时钟(内部低速时钟LSI),所以不受系统硬件影响的系统故障探测器。
主要用于监视硬件错误。
精确度要求比较低。
d、窗口看门狗:时钟与系统相同。
如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。
精确度要求更高。
看门狗原理简介:有某个寄存器按照时钟源不断的递减(有只狗,不断的消耗能量),当该。
STM32单片机的独立看门狗和窗口看门狗的特点及用法解析1.看门狗介绍看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。
使用看门狗保证系统正常地运行是非常有必要的。
我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。
看门狗分为软件看门狗和硬件看门狗两类,其原理都是使用一个独立定时器来计时,超出时间就会产生复位信号,主要区别看是否具有独立的硬件结构,如果有,就是硬件看门狗,如果是一个普通定时器实现的那么就是软件看门狗。
STM32F407片内有两个看门狗:独立看门狗IWDG以及窗口看门狗WWDG,下面来讨论各自的特点和用法。
2.IWDG的特点以及使用IWDG是一个独立看门狗,具有独立于系统的时钟,与片外看门狗更为相似,使用片内独立的阻容时钟发生电路计时,记录时间为=(时钟频率(40KHz)/ 分频数)*IWDG_SetReload (t),t《0xFFF.也就是说记录的最大设定的复位时间为(1/40K)*256*0xFFF = 26.2 S。
由于IWDG使用的时钟本身不准确,会因为漂移产生一定变化,喂狗时应该给出一定的裕量。
另外,这个时钟与系统时钟并无关联,所有也不能与系统进行同步产生中断,一旦定时时间到后就会产生复位信号,系统来不及存储当前运行状态就会重启,可以在要求不高的场合使用。
3.WWDG的特点以及使用WWDG具有一个独立的7位定时器,使用系统时钟,可以产生系统中断。
其定时最时间为(1/PCLK1)* 4096)* 分频系数(最大为8)*(0x7F –0x3F)= 58ms.其复位的条件是:(1)当计数器的数值从0x40减到0x3F(2)当刷新看门狗时计数器的数值大于窗口上限值时满足任何一条都可以产生复位信号。
通常情况下设置窗口上限值为0x7F,下限值默认为0x40,计数器向下数到0x40就会产生中断,下个910us后变为0x3F就会复位系统。
STM32—IWDG 独立看门狗的使用STM32---IWDG 独立看门狗的使用
独立看门狗(IWDG)由专用的40kHz 的低速时钟驱动,
即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1 时钟分频后得到的时钟驱动,
通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,
能够完全独立工作,并且对时间精度要求较低的场合。
WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。
IWDG 主要性能
●自由运行的递减计数器
●时钟由独立的RC 振荡器提供(可在停止和待机模式下工作)。