窗口看門狗(WWDG)通常被用來監測由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運行序列而產生的軟件故障。
窗口看門狗的超時公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
Twwdg:WWDG 超時時間(單位為 ms)
Fpclk1:APB1 的時鐘頻率(單位為 Khz)
WDGTB:WWDG 的預分頻系數
T[5:0]:窗口看門狗的計數器低 6 位
DS0(連接在PF9) ,DS1(連接在PF10。程序一運行則開啟WWDG,并使得DS0亮300ms后關閉,進入死循環。等待WWDG中斷的到來,在中斷里面,喂狗,并執行DS1的翻轉操作。所以可以看到DS1不停的閃爍,而DS0只在剛啟動的時候閃一下。
窗口看門狗.c文件如下。- u8 WWDG_CNT=0X7F;
- //初始化窗口看門狗
- //tr :T[6:0],計數器值 wr :W[6:0],窗口值
- //fprer:分頻系數(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);
- //使能窗口看門狗時鐘
- WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.
- WWDG_SetPrescaler(fprer); //設置分頻值
- WWDG_SetWindowValue(wr); //設置窗口值
- WWDG_SetCounter(WWDG_CNT);//設置計數值
- WWDG_Enable(WWDG_CNT); //開啟看門狗
- NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看門狗中斷
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //搶占優先級為 2
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //響應優先級為 3
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看門狗
- NVIC_Init(&NVIC_InitStructure);
- WWDG_ClearFlag();//清除提前喚醒中斷標志位
- WWDG_EnableIT();//開啟提前喚醒中斷
- }
- //窗口看門狗中斷服務程序
- void WWDG_IRQHandler(void)
- {
- WWDG_SetCounter (WWDG_CNT); //重設窗口看門狗值
- WWDG_ClearFlag();//清除提前喚醒中斷標志位
- LED1=!LED1;
- }
復制代碼
全部程序51hei下載地址:
STM32F4窗口看門狗.7z
(294.42 KB, 下載次數: 15)
2021-1-15 14:50 上傳
點擊文件名下載附件
|