stm32窗口看门狗怎么关闭,stm32独立看门狗无效
stm32独立看门狗和窗口看门狗的区别是什么
stm32独立看门狗和窗口看门狗的区别为:时钟源不同、中断不同、使用条件不同。
一、时钟源不同
1、stm32独立看门狗:stm32独立看门狗使用的是内部专门的 40Khz低速时钟,不需要使能时钟操作。
2、窗口看门狗:窗口看门狗使用的是 PCLK1的时钟,使用前需要先使能时钟。
二、中断不同
1、stm32独立看门狗:stm32独立看门狗没有中断,超时直接复位。
2、窗口看门狗:窗口看门狗可以在中断中做复位前的函数操作。
三、使用条件不同
1、stm32独立看门狗:stm32独立看门狗一般用于避免程序跑飞或者死循环。
2、窗口看门狗:窗口看门狗避免程序不安预定逻辑执行,比如先于理想环境完成,或者后于极限时间超时。
STM32窗口看门狗WWDG,有关硬件复位清零的问题,教材一句话看不明白,如下:
也就是说,一旦开启了,没有办法再禁止了。除非重新掉电重启。这个为了防止你程序误操作的。一旦启动,只能喂狗。
独立看门狗和窗口看门狗都是不能关闭的吗
1)独立看门狗没有中断,窗口看门狗有中断
2)独立看门狗有硬件之分,窗口看门狗只能控制
3)独立看门狗只有下限,窗口看门狗又下限和上限
4)独立看门狗是12位递减的。窗口看门狗是7位递减的
5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR
独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位。
窗口看门狗有中断,这个中断的作用是在计数器达到下限0x40的时候,产生中断,让你喂狗,如果你不喂狗,计数器的值变为0x3f的时候,将会产生系统复位,即使是喂狗,也应该在中断里快速喂狗,要不时间长了计数器减一也会变成0x3f产生复位。还有一个上限值,这个值如果大于计数器的初始值,那么就没有任何作用了,这个值小于计数器的初始值得时候,当计数器的值大于上限值时你对计数器进行装载,将会产生复位,只有在计数器减到小于上限值时,你才能重新装载计数器,意思就是说只有计数器的值在上限值和下限值之间你才能装载计数器,否则就会产生系统复位,当上限值小于下限值,也没有意义。
STM32窗口看门狗WWDG,有关硬件复位清零的问题
就是说软件只能使能,你这次的程序是有开启的,下次下的程序是没有开启的,要硬件复位一次才重新执行你这次的程序,就是这么简单,呵呵。
06 STM32F4的窗口看门狗(WWDG)
??(1)与独立看门狗的区别?
??窗口看门狗(WWDG )其喂狗时间是一个有上下限的范围(窗口),计数器的下限是固定的(0x40),可以通过设定相关寄存器,设定其上限时间(上限计数值)。喂狗的时间不能过早,也不能过晚。你喂得过早或者过晚,都会复位的。
??(2)有了独立看门狗来检测程序运行是否正常,为何还需要窗口看门狗?
??对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是,这有一个隐患:有可能程序跑乱了,但又跑回到正常的地方,或者,跑乱了的程序正好执行了刷新看门狗的操作。这样的情况下,一般的看门狗就检测不出来了。
??如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样,可以检测出程序没有按照正常的路径运行而非正常地跳过了某些程序段的情况。
??(1)控制寄存器 WWDG_CR
??32位寄存器,低8位有效。这8位中,低7位T[6:0]用来存储看门狗的计数器值,随时更新。当该计数器的值从0x40变为0x3F的时候,将产生复位;除了这低7位,还有第8位(位7,叫做WDGA位),是看门狗的激活位。该位由软件置1,用来启动看门狗,并且,一旦启动以后,该位会一直保持为1,在硬件复位以后才能清零。
??(2)配置寄存器 WWDG_CFR
??32位寄存器,我们用到10位。
??1低7位W[6:0],是7位窗口值。这7位就是窗口看门狗的上窗口。
??2位9(第10位),叫做EWI,是提前唤醒中断位。如果我们把这位设置为1,那么,只要递减计数器的计数值下降到0x40,就会产生一个中断。之所以叫做唤醒中断位,就是因为,当计数器的值减到0x40,如果不产生中断,下一个值就是0x3F,此时就会复位;而这里产生一个中断,那么我们就可以在中断服务函数里面及时地喂狗,来唤醒它,避免复位。
??注意:这里在进入中断后,必须在不大于一个窗口看门狗计数周期的时间内重新写WWDG_CR寄存器去喂狗,否则,将会复位。
??3位8和位7(叫做WDGTB[1:0]),叫做定时器时基(Time base),这两位用来修改计数时钟的分频系数。
??(3)状态寄存器 WWDG_SR
??该寄存器用来记录当前是否有提前唤醒的标志。该寄存器只有最低位(位0)一位有效。当计数值达到0x40时,该位由硬件置1.它必须通过软件写0来清除,软件对它写1是无效的。注意:它与是否使能中断没有关系,即使中断没有被使能,在计数器的值达到0x40的时候,该位也会被硬件置1。
??(1)使能WWDG时钟
??WWDG与IWDG不同,独立看门狗有自己独立的32kHz时钟,用的是LSI,而窗口看门狗用的是PCLK1的时钟,挂载在总线APB1上,所以,使用之前,需要先使能。
??(2)设置分频系数与上窗口值
??设置看门狗的分频系数(CFR寄存器,位WDGTB[1:0])的函数是:
??设置看门狗的上窗口值(CFR寄存器,位W[6:0])的函数是:
??(3)开启提前唤醒中断,并分组
??开启WWDG中断的函数为:
开启WWDG中断后,进行中断优先级配置,调用函数NVIC_Init()即可。
??(4)使能看门狗
??(5)编写中断服务函数
??编写中断服务函数WWDG_IRQHandler(),在里面调用函数WWDG_SetCounter(),去喂狗。但要注意,喂狗要迅速,否则当WWDG计数到0x3F的时候,就会引起复位了。还有一个值得注意的地方就是,在中断服务函数里面,要将状态寄存器的EWIF位清空。