STM32
直播中

陈燕

7年用户 1060经验值
私信 关注
[问答]

怎样去计算STM32F407窗口看门狗喂狗的最小时间

窗口看门狗是什么?
怎样去计算STM32F407窗口看门狗喂狗的最小时间?怎样去计算STM32F407窗口看门狗喂狗的最大时间?

回帖(1)

杨平

2021-9-15 17:25:14
  之前只用过简单的看门狗,窗口看门狗简单看过一次没有看明白,这一次算是补课了。窗口看门狗的机理其实是很简单的,所谓的窗口其实是一个计数器的区间范围。这个计数器是一个自动递减的计数器,窗口则限定了喂狗的数值上限和下限。不在此范围内进行喂狗,或者没有喂狗,都会导致系统的复位。除了这些功能以外,还有一个中断,当复位产生的时候会进入到中断,如果进入到中断之后还可以进行喂狗,但是之前使用的喂狗方式则不奏效了。
  我使用的IDE中,这部分信息给整理的很简单了。以下是可配置的信息:
  上面的信息中,还有一个PCLK的信息需要确认,这个从IDE中也能够很方便获取。相应的信息如下:
  结合手册中的信息,更容易理解:
  配置完成之后,首先测试不喂狗的情况,这个肯定会导致复位。测试效果如下:
  之后,不再输出。
  按照我的配置,简单的计算可以得出喂狗的最小时间和最大时间:
  counter_min = 127 - 120counter_max = 127 - 63# unit is secondtime_base_min = (4096.0 * 2 ** 8) / 42000000time_base_max = (4096.0 * 2 ** 8) / 42000000# unit is mstime_out_min = time_base_min * 1 * 1000time_out_max = time_base_max * counter_max * 1000#print(counter_min, counter_max)#print(time_base_min, time_base_max)print(time_out_min)print(time_out_max) 计算结果:
  
  也就是,喂狗时间不能够快于5.46ms,也不能够慢于49.15ms。接下来,测试一下20ms喂狗。
  从效果看,程序不再跑飞。
  再测试一下1ms的喂狗,这个应该会导致跑飞。
  从效果看,软件是跑飞了。
  再测试一下100ms,应该也是跑飞。测试了一下居然是不跑飞,可能我的时钟配置有点问题了。暂且不去计较了,先弄清楚这个窗口看门狗的模型再说。我直接测试一个200ms。
  这次是跑飞了,虽说是跟我的理论计算数据不同,但是还是可以辅助理解。我猜测可能是我时钟源选择有点问题,印象中没有配置过晶振,是否是这个地方默认不是8M外部晶振导致呢?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分