极客秀
搜索

STM32中的随机数发生器(RNG)以STM32F407为例获取随机数

随机数是我们编程中非常常用的一项技术,在我们的生活中应用场景十分广泛,例如密码学中对密码的加密,在模拟信号中用来模拟随机事件的出现。
例如我们在之前的使用NanoEdge中测试的数据模拟正弦波的时候就出现了数据太过于精确而不像一个模拟信号的样子。
因此使用随机数可以在模拟仿真领域中起到非常重要的作用。

在STM32参考手册(F4系列)中提到了STM32中具有一个随机数发生器(RNG)读取其可以获得一个32位的随机数。

随机数发生器RNG采用模拟电路实现,同样具备着异常检测的功能。接着手册的后续部分讲述了如何操作寄存器中操作实现RNG,但是由于我们使用HAL库编程代码,因此我们直接跳到HAL库的部分。

在CubeMX中我们需要使能RNG功能。 之后创建我们的工程。
我们可以使用 HAL_RNG_GetRandomNumber来获取随机数


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    printf("%ldrn",HAL_RNG_GetRandomNumber(&hrng));    HAL_Delay(1000);  }

需要注意的是,这里生成的随机数是32位的,因此我们可以利用一些简单的计算来获取我们需要的随机数。


    uint32_t RnNum = HAL_RNG_GetRandomNumber(&hrng);    printf("%ldrn",RnNum%10);    HAL_Delay(1000);

我们对其进行取余,即可获得0~9之间的随机数。

初次之外,我们可以利用这个随机数来模拟噪声信号。


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    uint32_t RnNum = HAL_RNG_GetRandomNumber(&hrng);    static float t = 0;    float s = sin(t)+RnNum%10*0.05;    printf("A:%.3frn",s);    t+=0.01;          }

我们在原始信号之上添加一个噪声信号,这个噪声信号的产生就由我们的随机数发生器产生。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容