STM32 真随机数RNG使用
本文介绍了如何在STM32中使用硬件随机数生成器(RNG)。首先通过STM32CubeMX启用RNG功能,自动生成初始化代码。然后演示了两种获取随机数的方式:轮询模式和中断模式。轮询方式需要检查返回值,中断方式则通过回调函数获取数据。注意两个随机数之间需要间隔40个PLL48CLK时钟周期。最后展示了实际运行时的随机数输出结果,验证了每次复位都能生成不同的随机数。代码示例清晰展示了RNG的配置和使
·
在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
更多推荐



所有评论(0)