1、概述STM32F10xxx 内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。 独立看门狗(IWDG)由片内的40k RC振荡器作为时钟源,即使主时钟发生故障它也仍然有效。并且是深度休眠的时候,这个看门狗可以作为一个CPU 的定时唤醒闹钟,以达到超低功耗的同时还会定时醒来.看门狗由于最大可以分频到256,看门狗定时器最大可以设置到0xfff,所以最最长的喂狗时间是26秒,用于CPU的唤醒恰到好处。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。 2、问题 1、驳中断(如定时器)喂狗程序跑飞了可是中断不一定会死(中断一般都有自己固定不变的中断向量地址,这样即使主程序飞,中断也能正确地跳入自己的轨道继续运行.。中断属于一种异常,一般情况下所有异常都会得到正确的执行,即使你的系统发生了一些不可预知的错误导致软件跑飞,每次中断还是会准确地进入,这个时候喂狗等于你把看门狗硬件给禁掉一样。)建议在运行等级最低的程序中喂狗,一般是主程序中。系统中,我认为一般是定时器中断响应程序,因为它是最经常运行的部分,其他进程都是在时隙中运行。 再驳"主程序喂狗论" 在主循环内刷新中断标志,即再次打开自己所需的全部中断.在主循环内判中断进入标志(或中断进入次数)再喂狗.或在主循环内设置主循环内驻留标志(表示中断是从主循环跳入的)。中断中喂狗后清除那个主循环内驻留标志,这样: 1.如果主程序飞,则定时中断照常工作时,将收不到那个主循环内驻留标志,则不喂狗(硬件看门狗),若无硬件看门狗,则定时中断数次后,强行软件复位!!!(起到了软件看门狗的作用) 2.若主程序不飞,且主循环强制刷新中断标志,一般都能定时中断,即使不能中断,则系统得不到喂狗,则硬件看门狗动作,系统复位。 2、主程序喂狗和中断喂狗搭配使用喂狗 主程序中喂狗的优点: l 系统资源占用少、简单; 缺点: l 要保证你的主程序不会进入死循环,而且死循环中又有喂狗的情况; l 要保证1.6S至少被调用一次,要保证所有可能的正常运行时,都能正常喂狗。 任务中喂狗: 一定要保证在正常情况下,1.6S内该任务至少被调用一次 中断喂狗: 缺点: 在系统进入一个不正常的循环时,中断喂狗仍然起作用,看门狗失去它本来的作用、系统资源占用比较多 “喂狗”是在看门狗 定时器溢出前对其进行的一次复位操作,以迫使看门狗定时器复零,以避免错误的系统复位。通常在主循环即后台的某处设置一标志(俗称软狗标志),在中断(一般在定时器)即前台的某处 检测此软狗标志,若有则认为主程序此时运行正常,否则不喂狗直到狗咬人(复位)。 反之也可在前台设置软狗标志,在后台真正喂狗。 这种方法是前后台依据软狗标志互相沟通以达到正确而有效的喂狗目的。而此种方法的中断喂狗一般用于低功耗的系统中,它的优点是喂狗周期固定,而且很容易做到在 一处真正喂狗。 此种方法的主循环喂狗的缺点是喂狗周期相对不固定,有可能需要多处喂狗。
|