📖 第 23 章:硬件随机数实验(RNG)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 23
🗨️ 「不是所有随机数都真随机:硬件 RNG 才是。」
这一章在干嘛? 硬件随机数实验:RNG 外设、内置模拟电路熵源、种子与随机数。学会后密码学、安全通信更可靠。
23.1 随机数发生器简介23.2 硬件设计23.3 程序设计23.4 下载验证

23.1 随机数发生器简介

F407 内置 RNG(Random Number Generator)硬件外设:

原书图 23.1.1:RNG 框图
原书图 23.1.1:RNG 框图

项目RNG
随机源模拟噪声
速度~16 Mbps
是否需要种子否(真随机)
典型应用密码学密钥、协议随机数

RNG 是真随机数,而 srand(time()) 是伪随机(依赖种子)。

23.2 硬件设计

无外部电路,纯片内外设。

23.3 程序设计

23.3.1 CubeMX 配置

23.3.2 关键代码

HAL_RNG_Init(&hrng);
uint32_t r;
HAL_RNG_GenerateRandomNumber(&hrng, &r);
printf("Random: 0x%08X\n", r);

异步模式:

HAL_RNG_GenerateRandomNumber_IT(&hrng);

void HAL_RNG_ReadyCallback(RNG_HandleTypeDef *hrng) {
    uint32_t r;
    HAL_RNG_GenerateRandomNumber(hrng, &r);
    printf("Random: 0x%08X\n", r);
}

原书图 23.3.2.1:RNG 产生随机数流程图
原书图 23.3.2.1:RNG 产生随机数流程图

RNG 时钟来自 HSI(16 MHz),不是 HSE。所以即便主时钟来自 HSE,RNG 仍能工作(独立时钟域)。

23.4 下载验证

串口每 200ms 打印一个随机数(应该是 32 位无规律值)。

原书图 23.4.1:串口打印随机数
原书图 23.4.1:串口打印随机数

🧠 小测验
RNG 产生的随机数是真随机还是伪随机?
真随机(基于模拟噪声)。
RNG 需要种子吗?
不需要,上电即用。
`HAL_RNG_GenerateRandomNumber` 与 IT 版本区别?
IT 异步不阻塞,轮询会等数据 ready。
← 上一篇🏠 顶层目录下一篇 →