STM32学习(WDG看门狗)

1.WDG简介

WDG(Watchdog)看门狗(简单来说就是程序运行的保障措施,我们的在程序中定期的喂狗,如果程序出问题卡死了,没有在规定的时间去喂狗,那么看门狗硬件就会自动帮我们复位一下,防止程序长时间卡死)
看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
STM32内置两个看门狗
    独立看门狗(IWDG):独立工作(就是独立看门狗的时钟时专用的LSI,内部低速时钟,即使主时钟出现问题,看门狗也能正常工作),对时间精度要求较低
    窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用(使用APB1的时钟)

2.IWDG

2.1 IWDG框图

       输入时钟是LSI,内部低速时钟,时钟频率为40KHz,之后,时钟进入预分频器进行分频,这个预分频器只有8位,所以最大只能进行256分频,上面这个预分频寄存器,可以配置分频系数,这个PR和定时器的PSC是一个意思,之后后面,经过预分频器分频之后,时钟驱动递减计数器,每来一个时钟,自减一个数,另外这个计数器是12位的,所以最大值是2的12次方减1,然后,当自减到0之后,产生IWDG复位,正常运行时,为了避免复位,我们可以提前在重装载寄存器写一个值,IWDG_RLR和定时器的ARR一样,那当我们写好值之后,在运行过程中,我们在这个键寄存器里,写一个特定数据,控制电路进行喂狗,这时重装值,就会复制到当前的计数器中,这样记数器就会回到重装值,重新自减运行了,然后,这里有个状态寄存器SR,就是标志电路运行的状态。最后上面的寄存器位于1.8V供电区,下面主要工作的电路,都在VDD供电区。

2.2 IWDG键寄存器

键寄存器本质上是控制寄存器,用于控制硬件电路的工作
在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率

        指令的抗干扰能力强,对PR和RLR的写操作,可以设置一个写保护措施,只有键寄存器写入5555,才能解除写保护,一旦写入其他值,PR和RLR再次被保护起来,这样PR和RLR,就跟键寄存器一起被保护了起来,防止误操作

2.3 IWDG超时时间

超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)
其中:TLSI = 1 / FLSI

        FLSI就是40K,TLSI就是周期,等于40k分之1,等于0.025ms,之后输入时钟进行分频,相当于计数时间加倍,上图是PR和分频系数的关系,最后RLR计数目标乘个RLR+1,就是最终的超时时间。

3.WWDG

3.1 WWDG框图

        时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36MHz,所以就是36M的时钟进来,进来之后,还是先经过一个预分频器进行分频(灵活调节后面计数器的时钟频率,同时预分频系数也是计算计数器溢出时间的重要参数),那接着,分频之后的时钟,驱动这个计数器进行计数, T5—T0是有效计数位,T6是标志位。左边是复位信号输出部分,首先这个WDGA,是窗口看门狗的激活位,也就是使能,WDGA写入1,启用窗口看门狗。 上面这一块实现喂狗时间的最早界限,首先,我们需要计算一个最早界限的计数值,写入这里的W6~W0中,这里的值写入之后是固定不变的,之后这里,一旦我们执行写入CR操作时,这个与门开关就会打开,写入CR,就是写入寄存器,也就是喂狗。在喂狗时,这个比较器开始工作,一旦它比较,我们当前计数器T6:0>窗口值W6:0,比较结果就等于1。

3.2 WWDG工作特性

递减计数器T[6:0]的值小于0x40时,WWDG产生复位
递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位(一般用来执行紧急操作,比如保存重要数据、关闭危险设备等,或者还有一种写法,虽然超市喂狗了,但是我们可以在中断里执行一些代码解决,或者任务不危险,超时了就想做一些提示,不不想让它复位,这样的话,我们就可以在这个早期唤醒中断里,直接执行喂狗,阻止系数复位,然后提示一些信息)
定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

3.3 WWDG超时时间

超时时间:
    TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)
窗口时间:
    TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
其中:TPCLK1 = 1 / FPCLK1

        多乘一个4096,时因为PCLK进来之后先执行一个4096的分频,WDGTB的值与分频系数的关系,就是分频系数=2^WDGTB,对应上表。

4.IWDG和WWDG对比

5.独立看门狗配置

1.开启时钟,只有LSI时钟开启,独立看门狗才能运行(如开启了独立看门狗,那么LSI就会跟随强制打开,等LSI稳定后,就可以自动为独立看门狗提供时钟,这步可以不用写代码)

2.解除写保护

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

3.写入预分频器和重装寄存器

IWDG_SetPrescaler(IWDG_Prescaler_x); 
IWDG_SetReload(x);

4.配置工作完成后,执行启动看门狗的指令

IWDG_ReloadCounter();                         
IWDG_Enable();

5.在主循环里,不断执行喂狗指令

IWDG_ReloadCounter();

6.窗口看门狗配置

1.开启独立看门狗APB1的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

2.配置各个寄存器,比如预分频、窗口值

WWDG_SetPrescaler(WWDG_Prescaler_x);            
WWDG_SetWindowValue(0x40 | xx);

3.写入控制寄存器CR,控制寄存器,包含看门狗使能位,计数器溢出位和计数器有效位

WWDG_Enable(0x40 | xx);(使能第一次喂狗,参数与下方函数相同)

WWDG_SetCounter(0x40 | xx);(主循环喂狗,注意与使能函数的时间间隔)

  • 37
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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,如果系统在这个周期内没有重载看门狗计数器,那么看门狗就会超时,导致系统重启。通过定时喂狗,可以避免这种情况的发生。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值