STM32有2个看门狗:独立看门狗和窗口看门狗。
独立看门狗IWDG:独立于体系之外,由于有独立时钟,所以不受体系影响的体系毛病探测器,首要用于监督硬件过错。
窗口看门狗WWDG:体系内部的毛病探测器,时钟与体系相同。假如体系时钟不走了,这个狗也就失掉了作用了,首要用于监督软件过错。
简略的讲,看门狗便是检测体系毛病的,假如由于体系毛病而没有及时喂狗,则引发复位重启。
关于一般的独立看门狗,程序能够在它发生复位前的恣意时刻改写看门狗,可是这样有一个危险,有或许程序跑乱了又跑回正常的当地,或许跑乱的程序正好履行了改写看门狗操作,这样的状况下一按的看门狗就检测不出来毛病了;可是假如运用窗口看门狗,程序员能够依据程序正常履行的时刻设置改写看门狗的一个时刻窗口,确保不会提早改写看门狗,也不会滞后改写看门狗,这样能够检测出程序没有依照正常的途径运转,非正常地跳过了某些程序段的状况。
1)独立看门狗没有中止,窗口看门狗有中止;
2)独立看门狗有硬件软件之分,窗口看门狗只能软件操控;
3)独立看门狗只要下限,窗口看门狗又下限和上限;
4)独立看门狗是12位递减的。窗口看门狗是7位递减的;
5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的体系时钟APB1ENR。
独立看门狗没有中止功用,只要在计数器减到0(下限)之前,从头装载计数器的值,就不会发生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”装备,一旦敞开了硬件看门狗,那么就停不下来了,只能在从头装备“设定选项几节等”才干关掉硬件看门狗,软件看门狗只需要设置IWDG-》KR=0XCCCC;就能够发动看门狗了,软件狗能够在体系复位时关掉,假如在在初始化里敞开软件看门狗,那就敞开了软件看门狗,独立看门狗是12位递减的寄存器,运用片子内部的RC振荡器,这个振荡器是关不掉的。
窗口看门狗有中止,这个中止的作用是在计数器到达下限0x40的时分,发生中止,让你喂狗,假如你不喂狗,计数器的值变为0x3f的时分,将会发生体系复位,即使是喂狗,也应该在中止里快速喂狗,要不时刻长了计数器减一也会变成0x3f发生复位,这个时刻依据芯片手册的公式进行核算即可得到,窗口看门狗只要软件敞开方法,还有一个上限值,这个值假如大于计数器的初始值,那么就没有任何作用了,这个值小于计数器的初始值得时分,当计数器的值大于上限值时你对计数器进行装载,将会发生复位,只要在计数器减到小于上限值时,你才干从头装载计数器,意思便是说只要计数器的值在上限值和下限值之间你才干装载计数器,不然就会发生体系复位,当上限值小于下限值,也没有含义。
独立看门狗IWDG——我的了解是独立于体系之外,由于有独立时钟,所以不受体系影响的体系毛病探测器。首要用于监督硬件过错。
窗口看门狗WWDG——我的了解是体系内部的毛病探测器,时钟与体系相同。假如体系时钟不走了,这个狗也就失掉作用了。首要用于监督软件过错。
以下是通过测验发现的:
//发现1:当窗口值大于等于计数器的值,不管怎样更改装备的次序,都是正确的运转成果
//发现2:当窗口值小于计数器的值,次序一旦改动就运转过错
通过测验发现,当初始化的次序不是正常次序的话,就会把WWDG-》SR置一,为什么我也不知道,谁知道片子里边怎样搞的
你在敞开中止就进入中止的,这时你又进行喂狗,就会复位的,由于这时计数器的值》上限窗口的值,所以会复位,所以就会一向犯错下去
解决办法是,初始话的时分最终两句是先铲除中止标志然后在敞开中止,假如你不这么干,那么在初始化的时分很或许把WWDG-》SR
置位,那么你在敞开中止,就会坚决果断的进入中止,你在中止重装计数器值得时分,就会发生复位