STM32独立看门狗和窗口看门狗的使用

发布时间:2024-04-07  

看门狗(watch dog)是一个定时器,可以设置一个定时时间,计时到时会把MCU复位,所以MCU必须要在定时时间到之前将计数值重置(这个动作通常称为喂狗)。

嵌入式系统中加入看门狗,可以监测MCU是否还在正常运行,如果软件跑进死循环、或者出现其他错误,导致不能及时重置看门狗计时器,则时间一到MCU就会被复位,重新回到初始状态,以此跳出错误状态。


Stm32内部带有独立看门狗、窗口看门狗。独立看门狗使用时,只要喂狗时间不大于设定的时间就可以,是最常用的看门狗用法;而窗口看门狗,需要喂狗时间在一个上下限范围内,才能重置看门狗计时器。

下面我们就分别学习一下这两种看门狗的使用。

1)stm32的独立看门狗(IWDG)

我们在之前的串口中断工程上修改,以便于打印数值查看。

使用cubemx打开串口中断的工程,然后另存为IWDG工程,打开独立看门狗,并设置分频系数和重载计数值:

poYBAGNPsTOAGEeRAALZ8pJBXdE533.png

然后,切换到clock configuration页面,可以看到IWDG的时钟来自于内部的低速RC振荡器,频率是40kHz:

poYBAGNPsViAVhjBAAKlKfgTAm4189.png

结合设置的分频系数和重载计数值,我们可以计算出看门狗的定时时间:

64*1000/40kHz = 1.6s

生成keil工程文件,打开,我们可以看到main函数中已经有初始化IWDG的代码,MX_IWDG_Init()这个函数设置了我们的分频和计数值,并启动了看门狗。

在使用时,我们在主循环中,需要在每1.6s之内喂一次狗(调用一次HAL_IWDG_Refresh()函数)。如下图所示,代码中是每1s喂一次狗,右边的运行结果可以看出,程序一直在正常运行,没有被复位:

poYBAGNPsXKATbpbAACDEanmFd0770.png

而如果我们改变延时的参数,变成每2s喂狗一次,则可以看到,程序会被复位:

pYYBAGNPsY6AHlH1AAB-ltd2dN8988.png

2)stm32的窗口看门狗(WWDG)

仍然在之前的串口中断工程上修改,以便于打印数值查看。

使用cubemx打开串口中断的工程,然后另存为WWDG工程,打开窗口看门狗,并设置分频系数、窗口值、计数值,并使能早期唤醒中断:

poYBAGNPsaWAIZNuAAMRVoH40J0108.png

这几个参数的含义解释一下:

分频系数比较好理解,WWDG的主时钟是PCLK1(APB1的时钟),这里设置为8,则分频为PCLK1/8/4096;

窗口看门狗的计时器是减法计数,从设置的WWDG free-running downcounter value向下计数,如果不喂狗,计到0x3F时,会复位MCU;因此WWDG free-running downcounter value设置的值必须大于0x3F;而其最大值不能超过0x7F,图中设置的就是最大值0x7F;

WWDG window value的值必须在0x3F和WWDG free-running downcounter value之间,图中设置的值时0x70,表示WWDG计时器从0x7F向下递减时,要减到0x70之下后,才能有效喂狗(即喂狗的窗口区间在0x3F ~ WWDG window value之间)。

使能早期唤醒中断,并开启中断,这里使用中断主要是为了方便指示出是否已到窗口时间内:

pYYBAGNPsb-AT940AAK8Bfi5mP0770.png

然后,到clock configuration页面下,可以看到PCLK1的频率为36M:

pYYBAGNPsd-AEWCCAAKsJuonR80260.png

依据以上信息,可以计算出喂狗的窗口:

PCLK1/8/4096 = 1099Hz;

(0x7F-0x3F)/ 1099 = 58ms;

(0x7F-0x70)/1099 = 14ms;

所以,喂狗的窗口时间约为14ms~58ms。

生成keil工程,打开后,在wwdg.c中添加早期窗口看门狗中断额回调函数,只是置一个标志位:

poYBAGNPsfKADh7HAAApB7RfV28656.png

在主循环中,检测标志位,如果有,则说明已经到窗口时间,需要尽快喂狗;

程序代码和运行结果如下图:

pYYBAGNPsgyANYGBAACJXEkYUVY028.png

可以看到,喂狗的操作起到了作用,程序没有被复位。

3)关于看门狗使用的几个要点

在实际工程应用中,使用看门狗要注意几个要点,否则可能发挥不了它的作用:

a)喂狗的操作,必须要在主循环里,而不能放在定时器中断里!这是很多初学者容易犯的错误!因为,如果出现了主循环跑飞或者陷入某个死循环,定时器中断可能还在正常运行,定期进入中断喂狗,则看门狗不能复位系统,起不到监测系统正常运行的作用;

b)如果是多任务系统,比如使用了实时操作系统,有多个任务在运行,使用看门狗时,需要依据任务功能来设置喂狗规则:在一定时间内必定会运行的一组任务,需要每个任务都执行到之后才喂狗一次,保证所有任务都被监测;可能会被阻塞、或者间隔时间很长(超过看门狗计时时间)运行一次的任务,则不能与喂狗操作相关联,避免正常运行时被意外复位。

好了,本节看门狗相关的知识就讲解到这里。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>