完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、窗口看门狗由从APB1时钟分频后得到时钟驱动。
通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。 二、什么是窗口看门狗? 窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚 三、窗口看门狗的好处 对于一般的看门狗,因为是在复位前的任意时刻刷新看门狗,但有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下就检测不出来了; 如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。 四、窗口看门狗工作示意图及框图 上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了 工作示意图 五、产生复位的几种条件 STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位: ①当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。 ②当计数器的数值从0x40减到0x3F时【T6位跳变到0】。 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位。 六、窗口看门狗配置过程 //①使能看门狗时钟: RCC_APB1PeriphClockCmd(); //② 设置分频系数: WWDG_SetPrescaler(); //③设置上窗口值: WWDG_SetWindowValue(); //④开启提前唤醒中断并分组(可选):WWDG_EnableIT(); NVIC_Init(); //⑤使能看门狗:WWDG_Enable(); //⑥喂狗:WWDG_SetCounter(); //⑦编写中断服务函数WWDG_IRQHandler(); 代码如下: void init_wwdg(void) { NVIC_InitTypeDef NVIC_InitStructure; //使能wwdg时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG_CNT=0x7F&WWDG_CNT; //初始化WWDG_CNT. //设置看门狗时钟 1281Hz = (PCLK1 (42MHz)/4096)/8 = 1281 Hz (~780 us) //指定WWDG预分频器 WWDG_SetPrescaler(WWDG_Prescaler_8); //Prescaler:计数器时钟 //设置窗口值为80; WWDG计数器只有在计数器时才能刷新低于80(大于64),否则会产生复位 WWDG_SetWindowValue(0x60); //设置重载计数值,也就是喂狗 WWDG_Enable(0x7f); // 初始化中断 NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; // EXTI0的中断向量号 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断 NVIC_Init(&NVIC_InitStructure); // 清空提前唤醒中断的标志位 WWDG_ClearFlag(); // 使能提前唤醒中断 WWDG_EnableIT(); } //当递减计数器递减到0x40时,触发中断函数,进行喂狗 void WWDG_IRQHandler(void) { if(WWDG_GetFlagStatus() == SET) { // 喂狗 WWDG_SetCounter(127); //WWDG_SetCounter(WWDG_CNT); //清空提前唤醒中断的标志位 WWDG_ClearFlag(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
522浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:05 , Processed in 0.881315 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号