頭文件及完整例程下載:http://www.zg4o1577.cn/f/stm32標準例程庫函數.rar
程序分析:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "wdg.h"
//STM32開發板實驗7
//窗口看門狗實驗
int main(void)
{
delay_init(); //延時函數初始化
NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
// uart_init(9600); //串口初始化為9600
LED_Init();
// KEY_Init(); //按鍵初始化
LED0=0;
delay_ms(300);
WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//計數器值為7f,窗口寄存器為5f,分頻數為8
while(1)
{
LED0=1;
}
}
窗口看門狗的初始化
看門狗的中斷函數
看門狗的喂狗函數
窗口看門狗的初始化
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);////設置IWDG預分頻值
WWDG_SetWindowValue(wr);//設置窗口值
WWDG_Enable(WWDG_CNT); //使能看門狗 , 設置 counter .
WWDG_ClearFlag();//清除提前喚醒中斷標志位
WWDG_NVIC_Init();//初始化窗口看門狗 NVIC
WWDG_EnableIT(); //開啟窗口看門狗中斷
} 看門狗的中斷函數
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT); //當禁掉此句后,窗口看門狗將產生復位
WWDG_ClearFlag(); //清除提前喚醒中斷標志位
LED1=!LED1; //LED狀態翻轉
} 看門狗的喂狗函數
WWDG_SetCounter(WWDG_CNT); //當禁掉此句后,窗口看門狗將產生復位