STM32——WDG(看门狗)

目录

一、WDG简介

二、使用步骤

1.IWDG框图

IWDG键寄存器:

IWDG的超时时间

2.WWDG框图

工作流程:

WWDG工作特性

WWDG超时时间

IWDG和WWDG对比


提示:以下是本篇文章正文内容,下面案例可供参考

一、WDG简介

        

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

        在启动正常运行的时候,系统不能复位,可以通过看门狗来复位单片机。

        在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。

具有两个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

二、IWDG和WWDG

1.IWDG框图

        

        看门狗本质就是定时器,它的结构和定时器是非常相似的。

定时器溢出产生更新事件和中断。而看门狗定时器溢出,直接产生复位信号。

重装值:定时器是在更新事件重装,而看门狗需要我们自减到0之前,手动重装

喂狗操作:其实也就是重置一下递减计数器。递减计数器,减到0之后就复位,当程序正常运行时,为了避免复位,就得在这个计数器减到0之前,及时地把计数值加大,即喂狗。如果你程序卡死了,没有加大这个计数器,那减到0之后就自动复位了,这就是看门狗的工作逻辑。

        IWDG(独立看门狗)特点:独立运行,对时间精度要求较低。(独立看门狗也是唤醒待机模式的四个条件之一)

独立运行,就是独立看门狗的时钟是专门的LSI,内部低速时钟,即使主时钟出现问题了,看门狗也能正常工作。对时间精度要求低,就是独立看门狗只有一个最晚时间界限,喂狗间隔不超过这个最晚界限就行了。

IWDG键寄存器:

        

        键寄存器本质上就是控制寄存器,比如喂狗操作就是在键寄存器写入0xAAAA完成的。

那为什么要用键寄存器呢?

        独立看门狗工作环境是程序可能跑飞,可能受到电磁干扰,程序做出任何操作都是有可能的。如果你只在寄存器中设置一个位,那这一位就有可能在误操作中变成1,或者变成0。所以单独设置1位就来执行控制,比较危险。这时,我们就可以通过在整个寄存器写入一个特定值来代替写入一个位的操作。0xAAAA(1010 1010 1010)   ,0xCCCC(1100 1100 1100 1100)   ,0x5555,这些都是很刁钻的值,都是1,0交替混合的键值。

        IWDG框图中,还有PR,SR和RLR三个寄存器,它们也要有防止误操作的功能,SR是只读的,这个不用保护,剩下的对PR和RLR的写操作,可以设置一个写保护措施,然后只有在键寄存器写入0x5555,才能解除写保护。一旦写入其他值,PR和RLR再次被保护,这样PR和RLR就跟随键寄存器一起被保护了起来,防止误操作,这就是键寄存器设计的用途。

IWDG的超时时间

     超时时间T = TLSI x PR预分频系数 x(RL+1) 对应定时器的话就是72M(PSC+1)(ARR+1)

TLSI = 0.025ms

每隔0.025ms来一个输入时钟,之后输入时钟进行分频,相当于计数时间加倍,加多少倍呢?

图中是PR寄存器和分频系数的对应关系,这里并不是PR写几,就是几+1分频,它只有表中这几个固定的分频系数,比如PR写入2,那就是16分频,对应的就是计数时间就要乘16。

最后RL,就是RLR(计数目标)乘个RL+1就是最终的超时时间了。

例:TLSI是固定的0.025ms,PR写入0时,预分频是4,最短时间RL给0,最后RL+1是1,所以

0.025ms x 4 x(0+1)=0.1ms

最长时间:(RL最大值为0xFFF即4095)

0.025ms x 4 x(4095+1) = 409.6ms

从图中整体来看,最短时间和最长时间,都是上一个预分频系数的二倍。

2.WWDG框图

        WWDG(窗口看门狗)特点:要求看门狗在精确计时窗口起作用,意思就是喂狗的时间有个最晚时间界限,也有最早的界限,必须在这个界限的窗口内喂狗。这也是窗口看门狗,窗口,的得名原因。对于独立看门狗来说,可能程序就卡死在喂狗的部分,或者程序跑飞,但是喂狗代码也意外执行了,或者程序有时候很快喂狗,有时候又比较慢喂狗,那这些状态,独立看门狗就检测不到了,但是窗口看门狗是可以检测到这些问题的。因为它对喂狗的时间窗口,可以卡的很死。

        窗口看门狗使用的是APB1的时钟,它没有专用的时钟,所以不算独立。

工作流程:

        时钟来源:PCLK1,也就是APB1的时钟(这个时钟默认36MHz)

        看门狗预分频器(WDGTB):时钟进来之后先经过预分频器进行分频(调节时钟频率)。

        递减计数器:分频之后的时钟,驱动递减计数器进行计数,这个计数器比较特殊,只有T5~T0这六位是有效的计数值,最高位T6,这里用来当作溢出标志位。T6位等于1时,表示计数器没溢出,T6位等于0时,表示计数器溢出。

        复位信号输出部分:图中左边,首先WDGA,是窗口看门狗的激活位,WDGA写入1,也就是使能,启动窗口看门狗,使能位作用于这个与门,与门右边就是复位信号的来源了,这里有两个来源,用或门连接,也就是两个来源任意一个,都可以复位

来源1溢出标志位T6:当计数器溢出时T6等于0,然后输入进去,这里或门有个小圆圈,代表输入取反所以0变为1,或门有效 输出1。当WDGA这个使能位给1,开启看门狗后,这个溢出信号就直接通向复位了。所以这一路的意思就是T6位一旦等于0,即表示计数器溢出,就产生复位信号,那在程序正常运行状态下,我们必须始终保证T6位为1,这样才能避免复位。

来源2看门狗配置寄存器:喂狗时间的最早界限由图中上面部分来实现。首先我们需要计算一个最早界限的计数值,写入到这里的W6~W0中,这些值,写入之后是固定不变的。一旦我们执行写入WWDG_CR操作时,图中连接比较器的与门开关就会打开。写入WWDG_CR,其实就是写入计数器,也就是喂狗,在喂狗时,比较器开始工作,比较两个寄存器(CFR和CR)的0~6位,当计数器T6:0>窗口值W6:0时比较结构就为1,通过或门去申请复位,这就是喂狗最早时间窗口的实现流程。

        就是喂狗的时候,我把当前计数值和我预设的窗口值进行比较,如果发现狗余粮还非常充足时,你喂的那么频繁,那么肯定有问题啊,我帮你复位一下,不让你喂太早了。

                与门:它的作用类似一个开关,左边是控制信号,右边是输入,上边是输出。

        控制信号给1,则输出等于输入,开关导通。

        控制信号给0,则输出等于0,与输入无关,开关断开。

三、WWDG工作特性


四、WWDG超时时间

五、IWDG和WWDG对比

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它具有看门狗(Watchdog)功能。看门狗是一种硬件定时器,用于监控系统的运行状态,当系统出现异常情况时,看门狗会自动重启系统,保证系统的稳定性和可靠性。 在STM32F103C8T6中,看门狗的配置需要以下步骤: 1. 使能看门狗时钟:通过RCC寄存器使能看门狗时钟。 2. 配置看门狗预分频器和重载值:看门狗预分频器和重载值用于确定看门狗计数器的计数周期,通过IWDG_PR和IWDG_RLR寄存器进行配置。 3. 启动看门狗:配置好看门狗后,通过IWDG_KR寄存器启动看门狗。 4. 定时喂狗:在系统运行正常时,需要定时喂狗,以避免看门狗超时,导致系统重启。通过IWDG_KR寄存器定时喂狗。 以下是一个简单的示例代码,演示如何配置和使用看门狗: ``` #include "stm32f10x.h" void WDG_Init(void) { RCC_APB1PeriphResetCmd(RCC_APB1Periph_IWDG, ENABLE); // 使能看门狗时钟 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 允许写入IWDG_PR和IWDG_RLR寄存器 IWDG_SetPrescaler(IWDG_Prescaler_256); // 配置预分频器,分频系数为256 IWDG_SetReload(0xFFF); // 配置重载值,最大值为0xFFF IWDG_ReloadCounter(); // 重载看门狗计数器 IWDG_Enable(); // 启动看门狗 } int main(void) { WDG_Init(); // 初始化看门狗 while(1) { // 定时喂狗 IWDG_ReloadCounter(); // 喂狗 } } ``` 在上面的例子中,预分频器的分频系数为256,重载值为0xFFF,这意味着看门狗计数器的计数周期为256*4096/40M=26.2144ms,如果系统在这个周期内没有重载看门狗计数器,那么看门狗就会超时,导致系统重启。通过定时喂狗,可以避免这种情况的发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值