独立看门狗 IWDG
专业时钟LSI
低功耗仍可以运行
对定时的控制比较松
喂狗
这些时间是按照40kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。
此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟
之间的相位差,因此总会有一个完整的RC周期是不确定的。
键寄存器(IWDG_KR)
KEY[15:0]: 键值(只写寄存器,读出值为0x0000) (Key value)
软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。(将PLR的值重新装载到CNT )
写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。
写入0xCCCC,启动看门狗工作(若选择了硬件看门狗则不受此命令字限制)。
/*******************************************************************************
Copyright: 2023
File name: bsp_driver_iwdg.c
Description: 底层iwdg驱动层
Author: zz
Version: v1.0
Date: 20230211
History: 20230211:v1.0:初版
*******************************************************************************/
#include "bsp_driver_iwdg.h"
static IWDG_HandleTypeDef s_hiwdg;
/*******************************************************************************
Function: BSP_IWDG_Init
Description: IWDG初始化
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_IWDG_Init(void)
{
s_hiwdg.Instance = IWDG;
s_hiwdg.Init.Prescaler = IWDG_PRESCALER_16;
s_hiwdg.Init.Reload = 4095;
if (HAL_IWDG_Init(&s_hiwdg) != HAL_OK)
{
Error_Handler();
}
}
/*******************************************************************************
Function: BSP_IWDG_Feed
Description: IWDG喂狗
Input: 无
Output: 无
Return: 无
*******************************************************************************/
void BSP_IWDG_Feed(void)
{
HAL_IWDG_Refresh(&s_hiwdg);
}
/*******************************************************************************
** End Of File
*******************************************************************************/
窗口看门狗 WWDG
总线时钟APB1(受到主时钟影响)
对定时控制比较严
要求主应用程序在规定时间窗口内
如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从 0x40 (01000000)翻转到0x3F(00111111)(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数 值时重新装载计数器,将产生一个复位。
窗口看门狗时序图
配置上窗口的值(最大不能超过0X7F) ->下窗口的值(0X3F)
获取上窗口的值和当前窗口值
uint8_t wr,tr;
wr = WWDG ->CFR & 0x7f;
tr = WWDG->CR & 0x7f;
if(wr > tr)
{
HAL_WWDG_Refresh(&hwwdg); //喂狗操作
}