欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > WWDG实验

WWDG实验

2025/9/22 19:28:25 来源:https://blog.csdn.net/m0_55996456/article/details/144154869  浏览:    关键词:WWDG实验

原理

窗口看门狗( WWDG )通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序
背离正常的运行序列而产生的软件故障。
T[6:0] 就是 WWDG_CR 的低七位, W[6:0] 即是 WWDG->CFR 的低七位。 T[6:0]就是窗口看门狗的计数器,而 W[6:0] 则是窗口看门狗的上窗口,下窗口值是固定的( 0X40 )。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。
上窗口值( W[6:0] )是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保
窗口值大于 0X40 ,否则窗口就不存在了。
窗口看门狗的超时公式如下:
                                        Twwdg=(4096×2^WDGTB×(T[5:0]+1))/Fpclk1
Twwdg WWDG 超时时间(单位为 ms
Fpclk1 APB1 的时钟频率(单位为 Khz
WDGTB WWDG 的预分频系数
T[5:0] :窗口看门狗的计数器低 6
根据上面的公式,假设 Fpclk1=36Mhz ,那么可以得到最小 - 最大超时时间表如下 所示:
控制寄存器( WWDG_CR ):
可以看出,这里我们的 WWDG_CR 只有低八位有效, T[6 0] 用来存储看门狗的计数器值,
随时更新的,每个窗口看门狗计数周期(4096×2^ WDGTB )减 1 。当该计数器的值从 0X40
0X3F 的时候,将产生看门狗复位。
WDGA 位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该
位一旦设置,就只能在硬件复位后才能清零了。
是配置寄存器(WWDG_CFR)
        该位中的 EWI 是提前唤醒中断,也就是在快要产生复位的前一段时间( T[6:0]=0X40 )来
提醒我们,需要进行喂狗了,否则将复位!因此,我们一般用该位来设置中断,当窗口看门狗
的计数器值减到 0X40 的时候,如果该位设置,并开启了中断,则会产生中断,我们可以在中
断里面向 WWDG_CR 重新写入计数器的值,来达到喂狗的目的。注意这里在进入中断后,必
须在不大于 1 个窗口看门狗计数周期的时间(在 PCLK1 频率为 36M WDGTB 0 的条件下,
该时间为 113us )内重新写 WWDG_CR ,否则,看门狗将产生复位!
状态寄存器( WWDG_SR)该寄存器用来记录当前是否有提前唤醒的标志。
窗口看门狗配置步骤:
1. 使能 WWDG 时钟
(WWDG 不同于 IWDG,IWDG 有自己独立的 40Khz 时钟,不存在使能问题。而 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
2. 设置窗口值和分频数
void WWDG_SetWindowValue(uint8_t WindowValue);//设置窗口值
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); //设置分频数
3. 开启 WWDG 中断并分组
WWDG_EnableIT(); // 开启窗口看门狗中断
进行中断优先级配置,这里就不重复了,使用 NVIC_Init() 函数
4. 设置计数器初始值并使能看门狗
void WWDG_Enable(uint8_t Counter)
5. 编写中断服务函数
        在最后,还是要编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当
窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态
寄存器的 EWIF 位清空。

实验

实验现象: 我们将通过 DS0 来指示 STM32 是否被复位了,如果被复位了就会点亮 300msDS1 用来指示中断喂狗,每次中断喂狗翻转一次。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词