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的独立看门狗有一个清晰的认识。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论