/** * @brief Refresh the IWDG. * @param hiwdg pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) { /* Reload IWDG counter with value defined in the reload register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); /* Return function status */ return HAL_OK; }
/** * @brief Initialize the IWDG according to the specified parameters in the * IWDG_InitTypeDef and start watchdog. Before exiting function, * watchdog is refreshed in order to have correct time base. * @param hiwdg pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) { uint32_t tickstart; /* Check the IWDG handle allocation */ if(hiwdg == NULL) { return HAL_ERROR; } /* Check the parameters */ assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance)); assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler)); assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload)); assert_param(IS_IWDG_WINDOW(hiwdg->Init.Window)); /* Enable IWDG. LSI is turned on automaticaly */ __HAL_IWDG_START(hiwdg); /* Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers by writing 0x5555 in KR */ IWDG_ENABLE_WRITE_ACCESS(hiwdg); /* Write to IWDG registers the Prescaler & Reload values to work with */ hiwdg->Instance->PR = hiwdg->Init.Prescaler; hiwdg->Instance->RLR = hiwdg->Init.Reload; /* Check pending flag, if previous update not done, return timeout */ tickstart = HAL_GetTick(); /* Wait for register to be updated */ while(hiwdg->Instance->SR != RESET) { if((HAL_GetTick() - tickstart ) > HAL_IWDG_DEFAULT_TIMEOUT) { return HAL_TIMEOUT; } } /* If window parameter is different than current value, modify window register */ if(hiwdg->Instance->WINR != hiwdg->Init.Window) { /* Write to IWDG WINR the IWDG_Window value to compare with. In any case, even if window feature is disabled, Watchdog will be reloaded by writing windows register */ hiwdg->Instance->WINR = hiwdg->Init.Window; } else { /* Reload IWDG counter with value defined in the reload register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); } /* Return function status */ return HAL_OK; }
/** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ MX_IWDG_Init(); for (;;) { /* Fast blinking LED */ __HAL_IWDG_RELOAD_COUNTER(&hiwdg); LED_Toggle(); HAL_Delay(70); } /* USER CODE END 6 */ }
/** * @brief Start the IWDG. * @param hiwdg: pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Start(IWDG_HandleTypeDef *hiwdg) { uint32_t tickstart = 0; /* Process locked */ __HAL_LOCK(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_BUSY; /* Reload IWDG counter with value defined in the RLR register */ if ((hiwdg->Init.Window) == IWDG_WINDOW_DISABLE) { __HAL_IWDG_RELOAD_COUNTER(hiwdg); } /* Start the IWDG peripheral */ __HAL_IWDG_START(hiwdg); tickstart = HAL_GetTick(); /* Wait until PVU, RVU, WVU flag are RESET */ while( (__HAL_IWDG_GET_FLAG(hiwdg, IWDG_FLAG_PVU) != RESET) &&(__HAL_IWDG_GET_FLAG(hiwdg, IWDG_FLAG_RVU) != RESET) &&(__HAL_IWDG_GET_FLAG(hiwdg, IWDG_FLAG_WVU) != RESET) ) { if((HAL_GetTick() - tickstart ) > HAL_IWDG_DEFAULT_TIMEOUT) { /* Set IWDG state */ hiwdg->State = HAL_IWDG_STATE_TIMEOUT; /* Process unlocked */ __HAL_UNLOCK(hiwdg); return HAL_TIMEOUT; } } /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hiwdg); /* Return function status */ return HAL_OK; }
/** * @brief Initialize the IWDG according to the specified parameters in the * IWDG_InitTypeDef and start watchdog. Before exiting function, * watchdog is refreshed in order to have correct time base. * @param hiwdg pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) { uint32_t tickstart; /* Check the IWDG handle allocation */ if(hiwdg == NULL) { return HAL_ERROR; } /* Check the parameters */ assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance)); assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler)); assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload)); /* Enable IWDG. LSI is turned on automaticaly */ __HAL_IWDG_START(hiwdg); /* Enable write access to IWDG_PR, IWDG_RLR registers by writing 0x5555 in KR */ IWDG_ENABLE_WRITE_ACCESS(hiwdg); /* Write to IWDG registers the Prescaler & Reload values to work with */ hiwdg->Instance->PR = hiwdg->Init.Prescaler; hiwdg->Instance->RLR = hiwdg->Init.Reload; /* Check pending flag, if previous update not done, return timeout */ tickstart = HAL_GetTick(); /* Wait for register to be updated */ while(hiwdg->Instance->SR != RESET) { if((HAL_GetTick() - tickstart ) > HAL_IWDG_DEFAULT_TIMEOUT) { return HAL_TIMEOUT; } } /* Reload IWDG counter with value defined in the reload register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); /* Return function status */ return HAL_OK; }
/** * @brief Refresh the IWDG. * @param hiwdg: pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) { uint32_t tickstart = 0; /* Process Locked */ __HAL_LOCK(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_BUSY; tickstart = HAL_GetTick(); /* Wait until RVU flag is RESET */ while(__HAL_IWDG_GET_FLAG(hiwdg, IWDG_FLAG_RVU) != RESET) { if((HAL_GetTick() - tickstart ) > HAL_IWDG_DEFAULT_TIMEOUT) { /* Set IWDG state */ hiwdg->State = HAL_IWDG_STATE_TIMEOUT; /* Process unlocked */ __HAL_UNLOCK(hiwdg); return HAL_TIMEOUT; } } /* Reload IWDG counter with value defined in the reload register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hiwdg); /* Return function status */ return HAL_OK; }
/** * @brief Starts the IWDG. * @param hiwdg: pointer to a IWDG_HandleTypeDef structure that contains * the configuration information for the specified IWDG module. * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Start(IWDG_HandleTypeDef *hiwdg) { /* Process Locked */ __HAL_LOCK(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_BUSY; /* Start the IWDG peripheral */ __HAL_IWDG_START(hiwdg); /* Reload IWDG counter with value defined in the RLR register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hiwdg); /* Return function status */ return HAL_OK; }
/** * @brief Refreshes the IWDG. * @param hiwdg: IWDG handle * @retval HAL status */ HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) { /* Process Locked */ __HAL_LOCK(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_BUSY; /* Clear the RVU flag */ __HAL_IWDG_CLEAR_FLAG(hiwdg, IWDG_FLAG_RVU); /* Reload IWDG counter with value defined in the reload register */ __HAL_IWDG_RELOAD_COUNTER(hiwdg); /* Change IWDG peripheral state */ hiwdg->State = HAL_IWDG_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hiwdg); /* Return function status */ return HAL_OK; }