这次的NUCLEO-L476RG学习笔记,为大家带来的是硬件随机数。 STM32F4系列单片机自带了硬件随机数发生器( RNG ), RNG 处理器是一个以连续模拟噪声为基础的 随机数发生器,在主读时提供一个 32 位的随机数。 STM32F4 的随机数发生器构图如图1: STM32F4的随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR)的种子,用于生成 32 位随机数。 该模拟电路由几个环形振荡器组成,的输出进行异或运算以产生种子。 RNG_LF 由专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将大量种子引入 RNG_LFSR 后, RNG_LFSR 的内容会传入数据寄存器 (RNG_DR) 。同时,系统会监视模拟种子和专用时钟 PLL48CLK,当种子上出现异常序列,或 PLL48CLK 时钟频率过低,可以由 RNG_SR 寄存器的对应位读取到,如果设置了中断则在检测到错误时,还可以产生中断。 随机数发生器操作步骤如下: 1.使能随机数发生器时钟 随机数发生器时钟来自PLL48CK,通过AHB2ENR寄存器使能。 2.势能随机数发生器 通过RNG_CR寄存器的最低位设置为1,使能随机数发生器。 3.判断DRDY位,读取随机数值 每次读取随机数之前,先判断RNG_SR寄存器的DRDY位,如果该位为1.则可以读取RNG_DR得到的随机数。 实现随机数的具体函数(库函数版本):
以上函数可以成功产生随机数,别忘了添加库函数!! 当然,主函数因人而异,有的朋友喜欢串口打印,有的喜欢显示屏输出,在这里我就不贴出来了。 以后有机会还会和大家分享学习成果!! |
|
多谢分享,学习了 |