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