1、看门狗是什么:就是一个向下定时器,定时时间一到,就会触发一个向下的复位的中断,使单片机开始工作
2、作用:MCU微控制器构成的微型计算机系统中,由于微控制器的工作常常会受到来自外界电磁场的干 扰,造成各种寄存器和内存的数据混乱,从而导致程序指针错误、不在程序区、取出错误的程序指令 等,都有可能会导致程序执行陷入死循环,程序的正常运行被打断,由微控制器控制的系统无法继续 正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。为了解决以上的问题,在微控制继承了一个定时器复位电路,即看门狗。
3、分类:
3.1独立看门狗(IWDG)
自由运行的递减计数器
时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
看门狗被激活后,则在计数器计数至0x000时产生复位
3.1.1主要功能
由专用的低速时钟(Lst)驱动,即使主时钟发生故障,也能够继续有效工作的场合。
独立看门狗适用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度要求低
3.1.2主要框架
3.1.4、相关固件库函数
写使能
//Enables or disables write access to IWDG_PR and IWDG_RLR registers
#define IWDG_WriteAccess_Enable ((uint16_t)0x5555)
#define IWDG_WriteAccess_Disable ((uint16_t)0x0000)
参数:
@arg IWDG_WriteAccess_Enable
@arg IWDG_WriteAccess_Disable
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)
设置预分频寄存器:
/**
* @brief Sets IWDG Prescaler value.
* @param IWDG_Prescaler: specifies the IWDG Prescaler value.
* This parameter can be one of the following values:
* @arg IWDG_Prescaler_4: IWDG prescaler set to 4
* @arg IWDG_Prescaler_8: IWDG prescaler set to 8
* @arg IWDG_Prescaler_16: IWDG prescaler set to 16
* @arg IWDG_Prescaler_32: IWDG prescaler set to 32
* @arg IWDG_Prescaler_64: IWDG prescaler set to 64
* @arg IWDG_Prescaler_128: IWDG prescaler set to 128
* @arg IWDG_Prescaler_256: IWDG prescaler set to 256
* @retval None
*/
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler)
/**
* @brief Sets IWDG Reload value.
* @param Reload: specifies the IWDG Reload value.
* This parameter must be a number between 0 and 0x0FFF.
* @retval None
*/
void IWDG_SetReload(uint16_t Reload)
按照 IWDG 重装载寄存器的值重装载 IWDG 计数器,设置重装载计数器
//#define KR_KEY_Reload ((uint16_t)0xAAAA)
void IWDG_ReloadCounter(void)
{
IWDG‐>KR = KR_KEY_Reload;
}
使能看门狗定时器:开启看门狗
//#define KR_KEY_Enable ((uint16_t)0xCCCC)
void IWDG_Enable(void)
{
IWDG‐>KR = KR_KEY_Enable;
}
看门狗实验
模拟延时每次0.9秒去喂一次狗
RCC_LSICMD:内部使能一个低速时钟等待低速时钟使能成功开启预分频和重装载寄存器设置预分频值
设置重装载值定时分频值减去1,40*1000/32这是分频后的时频率,从1250-1到0的时间正好是一秒
进行喂狗,将重装载数据写入到计数器中
使能独立看门狗,从1250-1开始计数将1250-1的数装载到计数器中
初始化看门狗程序后,开始计数,当计数到900毫秒的时候,就会去喂狗,在1秒能喂狗就是程序能继续执行,不会产生一个复位
3.2窗口看门狗