完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
独立看门狗
一、简介: 其用于检测和解决由软件错误导致的故障,当计数器达到设定的超时时间值时会产生系统复位。其特点为: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; //抢占优先级为2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级为3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看门狗 NVIC_Init(&NVIC_InitStructure); WWDG_ClearFlag();//清除提前唤醒中断标志位 WWDG_EnableIT();//开启提前唤醒中断 有关独立看门狗和窗口看门狗的介绍就到这里,它们还是相对简单的,应用起来也十分的方便和简单,希望对大家有所启发和帮助吧!! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1800 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
744浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
563浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 23:31 , Processed in 0.887361 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号