STM32F407ZG 随机数发生器RNG

STM32F407ZG随机数生成
本文介绍STM32F407ZG开发板上的硬件随机数发生器工作原理及其寄存器配置。通过实验演示如何使用随机数发生器生成32位随机数,并在串口显示。

硬件随机数发生器

RNG处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。

  • 提供由模拟量发生器产生的 32 位随机数
  • 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期
  • 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)
  • 可被禁止以降低功耗

原理

原理图

LFSR寄存器的原理介绍:详解线性反馈移位寄存器(LFSR)——引用知乎:come back

随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR) 的种子, 用于生成 32 位随机数。
该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。RNG_LFSR由专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将大量种子引入RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR)。
同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR 寄存器中)指示何时在种子上出现异常序列,或指示何时 PLL48CLK 时钟频率过低。检测到错误时生成中断。

寄存器

RNG 与控制寄存器、数据寄存器和状态寄存器相关联。必须通过字(32 位)进行访问

RNG 控制寄存器 (RNG_CR)

CR

仅使用2、3位,其他位保留,必须保持复位值。

CR

RNG 状态寄存器 (RNG_SR)

SR
SR
SR

RNG 数据寄存器 (RNG_DR)

RNG_DR 寄存器是只读寄存器,在读取时提供 32 位随机数值。读取后,此寄存器在最多 40 个 PLL48CLK 时钟周期后,提供新的随机数值。在读取 RNDATA 值之前,软件必须检查 DRDY 位是否已置 1。

实验

使用RNG生成随机数,通过串口显示。
此实验仅获取随机数,暂不对随机数产生错误时的中断做出处理。

使用及配置步骤

  1. 使能RNG时钟。该时钟来自PLL48CK。
  2. 使能RNG,即CR中的RNGEN位置1。
  3. 根据SR中的DRDY标志位可以判断是否能读取随机数。

代码

串口的作用只做显示,无需从PC发送数据,因此也无需配置中断。此处我直接使用了我另一篇文章 串口通信+固定首尾帧传输数据 中的串口配置源文件和头文件,不再贴出。

rng.c

/*********************************
    函数名:rng_init
    简介:初始化RNG
    参数:无
    返回:0 --初始化成功
         1 --初始化超时,失败
**********************************/
uint8_t rng_init(void)
{
   
   
    uint16_t retry = 0;
    
    //使能RNG时钟
    RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
    RNG_Cmd(ENABLE);//使能RNG
    
    while(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值