一、简介:
其用于检测和处理由软件过错导致的毛病,当计数器到达设定的超时时刻值时会发生体系复位。其特色为:1、其运用的时钟是由独立的RC振荡器发生的,因而能够在待机和中止形式下运转。2、在看门狗激活后,假如递减计数器的值到达0X000时会发生体系复位。
二、功用简述:
经过向关键字寄存器(IWDG_KR)写入0XCCCC发动独立看门狗,计数器会从复位值0XFFF,递减计数,当计数器的值到达0X000时,发生复位信号。在计数值还未到达0X000时,向IWDG_KR寄存器写入0XAAAA,IWDG_RLR寄存器的值就会重装载到计时器,然后能够防止发生复位(俗称喂狗)。然后能够看出,当软件运转出问题时,在必定的时刻内无法做到喂狗的功用时,就会发生体系复位,完成其对软件毛病的检测和处理。
三、相关寄存器:
1、关键字寄存器:
关键字寄存器的有用位为位0到位15,位16到位31保存,前边现已介绍过经过向该寄存器中写入0XAAAA,能够使IWDG_RLR寄存器中的值重装载到计数器,防止体系复位。我们IWDG_PR(预分频器寄存器)和IWDG_RLR(重载寄存器)是具有写保护的寄存器,在该寄存器中写入键值0X5555可使能对IWDG_PR和IWDG_RLR的拜访。
2、预分频器寄存器:
该寄存器的有用位为位0到位2,其他位保存,经过设置PR[2:0]的值,设定相应的分频系数。
3、重载寄存器:
上面现已说到该寄存器中的值会重装载到计数器中,计数器将会从该值递减计数,由此可见:该寄存器中的值和预分频器寄存器中的值一起决议超时周期。
4、状况寄存器:
该寄存器只要位0和位1为有用位,位0(RVU)为预分频器寄存器的值更新标志位,位1(PVU)为计数器重载值更新标志。
四、相关代码剖析:
经过相关库函数对独立看门狗的装备仍是相对简略的,其间初始化的进程如下:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写IWDG_SetPrescaler(prer); //设置IWDG分频系数IWDG_SetReload(rlr); //设置IWDG装载值IWDG_ReloadCounter(); //reload(喂狗)IWDG_Enable(); //使能看门狗
窗口看门狗
一、简介:
比照独立看门狗来看,所谓的窗口看门狗便是设定了一个窗口值(上限和下限值)。当递减计数器值小于0X40(窗口下限值)时发生复位。在设置的窗口外重载递减计数器也会碑文复位。窗口看门狗能够设置提早唤醒中止,当递减计数器等于0X40时会触发该中止,能够在该中止中做喂狗等相关操作。
二、框图:
窗口看门狗的框图如下:比照的框图来看下边的相关介绍!
三、作业进程:
经过设置WWDG_CR寄存器的WDGA位能够使能看门狗,递减计数器为操控寄存器的低7位,其间当第7位(即T6)由1变为0(即由0X40递减为0X3F)时就会复位,在装备寄存器低7位寄存看门狗上限值,计数器中的值与上限值比较,假如在上限值之上喂狗也会碑文复位,这也是窗口看门狗与独立看门狗的不同之处。由此可见,喂狗的时刻只能在上限和下限值之间,不然就会碑文复位操作。
四、相关寄存器:
1、操控寄存器(WWDG_CR):
前面现已介绍过了,其间有用位为位0到位7,位7(WDGA)为看门狗激活位,位0到位6做计数器。
2、装备寄存器(WWDG_CFR):
该寄存器的有用位为位0到位9,位0到位6前面现已介绍过寄存的是计数器的上限值,位7和位8用来设置定时器时基,然后选定相应的时钟分频器。其间位9便是上边介绍到的提早唤醒中止(EWI)。
3、状况寄存器(WWDG_SR):
该寄存器中的有用位只要位0,用来做提早唤醒中止的标志位(EWIF)。
五、相关代码剖析:
阐明:我们窗口看门狗运用的时钟为PCLK1,因而要先使能相关时钟。在代码中是以舱位了提早唤醒中止为例的,试着将相关的库函数操作和其操作的寄存器对应上。
NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT. WWDG_SetPrescaler(fprer); //设置分频值WWDG_SetWindowValue(wr); //设置窗口值WWDG_Enable(WWDG_CNT); //舱位看门狗NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看门狗中止NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级为2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级为3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看门狗NVIC_Init(&NVIC_InitStructure);WWDG_ClearFlag();//铲除提早唤醒中止标志位WWDG_EnableIT();//舱位提早唤醒中止
有关独立看门狗和窗口看门狗的介绍就到这儿,它们仍是相对简略的,使用起来也非常的便利和简略,期望对我们有所启示和协助吧!!