完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
看门狗简介
看门狗外设: 独立/窗口看门狗,均可用于检测并解决由软件错误导致的故障,由 VDD 电压域供电,在停止模式和待机模式下仍能工作。 看门狗分类: (1)窗口看门狗 WWDG: (2)独立看门狗 IWDG: 独立看门狗可以看做一个 12 位递减计数器,计数器从某一个值递减到 0 时(如果看门狗已激活)系统就会产生一次复位。如果在计数器递减到 0 之前刷新了计数器值,那么系统就不会产生复位。 喂狗:刷新计数器值的过程 TIP:IWDG 在一旦启用,就不能再被关闭,想要关闭,只能重启,并且重启之后不能打开 IWDG,否则问题依旧存在。所以不用 IWDG 的话,就不要去打开它 IWDG 结构框图 (1)IWDG 时钟 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。 LSI其频率一般在 30-60KHz 之间,通常选择 40KHz 作为IWDG 时钟。且时钟频率并不非常精确,所以独立看门狗只适用于对时间精度要求比较低的场合。 (2)预分频器寄存器 LSI 时钟并不直接提供给计数器时钟,而通过一个 8 位预分频寄存分频后输入给计数器时钟。 分频因子: 4、8、16、32、64、128、256。 分频后的计数器时钟:CK_CNT= 40/ 4*2^PRE,PRE 为预分频系数(0-6), 4*2^PRE 大小就是 4、8、16、32、64、128、256 值。每经过一个计数器时钟,计数器就减 1。 (3)计数器 12 位的递减计数器,计数最大值为 0XFFF,递减到 0 时,产生一个复位信号,让系统重新启动运行,如果在计数器减到 0 之前刷新了计数器值的话,就不会产生复位信号 (4)重装载寄存器 12 位的寄存器,装着要刷新到计数器的值,值的大小决定独立看门狗的溢出时间。 溢出时间 Tout = (4*2^pre) / 40 * rlr(ms) pre 是预分频器系数(0-6) rlr 是重装载寄存器的值,公式内的 40 是独立看门狗的时钟。 (5)标号 5:密钥寄存器(IWDG_KR) 也称为关键字寄存器或键寄存器。是 IWDG 的一个控制寄存器。往该寄存器写入三种值会有三种控制效果: ①写入 0X5555,IWDG_PR 和 IWDG_RLR 寄存器具有写访问保护。若要修改寄存器,必须首先对 IWDG_KR 寄存器写入代码 0x5555。若写入其他值将重启写保护。 ②写入 0XAAAA,把 IWDG_RLR 寄存器内值重装载到计数器中。 ③写入 0XCCCC,启动 IWDG 功能。此方式属于软件启动,一旦开启独立看门狗,它就关不掉,只有复位才能关掉。 (6)标号 6:状态寄存器 IWDG_SR 只有位 0: PVU 和位 1: RVU 有效,这两位只能由硬件操作。 RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。 PVU: 看门狗预分频值更新,硬件置 1表示预分频值的更新正在进行中,当更新完成后,由硬件清 0。 IWDG 配置步骤 开启寄存器访问(给 IWDG_KR 寄存器写入 0X5555) IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护 设置 IWDG 预分频系数和重装载值 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值 计算溢出时间: Tout = (4*2^pre) / 40 * rlr 重载计数器值(喂狗)(给 IWDG_KR 寄存器写入 0XAAAA) IWDG_ReloadCounter(); //重装载初值 开启 IWDG(给 IWDG_KR 寄存器写入 0XCCCC) 要使用独立看门狗,我们还需要打开它,开启 IWDG 的库函数是: IWDG_Enable(); //打开独立看门狗 ` IWDG 初始化函数 void IWDG_Init(u8 pre,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护 IWDG_SetPrescaler(pre);//设置预分频系数 0-6 IWDG_SetReload(rlr);//设置重装载值 IWDG_ReloadCounter(); //重装载初值 IWDG_Enable(); //打开独立看门狗 } 喂狗就是重载初始值,可以和按键联动 void IWDG_FeedDog(void) //喂狗 { IWDG_ReloadCounter(); //重装载初值 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1937浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
730浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
553浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:33 , Processed in 0.846896 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号