时钟来历:APB1àPCLK1最大72MHz
1:窗口看门狗的特性:
(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,子优先级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;
}