109 #ifdef HAL_RNG_MODULE_ENABLED
118 #define RNG_TIMEOUT_VALUE 2U
163 assert_param(IS_RNG_ALL_INSTANCE(hrng->Instance));
165 #if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
169 hrng->Lock = HAL_UNLOCKED;
174 if (hrng->MspInitCallback == NULL)
180 hrng->MspInitCallback(hrng);
186 hrng->Lock = HAL_UNLOCKED;
198 __HAL_RNG_ENABLE(hrng);
204 hrng->ErrorCode = HAL_RNG_ERROR_NONE;
225 CLEAR_BIT(hrng->Instance->CR, RNG_CR_IE | RNG_CR_RNGEN);
228 CLEAR_BIT(hrng->Instance->SR, RNG_SR_CEIS | RNG_SR_SEIS);
230 #if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
231 if (hrng->MspDeInitCallback == NULL)
237 hrng->MspDeInitCallback(hrng);
247 hrng->ErrorCode = HAL_RNG_ERROR_NONE;
286 #if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
302 HAL_StatusTypeDef status = HAL_OK;
304 if (pCallback == NULL)
307 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
316 hrng->ErrorCallback = pCallback;
320 hrng->MspInitCallback = pCallback;
324 hrng->MspDeInitCallback = pCallback;
329 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
340 hrng->MspInitCallback = pCallback;
344 hrng->MspDeInitCallback = pCallback;
349 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
358 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
379 HAL_StatusTypeDef status = HAL_OK;
400 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
420 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
429 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
446 HAL_StatusTypeDef status = HAL_OK;
448 if (pCallback == NULL)
451 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
459 hrng->ReadyDataCallback = pCallback;
464 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
482 HAL_StatusTypeDef status = HAL_OK;
494 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
539 HAL_StatusTypeDef status = HAL_OK;
554 while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_DRDY) == RESET)
556 if ((
HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
559 if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_DRDY) == RESET)
562 hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
571 hrng->RandomNumber = hrng->Instance->DR;
572 *random32bit = hrng->RandomNumber;
578 hrng->ErrorCode = HAL_RNG_ERROR_BUSY;
596 HAL_StatusTypeDef status = HAL_OK;
608 __HAL_RNG_ENABLE_IT(hrng);
615 hrng->ErrorCode = HAL_RNG_ERROR_BUSY;
633 return hrng->RandomNumber;
650 uint32_t random32bit = 0U;
659 random32bit = hrng->Instance->DR;
662 __HAL_RNG_ENABLE_IT(hrng);
691 uint32_t rngclockerror = 0U;
692 uint32_t itflag = hrng->Instance->SR;
695 if ((itflag & RNG_IT_CEI) == RNG_IT_CEI)
698 hrng->ErrorCode = HAL_RNG_ERROR_CLOCK;
701 else if ((itflag & RNG_IT_SEI) == RNG_IT_SEI)
704 hrng->ErrorCode = HAL_RNG_ERROR_SEED;
712 if (rngclockerror == 1U)
717 #if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
719 hrng->ErrorCallback(hrng);
726 __HAL_RNG_CLEAR_IT(hrng, RNG_IT_CEI | RNG_IT_SEI);
732 if ((itflag & RNG_IT_DRDY) == RNG_IT_DRDY)
735 __HAL_RNG_DISABLE_IT(hrng);
738 hrng->RandomNumber = hrng->Instance->DR;
747 #if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
749 hrng->ReadyDataCallback(hrng, hrng->RandomNumber);
766 return (hrng->RandomNumber);
839 return hrng->ErrorCode;
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_StatusTypeDef HAL_RNG_UnRegisterReadyDataCallback(RNG_HandleTypeDef *hrng)
UnRegister the Data Ready RNG Callback Data Ready RNG Callback is redirected to the weak HAL_RNG_Read...
HAL_StatusTypeDef HAL_RNG_RegisterCallback(RNG_HandleTypeDef *hrng, HAL_RNG_CallbackIDTypeDef CallbackID, pRNG_CallbackTypeDef pCallback)
Register a User RNG Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_RNG_UnRegisterCallback(RNG_HandleTypeDef *hrng, HAL_RNG_CallbackIDTypeDef CallbackID)
Unregister an RNG Callback RNG callback is redirected to the weak predefined callback.
void HAL_RNG_MspDeInit(RNG_HandleTypeDef *hrng)
DeInitializes the RNG MSP.
HAL_StatusTypeDef HAL_RNG_DeInit(RNG_HandleTypeDef *hrng)
DeInitializes the RNG peripheral.
HAL_StatusTypeDef HAL_RNG_RegisterReadyDataCallback(RNG_HandleTypeDef *hrng, pRNG_ReadyDataCallbackTypeDef pCallback)
Register Data Ready RNG Callback To be used instead of the weak HAL_RNG_ReadyDataCallback() predefine...
HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
Initializes the RNG peripheral and creates the associated handle.
void HAL_RNG_MspInit(RNG_HandleTypeDef *hrng)
Initializes the RNG MSP.
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber_IT(RNG_HandleTypeDef *hrng)
Generates a 32-bit random number in interrupt mode.
void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef *hrng, uint32_t random32bit)
Data Ready callback in non-blocking mode.
void HAL_RNG_IRQHandler(RNG_HandleTypeDef *hrng)
Handles RNG interrupt request.
void HAL_RNG_ErrorCallback(RNG_HandleTypeDef *hrng)
RNG error callbacks.
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit)
Generates a 32-bit random number.
uint32_t HAL_RNG_ReadLastRandomNumber(const RNG_HandleTypeDef *hrng)
Read latest generated random number.
uint32_t HAL_RNG_GetRandomNumber(RNG_HandleTypeDef *hrng)
Returns generated random number in polling mode (Obsolete) Use HAL_RNG_GenerateRandomNumber() API ins...
uint32_t HAL_RNG_GetRandomNumber_IT(RNG_HandleTypeDef *hrng)
Returns a 32-bit random number with interrupt enabled (Obsolete), Use HAL_RNG_GenerateRandomNumber_IT...
uint32_t HAL_RNG_GetError(const RNG_HandleTypeDef *hrng)
Return the RNG handle error code.
HAL_RNG_StateTypeDef HAL_RNG_GetState(const RNG_HandleTypeDef *hrng)
Returns the RNG state.
HAL_RNG_CallbackIDTypeDef
HAL RNG Callback ID enumeration definition.
void(* pRNG_ReadyDataCallbackTypeDef)(RNG_HandleTypeDef *hrng, uint32_t random32bit)
void(* pRNG_CallbackTypeDef)(RNG_HandleTypeDef *hrng)
HAL RNG Callback pointer definition.
@ HAL_RNG_MSPDEINIT_CB_ID
This file contains all the functions prototypes for the HAL module driver.