新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32之窗口看門狗(WWDG)

STM32之窗口看門狗(WWDG)

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
前幾天學(xué)習(xí)STM32的兩條狗,先學(xué)習(xí)了寵物狗(IWDG),和其它MCU差不多,不多說了。學(xué)到警犬(WWDG)的時候,問題來了,沒有IWDG那么好理解了,看了半天沒有搞懂是怎么回事,計數(shù)器值、窗口值、在什么時候喂狗、什么時候產(chǎn)生中斷等等,一頭霧水。


經(jīng)過兩天的推敲,個人理解如下:

本文引用地址:http://butianyuan.cn/article/201611/321561.htm

1、有個7位遞減計數(shù)器(WWDG->CR),就這個計數(shù)器和窗口計數(shù)器(WWDG->CFR)決定什么時候喂狗。

狗喂早了,復(fù)位——“早”體現(xiàn)在計數(shù)器值(tr)>窗口值(wr),也就是計數(shù)器值還沒有減到窗口值以下;

2、當(dāng) 0x40 < 計數(shù)器值(tr) < 窗口值(wr) 時,這時候最適合喂狗了,也只有在這時候喂狗才合適;

3、當(dāng)計數(shù)器的值從0x40變到0x3F的時候,將產(chǎn)生看門狗復(fù)位;當(dāng)然在要產(chǎn)生復(fù)位的前一段時間,如果開啟了提前喚醒中斷,那么就會進(jìn)入中斷,在中斷函數(shù)里,我們需要及時喂狗,否則會產(chǎn)生復(fù)位;

4、據(jù)網(wǎng)上資料介紹,在這個中斷里面一般不進(jìn)行喂狗,一般是系統(tǒng)去世前的“遺囑”,比如存儲重要的數(shù)據(jù)等。這個就需要根據(jù)個人需要設(shè)計。

下面擇取部分程序,可以根據(jù)程序說明,計算出喂狗的時間,大家注意推敲,歡迎交流!


u8 WWDG_CNT = 0x7F;


void WWDG_Init(u8 tr, u8 wr, u32 fprer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG時鐘使能

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




WWDG_SetPrescaler(fprer); // 設(shè)置IWDG預(yù)分頻值



WWDG_SetWindowValue(wr); // 設(shè)置窗口值


WWDG_Enable(WWDG_CNT); // 使能看門狗, 設(shè)置 counter

WWDG_ClearFlag(); // 清除提前喚醒中斷標(biāo)志位

WWDG_NVIC_Init(); // 初始化窗口看門狗 NVIC


WWDG_EnableIT(); // 開啟窗口看門狗中斷
}



void WWDG_IRQHandler(void)
{
WWDG_ClearFlag(); // 清除提前喚醒中斷標(biāo)志位

LED1 = !LED1; // LED1 狀態(tài)翻轉(zhuǎn)
printf("進(jìn)入中斷!rn");
}

int main(void)
{
u8 tr, wr;

delay_init();
NVIC_Configuration(); // 設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級, 2位響應(yīng)優(yōu)先級
LED_Init();
KEY_Init();
uart_init(9600);

LED0 = 0;
delay_ms(300);

WWDG_Init(0x7F, 0x5F, WWDG_Prescaler_8); // 計數(shù)器值為7f, 窗口寄存器值為5f, 分頻數(shù)為8

while(1)
{
LED0 = 1;

wr=WWDG->CFR&0X7F; // 窗口值
tr=WWDG->CR&0X7F; // 計數(shù)器值



if(tr // 計數(shù)器值tr必須小于窗口值wr時才能喂狗,在之前喂狗則太早,會產(chǎn)生看門狗復(fù)位
{
WWDG_SetCounter(WWDG_CNT);
printf("正在喂狗!rn");
}


}

}

實(shí)踐出真知!
試驗(yàn)現(xiàn)象:DS0(紅燈)先亮,再滅,DS1無變化。
試驗(yàn)現(xiàn)象說明:在規(guī)定的時間段及時的喂狗了,程序沒有進(jìn)入中斷函數(shù)。



關(guān)鍵詞: STM32窗口看門狗WWD

評論


技術(shù)專區(qū)

關(guān)閉