单片机型号: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秒。
上一篇:STM32开发笔记78: 2种STOP模式的唤醒方法
下一篇:STM32开发笔记76: 初始化RTC后死机的原因
推荐阅读最新更新时间:2024-11-10 01:27
设计资源 培训 开发板 精华推荐
- 【征集令】程序员老黄历
- LTC3824 的典型应用 - 具有 40 uA 静态电流的高压降压型控制器
- 使用 ROHM Semiconductor 的 BD45432 的参考设计
- LT1268B、7.5A、150kHz 开关稳压器的典型应用电路
- NCP160FCT2GEVB:250 mA、超低噪声和高 PSRR LDO 稳压器评估板
- LT3692AHFE、5V 和 1.8V 双路 2 级降压转换器的典型应用电路
- LTC1731 配置为基于开关的充电器,适用于更高电流应用
- EVAL-2HS01G-300W、300W LLC 评估板,带 LLC 控制器 ICE2HS01G
- LTC3633AEUFD 1.5V 1MHz 双相降压稳压器的典型应用电路
- TB62758FTG 升压型 DC/DC 转换器的典型应用,内置 6Ch 同步驱动器,用于白光 LED