|
窗口看門(mén)狗(WWDG)通常被用來(lái)監(jiān)測(cè)由外部干擾或不可預(yù)見(jiàn)的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。
窗口看門(mén)狗的超時(shí)公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
Twwdg:WWDG 超時(shí)時(shí)間(單位為 ms)
Fpclk1:APB1 的時(shí)鐘頻率(單位為 Khz)
WDGTB:WWDG 的預(yù)分頻系數(shù)
T[5:0]:窗口看門(mén)狗的計(jì)數(shù)器低 6 位
DS0(連接在PF9) ,DS1(連接在PF10。程序一運(yùn)行則開(kāi)啟WWDG,并使得DS0亮300ms后關(guān)閉,進(jìn)入死循環(huán)。等待WWDG中斷的到來(lái),在中斷里面,喂狗,并執(zhí)行DS1的翻轉(zhuǎn)操作。所以可以看到DS1不停的閃爍,而DS0只在剛啟動(dòng)的時(shí)候閃一下。
窗口看門(mén)狗.c文件如下。- u8 WWDG_CNT=0X7F;
- //初始化窗口看門(mén)狗
- //tr :T[6:0],計(jì)數(shù)器值 wr :W[6:0],窗口值
- //fprer:分頻系數(shù)(WDGTB),僅最低 2 位有效
- //Fwwdg=PCLK1/(4096*2^fprer). 一般 PCLK1=42Mhz
- void WWDG_Init(u8 tr,u8 wr,u32 fprer)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
- //使能窗口看門(mén)狗時(shí)鐘
- WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.
- WWDG_SetPrescaler(fprer); //設(shè)置分頻值
- WWDG_SetWindowValue(wr); //設(shè)置窗口值
- WWDG_SetCounter(WWDG_CNT);//設(shè)置計(jì)數(shù)值
- WWDG_Enable(WWDG_CNT); //開(kāi)啟看門(mén)狗
- NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看門(mén)狗中斷
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //搶占優(yōu)先級(jí)為 2
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //響應(yīng)優(yōu)先級(jí)為 3
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看門(mén)狗
- NVIC_Init(&NVIC_InitStructure);
- WWDG_ClearFlag();//清除提前喚醒中斷標(biāo)志位
- WWDG_EnableIT();//開(kāi)啟提前喚醒中斷
- }
- //窗口看門(mén)狗中斷服務(wù)程序
- void WWDG_IRQHandler(void)
- {
- WWDG_SetCounter (WWDG_CNT); //重設(shè)窗口看門(mén)狗值
- WWDG_ClearFlag();//清除提前喚醒中斷標(biāo)志位
- LED1=!LED1;
- }
復(fù)制代碼
全部程序51hei下載地址:
STM32F4窗口看門(mén)狗.7z
(294.42 KB, 下載次數(shù): 15)
2021-1-15 14:50 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|