编程经验stm32看门狗详解_第1页
编程经验stm32看门狗详解_第2页
编程经验stm32看门狗详解_第3页
编程经验stm32看门狗详解_第4页
编程经验stm32看门狗详解_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32 有两个看门,一个是独立看门狗,一个是窗口看门狗.这里先说独立看门狗.独立看门狗的特性是,要利用片内的40k RC振荡器作为时钟据(说这个RC是相当的不准),优点就是,即使CPU主晶振停了,即使CPU进入了休眠模式,狗也可以生效.当CPU进入休眠模式,并且是深度休眠的时候,这个看门狗可以作为一个CPU 的定时唤醒闹钟,以达到超低功耗的同时还会定时醒来.看门狗由于最大可以分频到256,看门狗定时器最大可以设置到0xfff,所以最最长的喂狗时间是26秒.用于CPU的唤醒恰到好处。用户手册:STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备

2、(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的40kHz的低速时钟驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。16.2IWDG主要性能自由运行的递减计数器时钟由独立的RC振荡器提供(可在停止和待机模式下工作

3、)看门狗被激活后,则在计数器计数至0x000时产生复位16.3IWDG功能描述图153为独立看门狗模块的功能框图。在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR中被写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位 。void IWDG_Configuration(void) /* 写入0x5555,用于允许狗狗寄存器写入功能 */ IWDG_WriteAccessCmd(IWDG

4、_WriteAccess_Enable); /* 狗狗时钟分频,40K/256=156HZ(6.4ms)*/ IWDG_SetPrescaler(IWDG_Prescaler_256); /* 喂狗时间 5s/6.4MS=781 .注意不能大于0xfff*/ IWDG_SetReload(781); /* 喂狗*/ IWDG_ReloadCounter(); /* 使能狗狗*/ IWDG_Enable();#include "STM32Libstm32f10x.h"#include "hal.h"int main(void) ChipHalInit();

5、 /片内硬件初始化 ChipOutHalInit(); /片外硬件初始化if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!=RESET)LED2_ON;RCC_ClearFlag();/*如果上次的复位是看门复位的话LED2点亮*/ LED1_ON; SysTickDelay(500); LED1_OFF; /*闪LED1 5秒后没喂狗将自动复位LED1又闪LED2亮*/ IWDG_Enable(); /启动看门狗,自动就会使能内部的40K for(;) if(GET_LEFT() IWDG_ReloadCounter(); /手动喂狗 WWDG简介窗口看门狗通常被

6、用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。17.2WWDG主要特性可编程的自由运行递减计数器条件复位当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。见图155。如果启动了看门狗并且允许中断,当递减计数器等于0x40时

7、产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置1), 并且当7位(T6:0)递减计数器从0x40翻转到0x3F(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,也将产生一个复位。应用程序在正常运行过程中必须定期地写入WWDG_CR寄存器以防止MCU发生复位。只有当计数器值小于窗口寄存器的值时,才能进行写操作。储存在WWDG_CR寄存器中的数值必须在0xFF和0xC0之间:启动看门狗 在系统复位后,看门狗总是处于关闭状态,设置WWDG_CR寄存器的WDGA位能够开启看门狗,

8、随后它不能再被关闭,除非发生复位。控制递减计数器 递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门狗被启用时,T6位必须被设置,以防止立即产生一个复位。 T5:0位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入WWDG_CR寄存器时,预分频值是未知的。 配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在其值小于窗口寄存器的数值并且大于0x3F时被重新装载,图155描述了窗口寄存器的工作过程。 另一个重装载计数器的方法是利用早期唤醒中断(EWI)。设置WWDG_CFR寄存器中的WE

9、I位开启该中断。当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(ISR)可以用来加载计数器以防止WWDG复位。在WWDG_SR寄存器中写0可以清除该中断。看这么多7788的肯定晕直接看代码:这个就是窗口看门狗的例程了,窗口看门狗的特性:喂狗太快复位,喂狗太慢复位.迟了喂狗,还可以有中断.WWDG_IRQHandler#include "STM32Libstm32f10x.h"void WWDG_Configuration(void) /* 窗口看门狗时钟允许 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENAB

10、LE); /* 看门狗节拍 = (36M/4096)/8 = 1098 Hz就是说一秒钟计数器减1098下*/ WWDG_SetPrescaler(WWDG_Prescaler_8); /* 窗口值用0x42就是说计数器满是0x7f在减到0x42之前喂狗了就算喂早了-复位*/ WWDG_SetWindowValue(0x42); /*看门狗使能并初始化定时器为0x7f最大就是0x7f计数器减到到0x3F(T6位清零)时,则产生一个复位*/ WWDG_Enable(0x7F); /* Clear EWI flag 清中断标记*/ WWDG_ClearFlag(); /* 使能 EW interr

11、upt这个会在计数器减到0x40的时候产生一个"死前"中断 当然你也可以在这个中断里赶紧喂狗-省的狗咬你(复位)*/ WWDG_EnableIT();/* Function Name : WWDG_IRQHandler”死"前中断* Description : This function handles WWDG interrupt request.* Input : None* Output : None* Return : None*/extern bool Feed_Dog;void WWDG_IRQHandler(void) static u8 led2=

12、0; /* 喂狗 */ if(Feed_Dog=TRUE) WWDG_SetCounter(0x7F); Feed_Dog=FALSE; /* 清中断标志*/ WWDG_ClearFlag(); /每进入此中断,LED2翻转一次 if(led2) LED2_OFF; led2=0; else LED2_ON; led2=1; /*由于喂狗太早也会复位所以 就在“死”前中断 喂狗了for(;) if(GET_LEFT() /按左键,则系统长时间等待,也就是不喂狗! SysTickDelay(1000); Feed_Dog=TRUE; if(GET_RIGHT() /按右键则频繁喂狗 WWDG_SetCounter(0x7F); /按键左右的后果都是复位,不按的话会在“死”前中断【WWDG_IRQHandler】中及时喂狗LED2不停的闪以一般的情况说,这个“死”前中断中断里面不应该喂狗的,而是应该做系统临死前的一些工作,例如保存重要数据之类.*/电子白菜曰"是STM32 芯片内的BUG,至少是我手上那片CPU 的BUG.就是:初始化窗口狗中断前,必须要有片内外设被允许,例如允许GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);只有允许了一个片内外设,再初始化窗口狗中断(NVIC_Configurati

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论