目录
看门狗简介:
初始化例子:
看门狗使能:
写保护:
看门狗重载:
看门狗复位时间计算:基本上看stm中文手册对照框图就很明确
看门狗简介:
此器件具有两个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持 工作状态。窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗 口来检测应用程序非正常的过迟或过早的操作。
IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时 间精度要求较低的场合。WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程 序。有关窗口看门狗的详细信息,
初始化例子:
/**
* @description: 看门狗初始化
* @detail:
* @return {*}
* @author: lkc
*/
void Bsp_IWDGInit(void)
{
/* 大约4秒 */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护
IWDG_SetPrescaler(IWDG_Prescaler_32); //设置 IWDG分频系数
IWDG_SetReload(0x0FFF); //设置 IWDG装载值
/* 开启看门狗*/
IWDG_Enable();
/* 喂狗 */
IWDG_ReloadCounter();
return;
}
看门狗使能:
#define KR_KEY_ENABLE ((uint16_t)0xCCCC)
/**
* @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers disabled).
* @param None
* @retval None
*/
void IWDG_Enable(void)
{
IWDG->KR = KR_KEY_ENABLE;
}
写保护:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护
#define IWDG_WriteAccess_Enable ((uint16_t)0x5555)
/**
* @brief Enables or disables write access to IWDG_PR and IWDG_RLR registers.
* @param IWDG_WriteAccess: new state of write access to IWDG_PR and IWDG_RLR registers.
* This parameter can be one of the following values:
* @arg IWDG_WriteAccess_Enable: Enable write access to IWDG_PR and IWDG_RLR registers
* @arg IWDG_WriteAccess_Disable: Disable write access to IWDG_PR and IWDG_RLR registers
* @retval None
*/
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)
{
/* Check the parameters */
assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess));
IWDG->KR = IWDG_WriteAccess;
}
看门狗重载:
#define KR_KEY_RELOAD ((uint16_t)0xAAAA)
/**
* @brief Reloads IWDG counter with value defined in the reload register
* (write access to IWDG_PR and IWDG_RLR registers disabled).
* @param None
* @retval None
*/
void IWDG_ReloadCounter(void)
{
IWDG->KR = KR_KEY_RELOAD;
}
看门狗复位时间计算:基本上看stm中文手册对照框图就很明确
总的溢出时间(超时时间)=(IWDG_RLR寄存器对应的装载数值) * (看门狗时钟周期)
IWDG_SetPrescaler(IWDG_Prescaler_32); //设置 IWDG分频系数
IWDG_SetReload(0x0FFF); //设置 IWDG装载值