你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 1997|回复: 2

[STM32L476] 【NUCLEO-L476RG开发】硬件随机数

[复制链接]

1

主题

233

回帖

0

蝴蝶豆

中级会员

最后登录
2019-1-4
发表于 2015-11-18 10:56:56 | 显示全部楼层 |阅读模式
        这次的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得到的随机数。

实现随机数的具体函数(库函数版本):

  1. u8 RNG_Init(void)//函数功能:初始化RNG
  2. {
  3.         u16 retry=0;
  4.         RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);//开启RNG时钟,来自PLL48CLK
  5.         RNG_Cmd(ENABLE);        //使能RNG
  6.         while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET&&retry<10000)        //等待随机数就绪
  7.         {
  8.                 retry++;
  9.                 delay_us(100);
  10.         }
  11.         if(retry>=10000)return 1;//随机数产生器工作不正常
  12.         return 0;
  13. }

  14. u32 RNG_Get_RandomNum(void)//函数功能:得到随机数。返回值:获取到的随机数
  15. {         
  16.         while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET);        //等待随机数就绪  
  17.         return RNG_GetRandomNumber();        
  18. }

  19. int RNG_Get_RandomRange(int min,int max)//函数功能:生成[min,max]范围的随机数
  20. {
  21.    return RNG_Get_RandomNum()%(max-min+1) +min;
  22. }
复制代码


以上函数可以成功产生随机数,别忘了添加库函数!!
当然,主函数因人而异,有的朋友喜欢串口打印,有的喜欢显示屏输出,在这里我就不贴出来了。
以后有机会还会和大家分享学习成果!!



QQ截图20151118103429.png
<
回复

使用道具 举报

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
发表于 2015-11-18 11:59:54 | 显示全部楼层
谢谢分享.png
回复 支持 反对

使用道具 举报

13

主题

106

回帖

0

蝴蝶豆

中级会员

最后登录
2018-4-5
发表于 2015-11-18 12:07:21 | 显示全部楼层
多谢分享,学习了
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版