STM32的特殊定时器-独立看门狗

每一款STM32都有一种特殊的定时器,那就是看门狗(Watchdog),看门狗可以监视系统的运行状态,当系统发生异常时,能让系统自动复位。看门狗分为独立看门狗和窗口看门狗,在很多项目代码中都会看到看门狗的身影,现在我们先来对独立看门狗进行探讨。独立看门狗(Independent Watchdog,IWDG)是由内部低速时钟LSI驱动的自由运行的12位递减计数器。看门狗内部还可以对LSI时钟进行分频,分频后的时钟作为计数器的时钟信号,这可以由预分频寄存器IWDG_PR的PR[2:0]设置分频系数。


在系统复位时,IWDG的12位递减计数器的值是4095。启动IWDG后,计数器就递减计数,当计数器值变为0x000的时候就会使系统产生复位。

独立看门狗有一个重载寄存器IWDG_RLR,可以设置一个12位的重载值,在看门狗的递减计数器的值变为0之前,把IWDGRLR里的值重新载入看门狗计数器,就可以避免产生复位。

独立看门狗还有一个关键字寄存器IWDG_KR,其KEY[15:0]是一个只可以写的关键字。当写入不同的关键字时有不同的作用:

写入0xAAAA时,IWDG_RLR中的12位值就会被写入计数器,使得计数器从头开始递减计数,避免系统复位,起到刷新看门狗的作用。

写入0x5555时,才能修改IWDG_PR和IWDG_RLR的内容。

写入0xCCCC时,启动独立看门狗。

看门狗最大重载值是4095(对应0xFFF),根据LSI时钟频率和预分频系数可以计算出IWDG的最长超时时间,如LSI为32kHz,分频系数为8时,超时时间为1024ms。要注意的是,MCU内部的LSI时钟频率不是非常精确,在设置刷新独立看门狗的周期时要留出一定的空间。

在STM32CUBEMX里,只需要激活IDWG即可,参数部分只需设置两个参数,分别是IDWG counter clock prescaler和IDWG down-counter reload value。

IDWG counter clock prescaler:代表独立看门狗计数器的预分频系数,可选值为4-256。

IDWG down-counter reload value:代表递减计数器的重载值,可输入范围是0-4095。

例如:LSI为32kHz,预分频系数设为64,重载值设为4095,那么递减计数器的时钟信号周期是2ms,则独立看门狗的超时时间是8192ms,也就是大概8s,如果超过8s不刷新独立看门狗,系统就会复位。

在HAI库中,独立看门狗的相关函数有初始化函数HAL_IWDG_Init()和刷新看门狗的函数HAL_IWDG_Refresh()。

还有如下宏函数:

_HAL_IWDG_START(_HANDLE_)

_HAL_IDWG_RELOAD_COUNTER(_HANDEL_)

IDWG_ENABLE_WRITE_ACCESS(_HANDLE_)

IDWG_DISABLE_WRITE_ACCESS(_HANDLE_)

这些函数的输入参数_HANDLE_是独立看门狗对象指针,这些函数实际上就是向IWDG_KR写入关键字的操作。

基于以上介绍,相信大家会对STM32的独立看门狗有一个清晰的认识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值