历史上的今天
今天是:2025年03月10日(星期一)
2020年03月10日 | STM32开发笔记77: 内部看门狗长延时的产生
2020-03-10 来源: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秒。
史海拾趣
|
1 引言 随着二极管泵浦全固态激光器相关技术的不断发展,它在工业、国防科研、生物医学工程等领域的应用越来越广泛,对其输出功率、可靠性要求也不断提高。作为二极管泵浦全固态激光器的重要组成部分的电源,其可靠性、稳定性也就显得格外重要 ...… 查看全部问答> |
|
比较DFF、Latch Single 与Two Phase 优缺? 请问能否比较在一个pipeline电路中 使用D Flip-Flop、Latch Based Single Phase与 Latch Based Two Phase Clocking的优缺点 我有用primetime比较第一者与第三者的最大操作频率,发现第一者会稍微高一些 不知道是不是有做错… 查看全部问答> |
|
CE printf不能用咋办啊??CE 提示建议使用StringCchVPrintfA函数?? 最近移植个库,库以前是在PC上编译的,都是用多字节的printf,在CE下报错, 情况如下: error C2065: \'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA\' : undeclared identifier 然后我就按它的提示使用StringCchPrintfA; 定义了 ...… 查看全部问答> |
|
MC2440G开发板采用核心板与底板分开设计,更有利于用户的二次开发。用户在不需要更改核心部分的情况下只需修改底板就能开发出自己的产品。并且核心板上集成了常用的以太网和音频等功能,简化了用户的设计。核心板和底板的布局和走线 ...… 查看全部问答> |
|
最近需要实现在WINCE5.0中,联接USB口的宽行针式打印机,不知道有没有好的解决方案?如果打印机厂商有好的wince下的驱动,哪就比较简单,如果没有如何解决… 查看全部问答> |
|
PB11设置为输出的,该IO口上的电容可能会高到105如果不接负载,那么能够输出波形,但很容易受到其他信号的干扰,会有<2ns的脉冲;如果接负载,信号都没有还好离PB10近,把这2个连在一起,实现同样功能后,问题解决。可能是什么原因引起IO口 ...… 查看全部问答> |




