使用STM32F030的WWDG,發(fā)現(xiàn)其在STOP下面跟STM8S的休眠模式的情況一樣,不會對MCU進(jìn)行復(fù)位.
貼上看門狗代碼:
/***************************************************************************************
****************************************************************************************
* FILE : wdog_drv.c
* Description :
*
* Copyright (c) 2015 by LAN. All Rights Reserved.
*
* History:
* Version Name Date Description
0.1 藍(lán)曙光 2015/01/28 Initial Version
****************************************************************************************
****************************************************************************************/
#include "wdog_drv.h"
#define WWDG_Prescaler_8 ((uint32_t)0x00000180)
#define CFR_WDGTB_MASK ((uint32_t)0xFFFFFE7F)
#define RCC_APB1ENR_WWDGEN ((uint32_t)0x00000800) /*!< Window Watchdog clock enable */
/*==================================================================
* Function : Wdog_Init
* Description : 看門狗初始化
* Input Para :
* Output Para :
* Return Value:
==================================================================*/
void Wdog_Init(void)
{
Wdog_Start();
WWDG->CFR |= 0x7F; //窗口看門狗的上窗口,窗口值必須在0x3F以上,但必須小于計數(shù)值小于0x7F
WWDG->CR = 0x7F; //看門狗計數(shù)值
Wdog_Feed(0);
}
/*==================================================================
* Function : Wdog_Start
* Description : 啟動開門狗
* Input Para :
* Output Para :
* Return Value:
==================================================================*/
void Wdog_Start(void)
{
RCC->APB1ENR |= RCC_APB1ENR_WWDGEN;
//設(shè)置分頻時鐘
WWDG->CFR = (WWDG->CFR & CFR_WDGTB_MASK) | WWDG_Prescaler_8;
WWDG->CR |= 0x80; //使能窗口看門狗
}
/*==================================================================
* Function : Wdog_SetReload
* Description : 重新設(shè)置頻率
* Input Para :
* Output Para :
* Return Value:
==================================================================*/
void Wdog_SetReload(u8 uTime)
{
}
/*==================================================================
* Function : Wdog_Feed
* Description : 喂狗
* Input Para :
* Output Para :
* Return Value:
==================================================================*/
void Wdog_Feed(u8 uTime)
{
if ((WWDG->CR & 0x7F) < WWDG->CFR)//小于窗口值才能喂狗
{
WWDG->CR |= 0x7F; //重新喂狗
}
}
/*==================================================================
* Function : Wdog_ResetChip
* Description : 復(fù)位芯片
* Input Para :
* Output Para :
* Return Value:
==================================================================*/
void Wdog_ResetChip(void)
{
while ((WWDG->CR & 0x7F) >= WWDG->CFR)
{//等待進(jìn)入到喂狗窗口
}
WWDG->CR &= 0x40; //喂最小復(fù)位
while(1);
}