WDG
WDG
简介

IWDG VS WWDG
| IWDG独立看门狗 | WWDG窗口看门狗 | |
|---|---|---|
| 复位 | 计数器减到0后 | 计数器T[5:0]减到0后、过早重装计数器 |
| 中断 | 无 | 早期唤醒中断 |
| 时钟源 | LSI(40KHz) | PCLK1(36MHz) |
| 预分频系数 | 4、8、32、64、128、256 | 1、2、4、8 |
| 计数器 | 12位 | 6位(有效计数) |
| 超时时间 | 0.1ms~26214.4ms | 113us~58.25ms |
| 喂狗方式 | 写入键寄存器,重装固定值RLR | 直接写入计数器,写多少重装多少 |
| 防误操作 | 键寄存器和写保护 | 无 |
| 用途 | 独立工作,对时间精度要求较低 | 要求看门狗在精确计时窗口起作用 |
溢出时间计算原理
计算步骤如下
- 首先需要知道看门狗的时钟频率,假设是60kHz
- 设置分频系数,现在设置为8分频,那么分完频之后的时钟就是60_000Hz / 8=75_00Hz,也就是1s跳动7500次
- 如果想要设置溢出时间为0.5s的话,那么就是用0.5*7500=3750,就是设置为3750
IWDG
概述

作用

工作原理

框图
实际上就是一个递减计数器,在程序运行期间,适当的提高计数值就可以避免出现复位,手动重装重装载寄存器的操作就是喂狗,递减计数器是12位的,所以最大的计数是 $2 ^ {12}-1 = 4095$。
-
当递减计数器自减到0时,会产生一个IWDG的复位信号
-
当我们在重装载寄存器中写好值之后,在键寄存器里写一个特定的数据,控制电路进行喂狗,这个时候重装值就会将数值赋给当前计数器
下图分为上下两部分,上面部分工作在1.8v电压下,下面部分工作在VDD电压下

键寄存器
由于IWDG_SR是写保护的,所以不用担心该寄存器被干扰,为了防止另外两个寄存器受到干扰,使用键寄存器对寄存器进行写保护,一旦两个寄存器写入之后会被再次保护起来

配置寄存器

计算溢出时间


WWDG
概述

作用

工作原理
中断产生在复位的前一刻,复位产生时间0x3f,中断产生时刻0x40

框图
这里的WDGTB和上面的PSC都是一个东西,都是预分频器
从T6-T0一共七个位,但是却是6位递减计数器,实际上只有T5-T0是计数器,T6用作溢出标志位,T6位为1时,表示计数器未溢出,T6位为0时,表示计数器溢出
假设我们初始时写入111_1111,依次递减111_1110->111_1101……直到减到100_0000(0x40)时,如果再向下减,T6位将会变为0,T6将会产生一个信号去往或门
WDGA是激活位,也就是使能位,WDGA写入1,启用窗口看门狗
计算最早界限计数值
W6-W0中是最早界限计数值,这些值写入之后是固定不变的,一旦执行写入CR操作时,与门打开,写入CR其实就是写入计数器,也就是喂狗
喂狗时,比较器开始工作,当前计数器T6-0 > 窗口值W6-0,比较结果为1,通过或门,产生复位信号
也就是说喂狗的时候,把当前计数值和预设的窗口计数值进行比较,如果发现狗的余粮还比较充足,但是喂的很频繁,那必定是存在问题的,所以会产生一个复位信号

工作特性

计算溢出时间
乘以4096的原因是在LSI时钟信号后面有一个固定的4096分频


实验
IWDG
1 | int main(void){ |
WWDG
1 |
|





