目录
1.取消寄存器写保护(向 IWDG_KR 写入 0X5555)
3.重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)
一、对独立看门狗的认识
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
![](https://i-blog.csdnimg.cn/blog_migrate/ff00871ea2105da80cd61257d65e00f8.png)
在键寄存器
(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~7;rlr 为看门狗的重装载值(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单片机的复习笔记 如有侵权立刻删