十一、独立看门狗实验

目录

一、对独立看门狗的认识

1.看门狗的作用

2.独立看门狗的适用情况

3.独立看门狗的功能描述

4.工作框图

二、寄存器的介绍

1.键值寄存器 IWDG_KR

2.预分频寄存器IWDG_PR

3.重装载寄存器

三、配置相关库函数

1.取消寄存器写保护(向 IWDG_KR 写入 0X5555)

2.设置独立看门狗的预分频系数和重装载值

3.重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)

4. 启动看门狗(向 IWDG_KR 写入 0XCCCC)


一、对独立看门狗的认识

1.看门狗的作用

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片——看门狗

2.独立看门狗的适用情况

独立看门狗适合应用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度要求低的场合。

3.独立看门狗的功能描述


在键值寄存器(IWDG KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0OXFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG RESET)。
无论何时,只要在键值寄存器IWDG KR中写入OxAAAA(通常说的喂狗),自动重装载寄存器IWDG RLR的值就会重新加载到计数器,从而避免看门狗复位。
如果程序异常,就无法正常喂狗,从而系统复位。

4.工作框图

键值寄存器IWDG KR:0~15位有效
预分频寄存器IWDG_PR:0~2位有效。具有写保护功能,要操作先取消写保护
重装载寄存器IWDG_RLR:0~11位有效。具有写保护功能,要操作先取消写保护。状态寄存器IWDG SR:0~1位有效

二、寄存器的介绍


1.键值寄存器 IWDG_KR

 

在键寄存器 (IWDG_KR) 中写入 0xCCCC ,开始启用独立看门狗;此时计数器开始从其复位
0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号 (IWDG_RESET) 。 无
论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA IWDG_RLR 中的值就会被重新加载到
计数器中从而避免产生看门狗复位 。
IWDG_PR IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新
被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。

2.预分频寄存器IWDG_PR

该寄存器用来设置看门狗时钟的分频系数, 最低为 4 ,最高位 256 ,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是保留位。

3.重装载寄存器

该寄存器用来保存重装载到计数 器中的值。该寄存器也是一个 32 位寄存器,但是只有低 12 位是有效的,该寄存器的各位描述
如图 10.1.3 所示:

三、配置相关库函数

1.取消寄存器写保护(向 IWDG_KR 写入 0X5555

通过这步,我们取消 IWDG_PR IWDG_RLR 的写保护,使后面可以操作这两个寄存器 ,
设置 IWDG_PR IWDG_RLR 的值。这在库函数中的实现函数是:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

这个函数顾名思义就是开启 / 取消写保护,也就是使能 / 失能写权限。

2.设置独立看门狗的预分频系数和重装载值

设置看门狗的分频系数的函数是:
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值

设置看门狗的重装载值的函数是:
void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间(也就是看门狗溢
出时间),该时间的计算方式为:
Tout=((4×2^prer) ×rlr) /40
其中 Tout 为看门狗溢出时间(单位为 ms);prer 为看门狗时钟预分频值(IWDG_PR 值),
范围为 0~7rlr 为看门狗的重装载值(IWDG_RLR 的值);
比如我们设定 prer 值为 4 rlr 值为 625 ,那么就可以得到 Tout=64 × 625/40=1000ms ,这样,
看门狗的溢出时间就是 1s ,只要你在一秒钟之内,有一次写入 0XAAAA IWDG_KR ,就不
会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准
确的 40Khz ,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

3.重载计数值喂狗(向 IWDG_KR 写入 0XAAAA

库函数里面重载计数值的函数是
IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器

通过这句,将使 STM32 重新加载 IWDG_RLR 的值到看门狗计数器里面。即实现独立看门
狗的喂狗操作。

4. 启动看门狗(IWDG_KR 写入 0XCCCC)

库函数里面启动独立看门狗的函数是:
IWDG_Enable(); //使能 IWDG

通过这句,来启动 STM32 的看门狗。注意 IWDG 在一旦启用,就不能再被关闭!想要关
闭,只能重启,并且重启之后不能打开 IWDG ,否则问题依旧,如果不 用 IWDG 的话,就不要去打开它,免得麻烦。

以上皆是对 正点原子stm32单片机的复习笔记 如有侵权立刻删 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值