×
单片机 > 单片机程序设计 > 详情

【实验五】窗口看门狗实验

发布时间:2020-08-27 发布时间:
|

一、实验目的

1)了解STM32窗口看门狗;

2)了解STM32窗口看门狗与独立看门狗的异同;

3)会使用窗口看门狗;

4)利用STM32窗口看门狗的中断功能来喂狗。


二、STM32 窗口看门狗简介

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看

门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU

复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。


简而言之,窗口看门狗有两个门限就上窗口和下窗口;下窗口值是固定的0x40;而上窗口由我们自己设置;当看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都

会产生复位。


涉及的寄存器有:控制寄存器(WWDG_CR)、配置寄存器(WWDG_CFR)、状态寄存器(WWDG_SR)。

配置步骤:

1) 使能 WWDG 时钟
2) 设置窗口值和分频数
3) 开启 WWDG 中断并分组
4) 设置计数器初始值并使能看门狗
5) 编写中断服务函数


独立看门狗与窗口看门狗的异同:相同的地方就是二者在一定情况下都会产生MCU复位;而IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立

工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。


三、硬件设计

LED灯、窗口看门狗。


四、软件设计


  1. void WWDG_Init(u8 tr,u8 wr,u32 fprer)  

  2. {   

  3.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);  //   WWDG时钟使能  

  4.   

  5.     WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     

  6.     WWDG_SetPrescaler(fprer);////设置IWDG预分频值  

  7.   

  8.     WWDG_SetWindowValue(wr);//设置窗口值  

  9.   

  10.     WWDG_Enable(WWDG_CNT);   //使能看门狗 ,  设置 counter .                    

  11.   

  12.     WWDG_ClearFlag();//清除提前唤醒中断标志位   

  13.   

  14.     WWDG_NVIC_Init();//初始化窗口看门狗 NVIC  

  15.   

  16.     WWDG_EnableIT(); //开启窗口看门狗中断  

  17. }   

  18. //重设置WWDG计数器的值  

  19. void WWDG_Set_Counter(u8 cnt)  

  20. {  

  21.     WWDG_Enable(cnt);//使能看门狗 ,  设置 counter .       

  22. }  

  23. //窗口看门狗中断服务程序  

  24. void WWDG_NVIC_Init()  

  25. {  

  26.     NVIC_InitTypeDef NVIC_InitStructure;  

  27.     NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断  

  28.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2    

  29.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;   //抢占2,子优先级3,组2   

  30.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;   

  31.     NVIC_Init(&NVIC_InitStructure);//NVIC初始化  

  32. }  

  33.   

  34. void WWDG_IRQHandler(void)  

  35.     {  

  36.   

  37.     WWDG_SetCounter(WWDG_CNT);    //当禁掉此句后,窗口看门狗将产生复位  

  38.   

  39.     WWDG_ClearFlag();     //清除提前唤醒中断标志位  

  40.   

  41.     LED1=!LED1;      //LED状态翻转  

  42.     }  



五、实验结果


成功!


关键字:窗口看门狗  STM32 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址