硬件随机数发生器实验

一.参考资料

  • 探索者STM32F4开发板

     《STM32F4开发指南-库函数版本》-第21章  硬件随机数发生器实验
  • STM32F4xx官方资料:
    《STM32F4中文参考手册 》-第21章 随机数发生器(RNG)

二.随机数发生器

1.STM32F4随机数发生器

  1. STM32F4自带了硬件随机数发生器(RNG),RNG处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个32位的随机数。
  2. 两个连续的随机数的间隔为40个PLL48CLK时钟信号周期。
  3. 通过监控RNG熵来标识异常行为。
  4. 可以禁止来降低功耗。

2.随机数发生器框图

随机数发生器框图

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

3.RNG寄存器

  1. 控制寄存器RNG_CR
  2. 状态寄存器RNG_SR
  3. 数据寄存器RNG_DR

4.控制寄存器RNG_CR

控制寄存器RNG_CR

5.状态寄存器RNG_SR

状态寄存器RNG_SR

6.数据寄存器RNG_DR

数据寄存器RNG_DR

7.RNG库函数

stm32f4xx_rng.h/stm32f4xx_rng.c
void RNG_DeInit(void);//复位
void RNG_Cmd(FunctionalState NewState);//使能RNG
uint32_t RNG_GetRandomNumber(void);//获取随机数

void RNG_ITConfig(FunctionalState NewState);
FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG);
void RNG_ClearFlag(uint8_t RNG_FLAG);
ITStatus RNG_GetITStatus(uint8_t RNG_IT);
void RNG_ClearITPendingBit(uint8_t RNG_IT);
最后修改:2020 年 02 月 26 日 06 : 48 PM
如果觉得我的文章对你有用,请随意赞赏