STM32入门笔记——窗口看门狗
Posted 若你遇见她
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32入门笔记——窗口看门狗相关的知识,希望对你有一定的参考价值。
窗口看门狗概述
功能
他与独立看门狗一样都是用来检测程序的运行情况,只不过他对喂狗时间要求更高。喂狗时间必须在上窗口和下窗口之间。喂狗过早或者过晚都会导致程序复位。这样的好处是可以避免程序跑飞后又跑回来,完成了独立看门狗的喂狗。
他使用的时钟也与独立看门狗不一样
工作框图
T60>W60时代表,计数器值大于上窗口的值。这个时候喂狗(为1)。会导致复位。
当T6为0时,即已达到最晚喂狗,则也导致系统复位。
需要特别说明的是:RC寄存器一共7位可以使用,其中,第7位是看门狗使能位,低6位就是计数器。故其最大值为0x7f(在代码里面就会先给RC寄存器最大值)。而喂狗最低时间是固定的,0X3f时复位,即第6位为0时。
相关寄存器
实例代码
这里需要说明的是,如下代码的功能是在窗口看门狗马上到达最低复位值时进入中断,避免其复位。
//保存WWDG计数器的设置值,默认为最大.
u8 WWDG_CNT=0x7f;
void WWDG_Init(u8 tr,u8 wr,u32 fprer) //三个入口参数分别为:计数器最大值、上窗口值、预分频值
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // 窗口看门狗时钟使能
WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT.计数器上限值,
WWDG_SetPrescaler(fprer); //设置IWDG预分频值
WWDG_SetWindowValue(wr); //设置窗口值,上窗口
WWDG_Enable(WWDG_CNT); //使能看门狗 ,设置计数器上限,第一次喂狗,这个是内部函数、GOTO定义自己看
//到这里看门狗的初始化已经完成
WWDG_ClearFlag(); //清除提前唤醒中断标志位
WWDG_NVIC_Init(); //初始化窗口看门狗 NVIC
WWDG_EnableIT(); //开启窗口看门狗中断
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt) //喂狗函数
{
WWDG_Enable(cnt); //使能看门狗设置 counter . 这个是内部函数、GOTO定义自己看
}
//窗口看门狗中断初始化
void WWDG_NVIC_Init()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2,子优先级3,组2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}
窗口看门狗中断服务函数
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位
WWDG_ClearFlag(); //清除提前唤醒中断标志位
LED1=!LED1; //LED状态翻转
}
//在主函数需要对NVIC进行分组,需要调用WWDG_Init
以上是关于STM32入门笔记——窗口看门狗的主要内容,如果未能解决你的问题,请参考以下文章