STM32开发笔记77: 内部看门狗长延时的产生

单片机型号:STM32L053R8T6


开发笔记STM32开发笔记45:看门狗驱动程序的移植介绍了看门狗驱动程序的基本设计方法。今天项目中看门狗的延时时间达到10秒,则实际运行效果只有3秒。

以下是看门狗最大延时时间的设置函数:

void CIwdg::SetMaxRefreshInterval(uint8_t u8_second)
{
	this->hIwdg.Instance = IWDG;
  this->hIwdg.Init.Prescaler = IWDG_PRESCALER_64;
  this->hIwdg.Init.Window = 4095;
#if defined STM32F091xC	|| defined STM32F070x6						
  this->hIwdg.Init.Reload = 625 * u8_second;		//40000000 / 1000 / 64 * 5 = 3125
#elif defined STM32L053xx						
	this->hIwdg.Init.Reload = 578 * u8_second;		//37000000 / 1000 / 64 * 5 = 2890
#endif
  if (HAL_IWDG_Init(&this->hIwdg) != HAL_OK)
  {
    Target.ErrorHandler(__FILE__, __LINE__);
  }
}

以当前使用的STM32L053R8T6为例,如果希望产生10秒延时则设置的值为37000000/1000/64*10=5780。

看下面的程序,这是STM32底层的看门狗驱动,其Reload的最大值为0x0FFF,也就是4095。这就是为什么达不到10秒延时的原因,因为其设置的值已经溢出。

typedef struct
{
  uint32_t Prescaler;  /*!< Select the prescaler of the IWDG.
                            This parameter can be a value of @ref IWDG_Prescaler */

  uint32_t Reload;     /*!< Specifies the IWDG down-counter reload value.
                            This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */

  uint32_t Window;     /*!< Specifies the window value to be compared to the down-counter.
                            This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */

} IWDG_InitTypeDef;

可以通过增加分频系数的方式,加以解决,当然前提是不需要看门狗的实践过于精准,一般来说也不需要过于精准的看门狗时间。

以下是修正后的程序,再设置10秒延时已非常准确。

void CIwdg::SetMaxRefreshInterval(uint8_t u8_second)
{
	this->hIwdg.Instance = IWDG;
  this->hIwdg.Init.Prescaler = IWDG_PRESCALER_256;
  this->hIwdg.Init.Window = 4095;
#if defined STM32F091xC	|| defined STM32F070x6						
  this->hIwdg.Init.Reload = 156 * u8_second;		//40000000 / 1000 / 256 = 156
#elif defined STM32L053xx						
	this->hIwdg.Init.Reload = 145 * u8_second;		//37000000 / 1000 / 256 = 145
#endif
  if (HAL_IWDG_Init(&this->hIwdg) != HAL_OK)
  {
    Target.ErrorHandler(__FILE__, __LINE__);
  }
}

这样设置后,对于STM32F0来说,其最大延时时间约为26秒;对于STM32L0来说,其最大延时时间约为28秒。

 

 

 

原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。

 

 

你可能感兴趣的:(#,STM32快速开发,STM32快速开发)