历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | STM32开发笔记77: 内部看门狗长延时的产生
2019-11-12 来源:eefocus
单片机型号: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秒。
史海拾趣
|
本帖最后由 dontium 于 2015-1-23 11:33 编辑 模拟电路一日通(Ti的模拟电路应用基础资料) 本人认为很好的资料 … 查看全部问答> |
|
eeworld论坛这里怎么获得积分啊,我初学者,很多问题又都回答不了,拿不了分,但我的分又快用完了…… eeworld论坛这里怎么获得积分啊,我初学者,很多问题又都回答不了,拿不了分,但我的分又快用完了……… 查看全部问答> |
|
Wince5.0 With PlatForm Builder 安装补丁后的问题。 PB5.0,安装了2007年全年的补丁(下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=a54779d5-f4a5-49f0-9e36-979d461f536c&DisplayLang=en)后,编译生成的NK.bin,烧入2410的板子后,系统启动时候出现, 致命 ...… 查看全部问答> |
|
请教: 想在vxworks下做java 开发,不知道能不能行得通?听说vxworks6.4+workbench可以,但却没有这方面的资料.希望高手给予指点.有此想发的朋友一起研究. qq:120964089… 查看全部问答> |
|
Industry’s First Fully Isolated Industrial CAN Transceivers Analog Devices, Inc. has expanded its industry-leading isolated interface product portfolio with two transceivers that are the first to isolate both data signals and power for systems using the CAN (control-area network) communica ...… 查看全部问答> |
|
IAR编译器以下显示是不是说 FLASH 程序占用8 884 bytes对吗?那也可以说是9K不到是吗? 8 884 bytes of CODE memory 788 bytes of CONST memory (+ 14 bytes shared) 357 bytes of DATA memory (+ 64 bytes shared)… 查看全部问答> |




