完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,基础知识
1,简介 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。 2,看门狗时序图(参考STM32数据参考手册) 二,设计过程 1,开启窗口看门狗的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); 因为窗口看门狗是挂载到APB1时钟线上的,所以这里使能APB1 2,设置窗口看门狗的窗口值和预分频系数(在库函数WWDG中调用) WWDG_SetWindowValue(wr);//窗口值 WWDG_SetPrescaler(pres);//预分频系数 3,使能初始值,设置看门狗计数器的值(要》=0x40,不然会直接复位) WWDG_Enable(jishuqi); 4,清除标志位 WWDG_ClearFlag(); 5,开启看门狗的中断(开启中断是为了“喂狗”,即在中断的时间内完成计数器的初始化,不然WWDG递减到窗口的下限,则会产生复位) WWDG_EnableIT(); 6,配置中断的分组(因为开启了中断) NVIC_Init(); 7,编写中断服务函数(在终端服务函数中“喂狗”) WWDG_IRQHandler(); 三,WWDG的配置文件 1,WWDG.H文件 在这里插入#ifndef __WWDG_h #define __WWDG_h #include 《sys.h》 /** WWDG_Init(u8 wr,u16 pres);//窗口看门狗初始化函数 u8 wr:窗口看门狗窗口上限值,下限值为固定的(0x40) u8 pres:预分频系数 */ void WWDG_Init(u8 wr,u16 pres); #endif 2,WWDG.c文件 #include 《stm32f10x.h》 #include 《wwdg.h》 #include 《led.h》 u8 jishuqi=0x7f; void WWDG_Init(u8 wr,u16 pres){ NVIC_InitTypeDef NVIC_InitStruct; //1,开启窗口看门狗的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //2,设置看门狗的窗口值,预分频系数 WWDG_SetWindowValue(wr);//窗口值 WWDG_SetPrescaler(pres);//预分频系数 //使能看门狗,设置计数器的值 WWDG_Enable(jishuqi); //清除标志位 WWDG_ClearFlag(); //设置中断分组 NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStruct.NVIC_IRQChannelSubPriority=3; NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStruct); //开启看门狗中断 WWDG_EnableIT(); } //中断服务函数 void WWDG_IRQHandler(){ /** 注意;这里删除 WWDG_Enable(jishuqi);函数或者将计数器设置为0x3f, 程序会在计数器完成倒计数后一直复位 */ WWDG_Enable(jishuqi); WWDG_ClearFlag(); LED0=!LED0; } 在这里插入代码片 3,main.c函数调用 在这里插入代#include 《stm32f10x.h》 #include “delay.h” #include 《led.h》 #include 《wwdg.h》 int main(){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); LED_Init(); delay_init(); LED1=0; delay_ms(300); WWDG_Init(0x5f,WWDG_Prescaler_8); while(1){ LED1=1; } } 4,完成后编译,上机调试。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:38 , Processed in 0.807951 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号