在STM32CubeMX中使能RNG

在这里插入图片描述

初始化RNG

STM32CubeMX生成的代码中会自动初始化RNG

void MX_RNG_Init(void)
{
  hrng.Instance = RNG;
  if (HAL_RNG_Init(&hrng) != HAL_OK)
  {
    Error_Handler();
  }
}

获取随机数(轮询)

这里一定要判断返回值

    uint32_t random;
    uint32_t ret = HAL_RNG_GenerateRandomNumber(&hrng, &random);
    if (ret != 0)
    {
        printf("RNG Error: %d\r\n", ret);
    }
    printf("Random Number: %08X\r\n", random);

获取随机数(中断)

两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期,必要时可考虑使用中断模式

HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef *hrng, uint32_t random32bit)
{
    printf("Random Number(INT): %08X\r\n", random32bit);
}

HAL_RNG_GenerateRandomNumber_IT(&hrng);

输出

复位多次输出均不一样

Random Number: 2775299953
Random Number(INT): 1713358364
Random Number: 496E3DF3
Random Number(INT): 09EF69AF
Random Number: 6CA5232A
Random Number(INT): C47C26D8
Random Number: 2AF9B507
Random Number(INT): 84A97CBC
Random Number: E2D3EE55
Random Number(INT): 9854BABC
Random Number: 5AFCCC29
Random Number(INT): 18D9F813
Random Number: 7B73C357
Random Number(INT): 5B608E78
Random Number: 7AE9DA4F
Random Number(INT): BB06EF96
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐