STM學(xué)習筆記--窗口看門(mén)狗WWDG
時(shí)鐘來(lái)源:APB1àPCLK1最大72MHz
本文引用地址:http://dyxdggzs.com/article/201609/296865.htm1:窗口看門(mén)狗的特性:
(1)可編程的自由運行遞減計數器
(2)復位條件:a:當遞減計數器,計數值小于0X40時(shí),產(chǎn)生復位。
b:當遞減計數器在窗口外(計數器>WWDG_CFR)被重裝載,則產(chǎn)生復位
(3)啟動(dòng)看門(mén)狗,且允許中斷,遞減計數器等于0X40,產(chǎn)生早期喚醒中斷(EWI),在中斷中重轉載計數器,避免WWDG復位。
工作原理:

由框圖可以看出:
APB1的時(shí)鐘經(jīng)過(guò)(預分頻器)WDGTB,CNT為7位【T6àT0】遞減計數器計數,看門(mén)狗控制寄存器(WWDG_CR)裝載入CNT。
當計數器T6位由1à0時(shí),立即產(chǎn)生復位信號。注意WWDG_CR的值范圍為0XFF-0XC0之間。
看門(mén)狗配置寄存器WWDG_CFR設置窗口的高度,當T6:0>W6:0時(shí),寫(xiě)入WWDG_CR則立即產(chǎn)生復位信號;當T6:0

寄存器:
WWDG_CR

WWDG_SR:包含提前喚醒中斷,即減到0X40時(shí)

WWDG_CFR:窗口配置寄存器,EWI只能由硬件復位后清除,當到0X40時(shí),立即產(chǎn)生中斷。

//來(lái)自正點(diǎn)原子@ALIENTEK程序
//保存WWDG計數器的設置值,默認為最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看門(mén)狗
//tr :T[6:0],用于存儲計數器的值
//wr :W[6:0],用于存儲窗口值
//fprer:窗口看門(mén)狗的實(shí)際設置
//低2位有效.Fwwdg=PCLK1/4096/2^fprer.
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{
RCC->APB1ENR|=1<<11; //使能wwdg時(shí)鐘
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); //開(kāi)啟看門(mén)狗,設置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位計數器
}
//窗口看門(mén)狗中斷服務(wù)程序
void WWDG_IRQHandler(void)
{
u8 wr,tr;
wr=WWDG->CFR&0X7F;
tr=WWDG->CR&0X7F;
if(tr
WWDG->SR=0X00;//清除提前喚醒中斷標志位
LED1=!LED1;
}
評論