IWDG----独立看门狗
2026/4/23 18:19:09 网站建设 项目流程

一.简介

STM32有两个看门狗:独立看门狗(IWDG),窗口看门狗。独立看门狗是一个12位的递减计数器,当计数器的值从某个值减到0的时候,系统产生复位信号

二IWDG功能剖析

1.独立看门狗时钟

IWDG的clock由Independent的RC振荡器LSI提供,独立的 ,频率为30-60khz,一般40khz,所以IWDG的定时实际不是非常精准,使用低精度

2.count clock

递减count的clock由LSI(Low Speed Internal)经过8bit的Prescaler得到,我们operate presacler register IWDG_PR设置分频因子,因子[4,8,16,32,64,128,256],CK_CNT=40/(4*2^PRV)(Prescaler Value),一个CNT Clock-> cnt-1

3.CNT

它是一个12bit的递减CNT,MAX=0XFF,减到0,产生IWDG_RESET,重新启动,刷新CNT value的动作“喂狗”

4.Reload Register

里面装着刷新到CNT的值,值得大小决定独立看门狗的溢出时间,T_out = (4*2^prv)/40*rlv

5.键寄存器

属于Control Register,三种模式

6.Status Register

SR只有bit 0,PVU和bit 1

三实战

IWDG属于单片机内部资源,只需要一个外部按键和LED

(1)IWDG配置函数

voidIWDG_Config(uint_8 prv,uint16_t rlv)

{

//使能PR and RLR可写

IWDG_WriteAcessCmd( IWDG_WriteAcess_Enable);

//sset prescaler value

IWDG_SetPresacler(prv);

//set Reload value

IWDG_ReloadCounter();

//enable IWDG

IWDG_Enable;

}

(3)喂狗函数

void IWDG_Feed(void)

{

//RLR的value to CNT,w喂狗,放置Reset

//CNT->0 --- Reset

IWDG_ReloadCounter();

}

(3)main函数

int main()

{

LED_Config();

Delay(0x8FFFFF);

if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != REST)

{

LED_RED;

RCC_ClearFlag();

}

else

{

LED_BLUE;

}

Key_GPIO_Config();

IWDG_Config(IWDG_Prescaler_64,625)//t=RLR/f=625/40000/64=1s

while(1)

{

if(Key_Scan(PA,PA13) == KEY_ON)

{

IWDG_FEED;

LED_GREEN;

}

}

}

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询