stm32f103c8t6学习笔记(学习B站up江科大自化协)-看门狗【WDG】硬件部分

软件部分可查看另一篇文章http://t.csdnimg.cn/yeT8p

一、看门狗简介

        看门狗-WDG(watchdog)

·看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保障系统的可靠性和安全性

·看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号

·stm32内置两个看门狗:

        ·独立看门狗(IWDG):独立工作,对时间精度要求低

独立运行,就是独立看门狗的时钟是专用是LSI,内部低速时钟,即使主时钟出现问题看门狗也能正常工作,喂狗时间不超过最晚时间界限即可

        ·窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

使用的是APB1的时钟,没有专门的时钟

二、独立看门狗IWDG

        1、框图

        2、超时时间公式计算

        ·LSI是输入时钟,40KHz,则 F_{LSI} 就是40K, T_{LSI}就是周期 \frac{1}{40K} = 0.025 ms (这个值是固定的),每隔0.025 ms就输入一个时钟,然后输入时钟进行分频,相当于计数时间进行加倍。

        ·比如,PR写入2,就是16分频,RL是计数目标,这里给99

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 16 *(99 + 1)= 40ms

这个值处在最短时间和最长时间之间。

        ·再比如第一行PR写入0时,预分频系数就是4,最短时间给0(即表中的0x000),所以

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 4 *(0 + 1)= 0.1ms

这个值就是表中的最短时间0.1ms。

在此基础上,给最长时间4095(即表中的0xfff)所以

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 4 *(4095 + 1)= 409.6ms

这个值就是表中的最长时间409.6ms

        ·不难发现,预分频系数逐行 乘以 2,最短时间和最长时间也在逐行 乘以 2,

三、窗口看门狗WWDG

        ·时钟来源是APB1,默认是36MHz。

        ·看门狗控制寄存器只有 T0-T5 为有效计数值,最高位 T6 当做溢出标志位(=1时没溢出,=0时溢出)

举个例子:比如初始值给111 1111,一个计数脉冲变成111 1110,然后下一个脉冲变成111 1101,一直到变成100 0000时,转化为16进制为0x40。

如果把T6当做计数器的一部分,计数器的值实际上才减少一半,减到0x40之后便会溢出;

如果把T6位剥离出去当做溢出标志位的话,标志位为1,计数器为00 0000,如果再有一个脉冲减一次变成011 1111,也就是标志位由1变成0,计数器溢出,T6则会通过或门前的非运算取反后经过或门使其产生复位信号。计数器减少到0才溢出。

WDDG框图分析

        ·WDGA是窗口看门狗的激活位,也就是使能,写入1启用看门狗,作用于与门【关于与门的使用可参考我的另一篇文章 http://t.csdnimg.cn/3kpxG】。

        喂狗的最晚界限:(这个部分位于WWDG框架图的下半部分,与独立看门狗类似)

        与门右边信号的来源是 或门的两路信号,任一一个都可以产生复位信号,或门的其中一路(下面)的信号来自 T6 位,当T6位为0时,信号通过取反后经过或门变成1,就产生复位信号。为保证程序正常运行的情况下,必须保持T6位始终为1才能避免复位。

        喂狗的最早界限:(这个部分位于WWDG框图的右上半部分)

        首先写一个最早界限的计数值,写入W6-W0之中,写入的值是不变的。由于6位递减计数器CNT是位于CR控制器里面的,假如设置WWDG_CR为15s(持续递减到0),把WWDG_CFR(最早界限的计数值)设置为10s(写入后是固定不变的)。在比较器那里 当T6:0 > W6:0时,比较结果返回1。在满足T > W的情况下,此时如果喂狗了,CNT将会更新,即WWDG_CR写入新的值,所以靠近比较器的与门控制信号将会被置1,与门导通,产生信号经过或门再经过最后的与门使得单片机复位。

        当WWDG_CR由15(举个例子)递减到10以下(小于WWDG_CFR的设定值)的时候,这是比较器进行比较之后将会返回一个0,所以靠近计数器的与门此时失去输入信号,也就是此时的时间已经在最大和最小的窗口之间,在这个时候喂狗将不会触发复位,直到WWDG_CR递减到0之前还未进行喂狗才会进行复位。

        就我的理解而言(不一定正确)

        窗口看门狗的最早喂狗时间应该不是由WWDG_CFR直接进行设置,而是通过WWDG_CR的初始值 减去 WWDG_CFR的值得到的,也就是上面举例的15-10=5就是最早喂狗时间。在后文WWDG超时时间第四小点部分有相关的

WWDG工作特性

        ·递减计数器T6:0的值小于0x40时,WWDG产生复位。这里的T6:0包含了T6位,所以值减到0x40的时候再减一次就产生复位。

        ·递减计数器T6:0在窗口W6:0外被重新装载时,WWDG产生复位。就是相当于不能过早的喂狗。

        ·递减计数器T6:0等于0x40时蓝牙产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位。在0x40的时候,T6位的值还是1,还没有溢出,但是再减一次变成0x3F的时候T6位变成0溢出。在这里0x40的时候产生中断,0x3F则产生复位。中断在溢出前一刻产生,也可以成为“死前中断”,在这个早期唤醒中断里面一般可以用来执行一些紧急操作,比如关闭危险设备、保存重要数据等等。或者在早期唤醒中断里面及时喂狗,提示一些信息,不想让他复位。

        ·定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位。

WWDG超时时间

        ·事实上在前面WWDG框图处PCLK刚进来时有先经过4096分频,所以公式中要多乘上4096.

        ·下图中超时计算公式中,红框内为分频系数(也就是公式中的2^{^{WDGTB}}),与前面的独立看门狗部分十分相似

        ·回到WWDG超时时间的公式之中,这里写的是T5:0,与前面的T6:0不同,这就意味着不包含T6位,则会一直减到0之后才会溢出。所以超时时间的公式直接拿T5:0计算即可。

        ·窗口时间与超时时间的公式十分相似,区别在于后半部分,超时时间是计数器一直递减到0的时间,而窗口时间公式的(T5:0 - W5:0)是计数器减到窗口值的时间,所以用T5:0-W5:0就可以算出窗口时间了 。在这里也印证了上边我的猜想(就我的理解而言部分内容)大致正确。

        ·超时的计算公式的计算举例如下:

T_{WWDG} = T_{PCLK1}    *   4096   *   WDGTP预分频系数 * (T[5:0] + 1)

                = 1/36MHz   *   4096   *                1                 * (0 + 1)

                = 0.11377777777777ms 约等于表中的最小超时值

T_{WWDG} = T_{PCLK1}    *   4096   *   WDGTP预分频系数 * (T[5:0] + 1)

                = 1/36MHz   *   4096   *                1                 * (63 + 1)

                = 7.281777777777777ms 约等于表中的最大超时值

        ·表中的分频系数呈2倍递增,最小时间和最大时间也是呈2倍的关系

IDWG和WDWG的对比

注意

        ·无论是哪种看门狗,一旦开启就无法关闭,这样可以防止误操作将他关了

        ·看门狗的CNT计数器并没有提供读和写的操作,看门狗运行的时候,内部计数器记到哪个值了我们并不知道,不是很方便调试观察实验现象

        ·窗口看门狗开启的时候,一定要首次给个重装值,T6位给1,防止开机的时候立即复位。

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值