【青风带你学stm32f051系列教程】第4课 看门狗WDG

作者: 青风
上传时间为: 2012-12-11 01:40 AM

第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的时候认为出现了软件错误,需要喂狗。在定时方面采用系统时钟滴答精确定时,如下代码所示:

正常工作状态下,没有发生软件错误,LED2灯按240ms的要求进行循环翻转:

但是当发生了软件错误后,我们需要喂狗,喂狗的操作就是打开LED1灯:

软件错误我们通过按键中断进行模拟,如下所示,设置一个无效的访问:

最后IWDG的相关参数我们在主函数中如下代码进行配置:

实验现象:

通过key中断模拟死循环,通过看门狗喂狗,led灯观察现象:

全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示