stm32 窗口看门狗 WWDG

窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变

窗口看门狗(WWDG)的时钟来自PCLK1,即挂接在APB1总线上,APB1时钟最大为36M

窗口值由配置寄存器WWDG_CFR的[6:0]位设置,所以最大值0x7F

当递减计数器递减到0x40的时候,还不会马上产生复位,如果使能了提前唤醒中断,则产生提前唤醒中断,提醒喂狗,随后将复位

WWDG配置步骤

1.使能WWDG时钟
2.设置WWDG窗口值
3.设置WWDG预分频因子
4.初始化NVIC外设,设置WWDG中断优先级
5.初始化计数器值,使能WWDG
6.使能WWDG中断
7.编写WWDG中断处理函数

举例

void WWDG_IRQHandler()
{
    if(WWDG_GetFlagStatus() == 1)
    {
        WWDG_SetCounter(0x70); //喂狗
        printf("WWDG_IRQHandler.\n");
    }
    WWDG_ClearFlag();
}

void WWDG_init()
{
    NVIC_InitTypeDef nvic = 
    {
        WWDG_IRQn,
        2,
        2,
        ENABLE
    };

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); //使能WWDG时钟

    WWDG_SetWindowValue(0x50); //设置WWDG窗口值

    WWDG_SetPrescaler(WWDG_Prescaler_8); //设置WWDG预分频因子

    NVIC_Init(&nvic); //初始化NVIC

    WWDG_Enable(0x70); //初始化计数器值,使能WWDG

    WWDG_ClearFlag();

    WWDG_EnableIT(); //使能WWDG中断
}
posted @ 2017-08-11 23:39  thomas_blog  阅读(169)  评论(0编辑  收藏  举报