STM32F407 - 随机数发生器

来源:互联网 发布:linux oracle服务状态 编辑:程序博客网 时间:2024/05/29 14:40

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



随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器(RNG_LFSR)的种子,用于生成32位随机数。 

该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。 
RNG_LFSR 专用时钟(PLL48CLK)按恒定频率提供时钟信息,因此随机数质量与HCLK频率无关。 
当将大量种子引入 RNG_LFSR后,RNG_LFSR的内容会传入数据寄存器(RNG_DR) 

同时,系统会监视模拟种子和专用时钟 PLL48CLK状态位(RNG_SR寄存器中)指示何时在种子上出现异常序列,或指示何时PLL48CLK时钟频率过低。
检测到错误时生成中断。

寄存器
-- RNG_CR(控制寄存器) --
[3]IE:中断使能(检测到错误时生成的中断
[2]RNGEN:随机数发生器使能

-- RNG_SR(状态寄存器) --
[6]SEIS:种子错误中断状态
[5]CEIS:时钟错误中断状态
[2]SECS:种子错误当前状态
[1]CECS:时钟错误当前状态
[0]DRDY:数据就绪

-- RNG_DR(数据寄存器) --
[31~0]RNDATA:随机数据

库函数配置(最简机能)
目的:时钟使能,模块使能,产生随机数,不做错误判定和处理。

1)使能随机数发生器时钟。
使用随机数发生器,必须先使能其时钟。随机数发生器时钟来自PLL48CK,通过AHB2ENR寄存器使能。
这里通过调用 AHB2总线外设时钟的函数,使能 RNG时钟。
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);

2)使能随机数发生器。
通过 RNG_CR寄存器的 RNGEN[2] 设置为1,使能随机数发生器。

3)判断DRDY位,读取随机数值。
FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG); //返回数据是否就绪
uint32_t RNG_GetRandomNumber(void); //返回随机数




1 0
原创粉丝点击