STM學習筆記--窗口看門狗WWDG
時鐘來源:APB1àPCLK1最大72MHz
本文引用地址:http://2s4d.com/article/201609/296865.htm1:窗口看門狗的特性:
(1)可編程的自由運行遞減計數器
(2)復位條件:a:當遞減計數器,計數值小于0X40時,產生復位。
b:當遞減計數器在窗口外(計數器>WWDG_CFR)被重裝載,則產生復位
(3)啟動看門狗,且允許中斷,遞減計數器等于0X40,產生早期喚醒中斷(EWI),在中斷中重轉載計數器,避免WWDG復位。
工作原理:
由框圖可以看出:
APB1的時鐘經過(預分頻器)WDGTB,CNT為7位【T6àT0】遞減計數器計數,看門狗控制寄存器(WWDG_CR)裝載入CNT。
當計數器T6位由1à0時,立即產生復位信號。注意WWDG_CR的值范圍為0XFF-0XC0之間。
看門狗配置寄存器WWDG_CFR設置窗口的高度,當T6:0>W6:0時,寫入WWDG_CR則立即產生復位信號;當T6:0
寄存器:
WWDG_CR
WWDG_SR:包含提前喚醒中斷,即減到0X40時
WWDG_CFR:窗口配置寄存器,EWI只能由硬件復位后清除,當到0X40時,立即產生中斷。
//來自正點原子@ALIENTEK程序
//保存WWDG計數器的設置值,默認為最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看門狗
//tr :T[6:0],用于存儲計數器的值
//wr :W[6:0],用于存儲窗口值
//fprer:窗口看門狗的實際設置
//低2位有效.Fwwdg=PCLK1/4096/2^fprer.
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{
RCC->APB1ENR|=1<<11; //使能wwdg時鐘
WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT.
WWDG->CFR|=fprer<<7; //PCLK1/4096再除2^fprer
WWDG->CFR|=1<<9; //使能提前喚醒中斷
WWDG->CFR&=0XFF80;
WWDG->CFR|=wr; //設定窗口值
WWDG->CR|=WWDG_CNT|(1<<7); //開啟看門狗,設置7位計數器
MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//搶占2,子優(yōu)先級3,組2
}
//重設置WWDG計數器的值
void WWDG_Set_Counter(u8 cnt)
{
WWDG->CR|=(cnt&0x7F);//重設置7位計數器
}
//窗口看門狗中斷服務程序
void WWDG_IRQHandler(void)
{
u8 wr,tr;
wr=WWDG->CFR&0X7F;
tr=WWDG->CR&0X7F;
if(tr
WWDG->SR=0X00;//清除提前喚醒中斷標志位
LED1=!LED1;
}
評論