打印

GD32F407系列

[复制链接]
1005|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
tyw| | 2022-6-21 13:47 | 只看该作者
本帖最后由 tyw 于 2022-6-21 13:49 编辑

STM32F407 - 随机数发生器


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); //返回随机数



original.png (1.87 KB )

original.png

newCurrentTime2.png (374 Bytes )

newCurrentTime2.png

articleReadEyes2.png (578 Bytes )

articleReadEyes2.png

tobarCollect2.png (904 Bytes )

tobarCollect2.png

resize,m_fixed,h_64,w_64.jpg (7.54 KB )

resize,m_fixed,h_64,w_64.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝