一、前言
二、时钟树解析
三、窗口看门狗功能介绍
窗口看门狗的时序图如下所示:
四、寄存器介绍
对WWDG的程序设计主要涉及3个寄存器:
下面将对这几个寄存器进行一一介绍。
4.1 WWDG_CR控制寄存器
《STM32中文参考手册》对WWDG_CR寄存器的描述如下:
4.2 WWDG_CFR配置寄存器
《STM32中文参考手册》对WWDG_CFR寄存器的描述如下:
4.3 WWDG_SR状态寄存器
《STM32中文参考手册》对WWDG_SR寄存器的描述如下:
五、程序设计
对于窗口看门狗的程序设计主要分为3个部分:窗口看门狗初始化、重置WWDG计数器的值、窗口看门狗中断服务程序。
5.1 窗口看门狗初始化
//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低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&=0XFF80;
WWDG->CFR|=wr; //设定窗口值
WWDG->CR|=WWDG_CNT; //设定计数器值
WWDG->CR|=1<<7; //开启看门狗
MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2
WWDG->SR=0X00; //清除提前唤醒中断标志位
WWDG->CFR|=1<<9; //使能提前唤醒中断
}
5.2 重置WWDG计数器的值
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{
WWDG->CR =(cnt&0x7F);//重设置7位计数器
}
5.3 窗口看门狗中断服务程序
//窗口看门狗中断服务程序
void WWDG_IRQHandler(void)
{
WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!
WWDG->SR=0X00;//清除提前唤醒中断标志位
LED1=!LED1;
}