芯片:STM32F29IIGT6 阿波罗开发板
1.配置时钟
2.HAL库配置
3.代码生成
生成的rng文件
#include "rng.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
RNG_HandleTypeDef hrng;
/* RNG init function */
void MX_RNG_Init(void)
{
/* USER CODE BEGIN RNG_Init 0 */
/* USER CODE END RNG_Init 0 */
/* USER CODE BEGIN RNG_Init 1 */
/* USER CODE END RNG_Init 1 */
hrng.Instance = RNG;
if (HAL_RNG_Init(&hrng) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RNG_Init 2 */
/* USER CODE END RNG_Init 2 */
}
void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)
{
if(rngHandle->Instance==RNG)
{
/* USER CODE BEGIN RNG_MspInit 0 */
/* USER CODE END RNG_MspInit 0 */
/* RNG clock enable */
__HAL_RCC_RNG_CLK_ENABLE();
/* RNG interrupt Init */
HAL_NVIC_SetPriority(HASH_RNG_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(HASH_RNG_IRQn);
/* USER CODE BEGIN RNG_MspInit 1 */
/* USER CODE END RNG_MspInit 1 */
}
}
void HAL_RNG_MspDeInit(RNG_HandleTypeDef* rngHandle)
{
if(rngHandle->Instance==RNG)
{
/* USER CODE BEGIN RNG_MspDeInit 0 */
/* USER CODE END RNG_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_RNG_CLK_DISABLE();
/* RNG interrupt Deinit */
HAL_NVIC_DisableIRQ(HASH_RNG_IRQn);
/* USER CODE BEGIN RNG_MspDeInit 1 */
/* USER CODE END RNG_MspDeInit 1 */
}
}
生成的 中断函数
/**
* @brief This function handles HASH and RNG global interrupts.
*/
void HASH_RNG_IRQHandler(void)
{
/* USER CODE BEGIN HASH_RNG_IRQn 0 */
/* USER CODE END HASH_RNG_IRQn 0 */
HAL_RNG_IRQHandler(&hrng);
/* USER CODE BEGIN HASH_RNG_IRQn 1 */
/* USER CODE END HASH_RNG_IRQn 1 */
}
点击 HAL_RNG_IRQHandler(&hrng);
4.使用方法
方法1:直接使用
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit);
方法2:中断使用
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber_IT(RNG_HandleTypeDef *hrng);