HAL_IWDG_Refresh使看门狗在STM32L432KC上立即跳闸



我在ST的Nucleo L432KC开发板上遇到了一个奇怪的问题。当我使用以下代码启动IWDG时:

IWDG_HandleTypeDef IwdgHandle;
IwdgHandle.Instance = IWDG;
IwdgHandle.Init.Prescaler = IWDG_PRESCALER_256;
IwdgHandle.Init.Reload    = 30 * 125; 
// 30 sec * 125 watchdog pulses per sec using the LSI frequency of ~32kHz and prescaler 256

然后尝试";宠物;看门狗使用以下内容:

HAL_IWDG_Refresh(&IwdgHandle); // resets the IWDG counter back to value of reload

设备立即重置,RCC_FLAG_IWDGRST被设置,表明重置是由于看门狗超时。

使用相同代码的这个问题在Nucleo L152RE上运行得很好(唯一的区别是依赖关系现在是L4xx系列而不是L1xx(

你知道为什么会发生这种重置吗?

Stm32L4系列中的独立看门狗具有窗口选项。启用时,如果看门狗过早重新加载,当看门狗计数器值高于窗口值时,它将重置mcu。

如果不需要选项,则IwdgHandle.Init.Window应设置为0xFFF(最大值(。如果您在bss中声明了IwdgHandle,则Window字段将为零,如果计数器高于零,则会在看门狗刷新时重置。

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;

附言:看门狗的计时器是一个向下计数器。HAL_IWDG_RefreshReload值重新加载计数器,不重置为零

相关内容

  • 没有找到相关文章

最新更新