STM32
直播中

李斌

8年用户 1471经验值
私信 关注
[问答]

如何设置WWDG窗口看门狗的超时时间

窗口看门狗WWDG的主要功能有哪些?
如何设置WWDG窗口看门狗的超时时间?

回帖(1)

莫循虎

2021-9-24 15:15:32
  手册说明:
  窗口看门狗WWDG的主要功能
  ●可编程的自由运行递减计数器
  ●有条件的复位
  ─如果开启了看门狗,当递减计数器的数值小于0x40时产生复位
  ─如果开启了看门狗,当在指定的时间窗口之外重加载递减计数器的数值(见图27)时产生复位
  ●硬件或软件启动看门狗(由选择字节指定)
  ●可在HALT指令时产生复位(由选择字节配置)
  WWDG功能说明
  如果开启了看门狗(设置了WDGA=1),当7位的递减计数器(T[6:0]位)从0x40变为0x3F时(即T6变为0),看门狗产生一个复位信号并把复位引脚拉低。如果软件刷新计数器时,计数器的数值大于窗口寄存器中的数值,同样会产生复位。
  
  (图25:STM8窗口看门狗框图)
  在正常的操作期间,应用程序必须定期地写入WDGCR寄存器,以避免产生复位;这个写的动作必须在计数器的数值小于窗口寄存器的数值时进行。写入WDGCR寄存器的数值必须是介于0xFF和0xC0之间(见图26):
  开启看门狗:
  如果(通过选择字节)选择了软件看门狗,在系统复位后看门狗处于关闭状态。设置WDGCR寄存
  器中的WDGA位将开启看门狗,随后在下次复位之前将不能关闭看门狗。
  如果(通过选择字节)选择了硬件看门狗,看门狗将始终开启,而WDGA位将不起作用。
  控制递减计数器:
  递减计数器是自由运行计数器:即使未开启看门狗,它依然不断地递减计数。当开启看门狗
  时,必须设置T6位以避免立刻产生复位。T[5:0]位中包含了看门狗产生复位前允许的时间延迟(见图26);因为写入WDGCR寄存器时,预分频器的状态是不可知的(见图27),所以这个时间延迟介于一个最小和最大数值之间。
  窗口寄存器(WDGWR)的数值是指定窗口的高限:为防止复位,必须在递减计数器的数值小于窗口寄存器的数值并大于0x3F时刷新递减计数器。图27描述了窗口看门狗操作过程。
  注意:T6位可以用于产生一个软件复位(即设置WDGA位同时清除T6位)
  在停止时产生看门狗复位
  如果开启了看门狗,并且选择了停止时产生看门狗复位的选项,则执行HALT指令将产生复位。
  在停止模式下使用WWDG
  如果在选择字节中使能了停止模式下的看门狗(HALT指令不产生看门狗复位),建议在执行HALT指令前先刷新看门狗计数器,以避免在唤醒微控制器后立刻进入不希望的看门狗复位。
  如何设置看门狗的超时
  下图显示了看门狗计数器(CNT)中的6位数值,与以毫秒为单位的超时时间的线性关系,这个表可以在不考虑时序变化时作为一个快速的粗略计算参考,如果需要更精确的计算,请使用图27的公式。
  ---------------------------------------------------------------------------------------------------------------------------
  警告:每次写入WDGCR寄存器时,首先要置T6位为‘1’,以避免立刻产生看门狗复位。
  理论看似复杂 实际应用很简单
  void main(void)
  {
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //系统运行时钟
  INIT_Config(); //初始化函数
  WWDG_Init(0x7F, 0x7F); //初始化窗口看门狗
  while (1)
  {
  App();
  WWDG_SetCounter(0x7E); //在窗口时间范围内喂狗 系统正常运行 低于窗口范围 系统复位
  }
  }
  亲测 stm8s与stm8L通用0
举报

更多回帖

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