STM32 如何生成随机数

目录

一、引言

二、STM32 随机数发生器概述

三、工作原理

1.噪声源

2.线性反馈移位寄存器(LFSR)

3.数据寄存器(RNG_DR)

4.监控和检测电路:

5.控制和状态寄存器

6.生成流程

四、使用方法

1.使能随机数发生器

2.读取随机数 

3.错误处理

五、注意事项

1.随机数的质量

2.安全性

3.性能考虑

六、总结


一、引言

        在嵌入式系统开发中,随机数的生成常常是一个重要的需求。无论是用于加密、模拟、游戏还是其他需要不确定性的应用场景,可靠的随机数生成器都是必不可少的。STM32 系列微控制器提供了内置的随机数发生器(RNG),本文将详细介绍 STM32 随机数发生器的工作原理、使用方法以及一些注意事项。

二、STM32 随机数发生器概述

STM32 的随机数发生器是基于硬件的真随机数生成器,它利用了物理随机源来产生随机数。这个物理随机源通常是一个基于热噪声或其他物理现象的电路,能够产生高度随机的数字序列。

随机数发生器的主要特点包括:

  1. 真随机数生成:与软件生成的伪随机数不同,STM32 的随机数发生器生成的是真正的随机数,具有更高的安全性和不可预测性。
  2. 高速生成:能够快速生成随机数,满足实时应用的需求。
  3. 内置硬件:不需要外部设备或软件库的支持,直接在微控制器内部生成随机数。

三、工作原理

 

1.噪声源

  • 环形振荡器:这是产生随机数种子的关键部分。多个环形振荡器被集成在电路中,每个环形振荡器都会产生一定频率的振荡信号。由于制造工艺的微小差异以及电路中的各种随机因素,这些环形振荡器的输出频率和相位都存在一定的随机性。这些振荡器的输出信号被组合在一起,通常是通过异或运算等方式,产生一个初始的随机种子信号。这种基于物理现象产生的随机信号具有真正的随机性,是生成高质量随机数的基础。

2.线性反馈移位寄存器(LFSR)

  • 种子处理:从环形振荡器输出的随机种子信号被馈入到线性反馈移位寄存器中。LFSR 是一种特殊的电路结构,它可以对输入的种子信号进行处理和变换。通过特定的反馈逻辑和移位操作,LFSR 能够将初始的随机种子扩展和变换为更复杂的随机序列。这样可以增加随机数的复杂性和随机性,使其更难以被预测。
  • 时钟控制:LFSR 由专用时钟(PLL48CLK)按恒定频率提供时钟信息。这意味着随机数的生成过程是在一个稳定的时钟控制下进行的,保证了随机数生成的稳定性和可靠性。同时,由于随机数的生成与系统的主时钟(HCLK)频率无关,因此不受系统其他部分的时钟干扰,能够独立地生成高质量的随机数。

3.数据寄存器(RNG_DR)

随机数存储:经过 LFSR 处理后的随机数会被传送到数据寄存器(RNG_DR)中进行存储。当程序需要获取随机数时,就可以从这个数据寄存器中读取到生成的 32 位随机数值。数据寄存器起到了暂时存储随机数的作用,以便后续的程序使用。

4.监控和检测电路

  • 时钟监测:系统会监视专用时钟 PLL48CLK 的状态。如果时钟频率过低,可能会影响随机数的生成质量,甚至导致随机数生成异常。通过对时钟的监测,可以及时发现这种异常情况,并在必要时采取相应的措施,例如触发中断或设置相应的状态标志。
  • 种子异常检测:同时,电路还会对输入到 LFSR 的模拟种子信号进行监测。如果种子信号出现异常序列,例如连续出现相同或有规律的信号,这可能意味着随机数生成过程中出现了问题。检测到这种异常情况后,系统也会设置相应的状态标志或触发中断,以便程序进行处理。

5.控制和状态寄存器

  • 控制寄存器(RNG_CR):用于控制随机数发生器的启用和中断的使能等功能。通过设置控制寄存器的相关位,可以开启或关闭随机数发生器,以及控制是否允许中断的产生。这为程序对随机数发生器的操作提供了灵活的控制手段。
  • 状态寄存器(RNG_SR):显示随机数发生器当前的一些状态信息,例如随机数是否准备就绪(通过 DRDY 位表示)、是否出现时钟异常或种子异常等。程序可以通过读取状态寄存器的相关位来了解随机数发生器的工作状态,以便进行相应的操作。

6.生成流程

STM32 的随机数发生器通过以下步骤生成随机数:

  1. 物理随机源产生随机噪声信号。
  2. 随机噪声信号经过放大、滤波等处理后,被转换为数字信号。
  3. 数字信号经过一系列的算法处理,生成最终的随机数。

四、使用方法

1.使能随机数发生器

  • 在使用随机数发生器之前,需要先使能它。可以通过设置 RCC(Reset and Clock Control)寄存器中的相应位来实现。
  • 例如,在使用 STM32F4 系列微控制器时,可以使用以下代码使能随机数发生器:
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);

2.读取随机数 

  • 一旦随机数发生器被使能,就可以通过读取 RNG_DR(Random Number Generator Data Register)寄存器来获取随机数。
  • 以下是一个读取随机数的示例代码:
uint32_t randomNumber;
while (RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);
randomNumber = RNG_GetRandomNumber();
  • 在上述代码中,首先等待随机数发生器准备好新的随机数,然后通过读取 RNG_DR 寄存器获取随机数。

3.错误处理

  • 在使用随机数发生器时,可能会出现一些错误情况,例如随机数发生器未准备好、时钟错误等。
  • 可以通过检查 RNG_SR(Random Number Generator Status Register)寄存器中的相应标志位来判断是否发生了错误,并采取相应的处理措施。

五、注意事项

1.随机数的质量

  • 虽然 STM32 的随机数发生器生成的是真随机数,但随机数的质量仍然可能受到一些因素的影响,例如环境温度、电源噪声等。
  • 在对随机数质量要求较高的应用中,可以考虑对生成的随机数进行进一步的处理,例如使用加密算法进行加密或进行统计测试

2.安全性

  • 随机数在加密和安全应用中起着关键作用。因此,在使用随机数发生器时,需要确保随机数的安全性,避免被攻击者预测或篡改。
  • 可以采取一些措施来提高随机数的安全性,例如使用硬件加密模块、定期更新随机数种子等。

3.性能考虑

随机数发生器的生成速度可能会影响系统的性能。在对性能要求较高的应用中,可以考虑使用多个随机数发生器或采用其他随机数生成方法来提高生成速度。

六、总结

        STM32 的随机数发生器是一个强大的工具,可以为嵌入式系统提供可靠的随机数。通过了解其工作原理和使用方法,开发人员可以在自己的项目中充分利用这个功能,实现更加安全和可靠的应用。同时,在使用随机数发生器时,需要注意随机数的质量、安全性和性能等方面的问题,以确保系统的稳定性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/878826.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记---二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: • 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值。 • 若它的右子树不为空,则右子树上所有结点的值都大于等于…

数据结构—双向链表

结构 带头链表里的头结点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位结点不存储任何有效元素&#xff0c;只是站在这里“放哨 的” 实现双向链表 List.h #pragma once#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool…

“RISCV+AI”

概述 设计方案 主要有两种设计方案。 RISCV核ASIC RISCV核是标准的基于RISCV指令集的CPU设计&#xff0c;ASIC部分通常是基于RISCV自带的向量扩展指令集构建的向量处理器&#xff0c;或是自定义的矩阵计算单元。 根据CPUAI ASIC部件的接口可以分为紧耦合和松耦合的设计1。 …

基于python+django+vue的学生管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

【Python笔记】PyCharm大模型项目环境配置

一、PyCharm创建新项目 二、更新pip版本 ...>python.exe -m pip install --upgrade pip 三、生成所需requirements配置文件 ...>pip freeze > requirements.txt 四、安装所需组件requirements.txt ...>pip install -r requirements.txt

【Kubernetes】linux centos安装部署Kubernetes集群

【Kubernetes】centos安装Kubernetes集群 1、环境准备 系统centos7 配置yum源参考文章 Centos系统换yum源 yum -y update 步骤1-3是所有主机都要配置&#xff0c;主机名和hosts配置完后可以使用工具命令同步 1.1 主机 一主二从 主机名ipk8smaster192.168.59.148k8snode11…

Node.js 安装及项目实践

node.js安装 node安装&#xff0c;选择版本 一直next&#xff0c;或者自己修改路径&#xff0c;添加两个包 选择自己的安装的node的路径&#xff0c;cmd或者winr cmd 显示node与npm的版本号 node -vnpm -v可以跟着这个博客将node安装 2024最新版Node.js下载安装及环境配…

ZW3D二次开发_UI_非模板表单_设置表单显示位置

1.ZW3D弹出非模板表单时可以设置弹出位置&#xff08;居中、左下角、右上角等&#xff09; 2.假设已创建好非模板表单 3.在Form属性中添加form_pos属性 4.输入值 base,CTR,0.0 &#xff0c;如下图 也可以设置为其他值显示在不同的位置&#xff0c;如下 5.重新编译&#xff0c;…

新升级|优化航拍/倾斜模型好消息,支持处理多套贴图模型!

【天元轻量化软件】一直在不断地追求进步和完善&#xff0c;以满足更多用户的各种需求。 电脑登录天元官网免费体验&#xff1a;天元轻量化软件官网 本次我们对“智能PBR”功能进行了更新。更新后的“智能PBR”支持带多套贴图的模型进行使用。 本轮更新后&#xff0c;主要受益…

防火墙--NAT技术,基于源NAT,NAT服务器,双向NAT

文章目录 防火墙--NAT技术一、基于源NAT**方式**&#xff1a;NAT No-PATNAPT出接口地址方式Smart NAT三元组 NAT 二、基于服务器的NAT多出口场景下的NAT Server 三、双向NAT 防火墙–NAT技术 基于源NAT&#xff1a;用于将内部网络的私有IP地址转换为公共IP地址&#xff0c;以便…

51单片机应用开发---数码管的控制应用

实现目标 1、掌握数码管结构、驱动原理及应用&#xff1b; 2、掌握数码管段码表推导&#xff1b; 3、会编程让开发板8个数码管动态显示。 一、什么是数码管&#xff1f; 1.数码管定义 数码管&#xff0c;也称为LED数码管&#xff0c;基本单元是发光二极管(LED)。分为七段数…

【机器学习】--- 自监督学习

1. 引言 机器学习近年来的发展迅猛&#xff0c;许多领域都在不断产生新的突破。在监督学习和无监督学习之外&#xff0c;自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;作为一种新兴的学习范式&#xff0c;逐渐成为机器学习研究的热门话题之一。自监督学习…

某思CMS V10存在SQL注入漏洞

Fofa: product"魅思-视频管理系统" 框架:ThinkPHP 5,6 1 漏洞分析&复现 位于 /controller/Api.php 控制器中的getOrderStatus 方法POST传入&#xff0c;然后直接拼接了 orderSn 变量到 where 查询中&#xff0c;导致漏洞产生. /** * 查询订单支付状态 */ pub…

服务器——装新的CUDA版本的方法

服务器——装新的CUDA版本 一、进入 CUDA 版本列表二、根据自己服务器&#xff0c;选择对应的版本和配置三、使用管理员用户&#xff0c;运行下载和安装命令四、查看显卡驱动是否安装4.1 若安装了显卡驱动4.2 若显卡驱动没安装 参考文章 一、进入 CUDA 版本列表 CUDA Toolkit …

sqlgun靶场攻略

步骤一&#xff1a;打开页面 步骤二&#xff1a;测试回显点 -1union select 1,2,3# 步骤三&#xff1a;查看数据库名 -1union select 1,2,database()# 步骤四&#xff1a;查看表名 -1union select 1,2,group_concat(table_name) from information_schema.tables where table…

Double Write

优质博文&#xff1a;IT-BLOG-CN 一、存在的问题 为什么需要Double Write&#xff1a; InnoDB的PageSize是16kb&#xff0c;其数据校验也是针对这16KB来计算的&#xff0c;将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统&#xff0c;写文件是以4KB作为基…

ASR(自动语音识别)识别文本效果的打分总结

ASR(自动语音识别)识别文本效果的打分总结 1. 词错误率(WER, Word Error Rate)2. 字正确率(W.Corr, Word Correct)3. 编辑距离(Edit Distance)4. 特定错误率5. 句子错误率(SER, Sentence Error Rate)6. 基于模型的评估方法对于ASR(自动语音识别)识别文本效果的打分…

SHT30温湿度传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理 三、程序设计 main.c文件 sht30.h文件 sht30.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 SHT30是一种常见的温湿度传感器&#xff0c;是一款完全校准的线性化的温湿度数字传感器&#xff0…

C++初阶:STL详解(三)——vector的介绍和使用

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们刚刚了解了strin…

Jetpack Compose Side Effects in Details 副作用的详细信息

What is Side Effect’s? 副作用是什么&#xff1f; Side Effects is a change in the state of the application that occurs outside the scope of the composable function and is not related to the UI. In non-UI related state changes, our screen may recompose mor…