久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

STM32窗口看門狗程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年10月22日   【字體:

窗口看門狗(WWDG)通常被用來監(jiān)測由外部干擾或不可預見的邏輯條件造成的應(yīng)用程序背離正常的運行序列而產(chǎn)生的軟件故障。除非遞減計數(shù)器的值在T6位(WWDG->CR的第六位)變成0前被刷新,看門狗電路在達到預置的時間周期時,會產(chǎn)生一個MCU復位。在遞減計數(shù)器達到窗口配置寄存器(WWDG->CFR)數(shù)值之前,如果7位的遞減計數(shù)器數(shù)值(在控制寄存器中)被刷新, 那么也將產(chǎn)生一個MCU復位。這表明遞減計數(shù)器需要在一個有限的時間窗口中被刷新。


 

圖 3.6.1.1中,T[6:0]就是WWDG_CR的低七位,W[6:0]即是WWDG->CFR的低七位。T[6:0]就是窗口看門狗的計數(shù)器,而W[6:0]則是窗口看門狗的上窗口,下窗口值是固定的(0X40)。當窗口看門狗的計數(shù)器在上窗口值之外被刷新,或者低于下窗口值都會產(chǎn)生復位。
上窗口值(W[6:0])是由用戶自己設(shè)定的,根據(jù)實際要求來設(shè)計窗口值,但是一定要確保窗口值大于0X40,否則窗口就不存在了。
窗口看門狗的超時公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
Twwdg:WWDG超時時間(單位為ms)
Fpclk1:APB1的時鐘頻率(單位為Khz)
WDGTB:WWDG的預分頻系數(shù)
T[5:0]:窗口看門狗的計數(shù)器低6位

窗口看門狗寄存器介紹:






如何使用窗口看門狗:
1)使能WWDG時鐘
2)設(shè)置WWDG_CFR和WWDG_CR兩個寄存器
在時鐘使能完后,我們設(shè)置WWDG的CFR和CR兩個寄存器,對WWDG進行配置。包括使能窗口看門狗、開啟中斷、設(shè)置計數(shù)器的初始值、設(shè)置窗口值并設(shè)置分頻數(shù)WDGTB
3)開啟WWDG中斷并分組
4) 編寫中斷服務(wù)函數(shù)


軟件例程:

//---------------------------wdg.c-----------------------

#include "wdg.h"
#include "led.h"

 
u8 wwdg_cnt=0x7f;   //窗口看門狗計數(shù)器初值

 
void wwdg_init(u8 tr,u8 wr,u8 fprer)
{
  RCC->APB1ENR|=1<<11;    //使能WWDG時鐘
  wwdg_cnt=tr&wwdg_cnt;  // 初始化計數(shù)器值
  WWDG->CFR|=fprer<<7;     //設(shè)置頻率時基
  WWDG->CFR|=1<<9;        //使能串口看門狗中斷
  WWDG->CFR&=0xff80;      //窗口值清零
  WWDG->CFR|=wr;          //設(shè)定窗口值
  WWDG->CR|=(wwdg_cnt|1<<7);    // 啟動看門狗設(shè)置7位計數(shù)器初值
  MY_NVIC_Init(2,3,WWDG_IRQChannel,2);

 
}

 
void wwdg_feed(u8 cnt)
{
 WWDG->CR|=(cnt&0x7f);  //喂狗值

 
}

 

 
void WWDG_IRQHandler(void)
{
   u8 tr,wr;
   wr=WWDG->CFR&0x7f;
   tr=WWDG->CR&0x7f; 
   if(tr<wr)wwdg_feed(wwdg_cnt); //只有TR小于WR才能喂狗  在窗口內(nèi)
   WWDG->SR&=0x00;                       //清楚提前喚醒標志位
   LED1=!LED1;
}


//------------------------wdg.h---------------------
#ifndef _wdg_h
#define _wdg_h

 
#include "sys.h"

 
void wwdg_init(u8 tr,u8 wr,u8 fprer);
void wwdg_feed(u8 cnt);

 
#endif
//------------------led.c----------------------
#include "led.h"

 
void led_init(void)
{
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<5;
GPIOA->CRH&=0xfffffff0;
GPIOA->CRH|=0x00000003;
GPIOD->CRL&=0xfffff0ff;
GPIOD->CRL|=0x00000300;
GPIOA->ODR|=1<<8;
GPIOD->ODR|=1<<2;

 
}
 
//---------------------led.h------------------
#ifndef _led_h
#define _led_h

 
#include "sys.h"

 
#define LED0 PAout(8)
#define LED1 PDout(2)

 
void led_init(void);

 
#endif

 
///-----------------------主函數(shù)------------test.c---------------
#include <stm32f10x_lib.h>

 
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "wdg.h"

 
int main(void)
{
   Stm32_Clock_Init(9);
   delay_init(72);
   uart_init(72,9600);
   led_init();
   wwdg_init(0x7f,0x5f,3);
   LED0=0;
   delay_ms(1800);
   while(1)
   {
LED0=1;

 
   }

 
}
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日韩在线看片 | 亚洲综合在线网 | 毛片a级毛片免费播放100 | 天堂亚洲 | 国产成人一区二区三区 | 久久久久久久久久久久久久av | 欧美日韩国产一区二区三区 | 久久久夜色精品亚洲 | 国产99久久精品一区二区永久免费 | 日韩欧美综合 | 日韩在线视频一区二区三区 | 亚洲五码久久 | 日本精a在线观看 | 日韩中文在线观看 | 97色在线视频 | 免费视频一区二区 | 欧美国产精品 | 青青草在线播放 | 亚洲视频www| www..com18午夜观看 | 亚洲啪啪 | 久久精品中文字幕 | 欧美成人自拍 | 国产视频日韩 | 国产精品久久久久久福利一牛影视 | 欧美亚洲在线 | 在线免费亚洲视频 | 在线免费观看黄a | 蜜桃视频在线观看www社区 | 精品日韩欧美一区二区 | 夜夜草| 亚洲成人中文字幕 | 亚洲三区在线观看 | 91在线网站 | 成人网址在线观看 | 国产日韩久久久久69影院 | 中文字幕一区二区三区在线视频 | 国产精品久久精品 | 成人在线网| 国产精品亚洲片在线播放 | 国产成人a亚洲精品 |