什么是随机数?单片机计数器的用法随机数的方法(一)

​一、什么是随机数?

(1)随机数是概念

顾名思义,随机数是随机生成的一段数据。

随机数

比如我们在一堆红豆里抓一把红豆,手中红豆的个数就是一个随机数。

因为我们无法预测我们抓到了多少红豆,所以这个数据是随机的,无法预算,所以这样产生的数据称为随机数。

(2)使用随机数

随机数可以用来做一些随机事件,比如抽奖、掷骰子等。

同时,随机数也多用于简单的加密。通过一个随机生成的随机数,对一段需要加密的数据进行一定的数据公式运算,然后发送出去。接收方只需要知道接收到的数据的哪一部分是密钥随机数两个模拟信号如何同时输入到单片机,哪一部分是加密的。密文可以通过约定公式的逆运算进行解密,得到密文数据。

简单的数据加密

二、产生随机数的方法

(1)通过微控制器计数器

通过单片机计数器声明一个16位的变量CNT,放在主循环while(1),让它自己加两个模拟信号如何同时输入到单片机,比如

图片[1]-什么是随机数?单片机计数器的用法随机数的方法(一)-老王博客

当单片机运行到某个随机数时,比如某个按钮触发了某个功能,需要得到一个随机数作为加密随机码,此时自增变化的CNT变量,提取其尾数(CNT),则可以用作伪随机数。

这里可能会有一个疑问,为什么这个值可以作为随机数呢?原因如下:

1)裸机运行微控制器是单线程运行模式。在主循环while(1){}中,一个循环所需要的时间是根据每个循环执行的内容来确定的,是不确定的;

2)当我们按下按钮时,由于按下的时间点是不确定的,所以CNT变化多少也是不确定的;

3)由于单片机的频率很高,当我们触发的时候,CNT已经递增了几千个值,所以截取数据的时候,CNT的尾数也是不确定的。

因此,我们可以使用这种方法来生成我们想要的随机数。

(2)通过 ADC

使用ADC方法,采集芯片内部温度传感器的方法。得到一个伪随机数。

我们通过自己的测试可以知道,当单片机通过ADC采集到这个温度波形的模拟信号时,数值尾数的变化是非常随机的。温度传感器,当受不同时间的温度影响时,数值尾数的变化也是不确定的。

所以。我们可以通过这种方式生成一个伪随机数。

ADC 采集温度

(3)通过单片机自带的硬件随机数发生器

一些微控制器集成了专有的硬件随机数发生器。通过获取生成器的随机值,可以得到一个理想的随机数。

例如,STM32F4 带有一个硬件随机数发生器 (RNG)。RNG 处理器是一个基于连续模拟噪声的随机数发生器,在主机读取时提供一个 32 位的随机数。

RNG发生器示意图

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论