stm32之看门狗

        STM32 有两个看门狗,独立看门狗窗口看门狗,独立看门狗又称宠物狗,窗
口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时,产生系统复位,对于窗口型看门狗同时会产生一个中断。
独立看门狗 (IWDG) 由专用的内部低速时钟 (LSI) 驱动,即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1 时钟分频后得到的时钟驱动。

一、独立看门狗

1.1、独立看门狗主要功能  

自由运行的递减计数器(由LSI驱动的12位计数器)
看门狗被激活后,则在计数器计数至0x000时产生复位

时钟由独立的RC振荡器提供(可在停止和待机模式下工作)

1.2、独立看门狗框图

1.3、独立看门狗时钟

        独立看门狗的时钟由独立的 RC 振荡器 LSI 提供,即使主时钟发生故障它仍然有效,非常独立。 LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ , 所以独立看门狗的定时时间并不一定非常精确,只适用于对时间精度
要求比较低的场合

1.4、计数器时钟

        递减计数器的时钟由 LSI 经过一个 8 位的预分频器得到,可以操作预分频器寄存器 IWDG_PR 来设置分频因子。下面是PR(Prescaler Register)寄存器

分频系数算法:

        

prer 是PR[2:0]设置的值。

1.5、计数器

        独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0 时,会产生 一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的 值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗

1.6、重装载寄存器

        重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。
溢出时间公式:
        
例:如果PSC = 64, RLR = 625,正常情况下f(iwdg) = 40khz, 那么溢出时间t = 1s。

1.7、键寄存器

功能描述如下:
键值键值作用
0XAAAARLR 的值重装载到 CNT
0X5555
PR RLR 这两个寄存器可写
0XCCCC 启动 IWDG

1.8、状态寄存器

       

状态寄存器 SR 只有位 0 PVU 和位 1 RVU 有效,这两位只能由硬件操作,软件操作不了。

1.9、简单case

 外设: 串口、灯,按键
  描述:开启独立看门狗,如果不按键串口会间隔1s一直打印“启动中...”,如果按键按下,喂狗,
           灯会亮,串口不再打印数据
核心代码如下:
  HAL_UART_Transmit(&huart2, "程序启动。。\r\n", strlen("程序启动。。\r\n"), 100);

  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {
			HAL_IWDG_Refresh(&hiwdg);
			HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_RESET);
		}
		HAL_Delay(500);
  }

二、窗口看门狗

        窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。

        窗口看门狗的本质是一个能产生系统复位信号提前唤醒中断的7位计数器。

2.1、窗口看门狗主要功能  

可编程的自由运行的递减计数器(7位计数器)
递减计数器的值小于0x40 和 在递减计数器在窗口外被重新装载产生复位
(看门狗启动时)

开启中断下,当递减计数器等于0x40时产生早期唤醒中断(EWI),在函数内可进行喂狗操作

2.2、窗口看门狗框图

2.3、窗口看门狗原理

T[6:0]: 7位计数器,存在于CR寄存器

W[6:0]: 7位窗口值,存在于CFR寄存器

CR寄存器

CFR寄存器

SR寄存器(只有最低位有用,产生中断时需要软件清0)

2.4、窗口看门狗时序图

看门狗中只有T[5:0]位用来配置计数器,T6是始终是1,当产生复位是T6= 0.

溢出公式如下:

  • ToutWWDG超时时间(没喂狗)
  • FwwdgWWDG的时钟源频率(最大36M
  • 4096WWDG固定的预分频系数
  • 2^WDGTBWWDG_CFR寄存器设置的预分频系数值
  • T[5:0]WWDG计数器低6位,最多63

T[6:0] 最高127,减到0x3f(63)会产生复位,127- 63 = 64,T[6:0]最高位是1,所以T[5:0]最大是63

2.5、简单case

 外设: 两个灯,窗口看门狗
  描述:一个灯启动时由亮到灰,一个灯一直在闪烁(配置在中断里,中断里喂狗)

核心代码

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) {
	HAL_WWDG_Refresh(hwwdg);
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
}


main------>

  MX_GPIO_Init();
  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
  HAL_Delay(300);
  MX_WWDG_Init();
  while (1)
  {
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
	HAL_Delay(40);
  }

三、两个看门狗区别

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F103看门狗程序是一种用于监视和保护嵌入式系统的重要技术。看门狗计时器(Watchdog Timer,简称WDT)是一种硬件定时器,其目的是在系统出现故障(例如软件死锁或死循环)时进行系统重启和恢复,从而避免系统长时间处于非正常运行状态。 在STM32F103系列微控制器中,看门狗计时器是一个重要的硬件模块,通过配置相关寄存器来设置计时器的工作模式和计时时间。以下是一个简单的STM32F103看门狗程序示例: 1. 首先,配置看门狗计时器的时钟源和预分频器,使其按照所需的时间间隔进行计时。例如,可以选择内部LSE(低速外部晶振)或LSI(低速内部RC振荡器)作为时钟源,并设置分频系数。 2. 设置看门狗计时器的重载值(Reload Value),该值决定了看门狗计时器的溢出时间。当计时器计数达到该值时,看门狗计时器会自动触发复位。 3. 启动看门狗计时器,并在需要的时候定期重载计时器的值,以避免看门狗计时器溢出。这样,只要系统正常运行,看门狗计时器就会定期重载计时值,防止系统复位。 4. 如果系统出现故障导致看门狗计时器未能及时重载计时器的值,计时器会溢出并触发系统复位,从而恢复系统到正常工作状态。 需要注意的是,看门狗计时器是一种保护机制,必须小心使用。如果看门狗计时器设置得太短,系统在正常运行时可能会因为无法及时重载计时器而被错误地复位。相反,如果设置得太长,系统在出现故障时可能无法及时恢复,从而导致系统长时间处于非正常状态。因此,正确地设置和使用看门狗计时器是确保系统稳定性和可靠性的关键一步。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俯仰一世_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值