洋桃电子STM32F407单片机入门教程笔记十三:RNG随机数发生器

  此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:第32集)RNG随机数发生器_哔哩哔哩_bilibili

        随机数功能可用于密码、验证码、随机码生成,在系统安全、身份验证、数据加密等应用中被广泛使用。

1.  RNG随机数发生器介绍

        随机数的生成有两种方式:伪随机数和真随机数。伪随机数是通过单片机的定时器或RTC数据生成随机数值的种子,然后再通过随机数算法把种子数值转换成一个可用的随机数,在C语言的stdlib.h库中包含着srand和rand函数可以配合产生伪随机数,伪随机数只是看似没有规律但实际上是有可被破解的算法,对安全性要求高的场合则需要采用真随机数方式。

        STM32F4系列内置了一个真随机数发生器,英文简写为RNG。由单片机内部的模拟电路产生不可预知的噪声信号,然后将噪声转换成随机数值,这样产生的随机数完全没有规律可寻,所以称为真随机数。

        从简介中可以看出RNG发生器是一个模拟噪声电路实现的随机数发生器,将无规律的模拟噪声转换成32位随机数存放在RNG专用的32位寄存器中,从21.2节中可以看出RNG的主要特性。

        从图中左上角是RNG_CR控制寄存器,用于设置RNG的开启、关闭和模式,图中右下角的模拟种子是模拟噪声电路,可以产生随机数的基础数值所以称为模拟种子,模拟种子产生的值送入LFSR进一步处理成32位数值存放到RNG_DR数据寄存器,同时将当前状态信息写入RNG_SR状态寄存器,当一个采集周期结束我们就可以从RNG_DR数据寄存器中读出一个32位随机数,当我们不再需要随机数时可通过RNG_CR控制寄存器来关闭RNG功能,这就是RNG功能的内部结构。但需注意在应用层面我们将使用HAL库函数对RNG进行开启、关闭和数据读取,不会涉及底层寄存器的操作。

2. RNG随机数CubeMX初始化

3. RNG随机数运行函数

        在main.c文件第75行创建一个用于存放随机数的32位变量,在主循环的第106行添加读取随机数函数HAL_RNG_GetRandomNumber,此函数的参数是RNG功能的句柄,返回值是32位随机数。所以将返回值赋值到变量a中,第107行将32位随机数发送到超级终端,第108行是延时一秒函数,即每秒中输出一次随机数。

4. 实验现象

程序运行后在超级终端软件上每秒输出一个32位随机数。

由于随机数寄存器是32位的,产生的随机数范围是0x00000000~0xFFFFFFFF,如果在项目开发中需要得到一个小范围的随机数,可以把得出的32位随机数用求余数的方式限制范围。

        比如要得到0~9之间的随机数值,可在第106行读出随机数后在第107行添加“a=a%10”运算即得到0~9范围的随机数。

        如果要得到20~29之间的随机数可在第107行添加“a=a%10+20”运算,按此方法可以得到任何范围的随机数。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值