STM32 如何生成随机数

news2025/1/11 12:58:11

目录

一、引言

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷 P3065 [USACO12DEC] First! G

原题点这里​​​​​​ 题目来源于:洛谷 题目本质:字符串,Hash,字典树Trie 题目思路: 因为涉及到字典序的问题,那么应该能想到字典树。很显然字符串s1如果比字符串s2的字典序小的话,只有两种…

sms4j 发送短信

一、使用介绍 技术介绍: SMS4J: 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 项目地址: SMS4J: 让简单的事情回归简单的本质。 SMS4J为短信聚合框架,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。 目前已…

8招教你轻松解决职场甩锅PUA!

你是不是四十岁了还不知道解决职场甩锅行为也是有公式的! 那些混得好,能轻松赢得领导赏识,快速升职的,都 是早就把这些技巧背的滚瓜烂熟! 比如: 1、同事的错,领导误会是你 错误话术 这不是…

【Linux】在Windows搭建WSL2开发环境

在Windows搭建WSL2开发环境 WSL安装和调整更改安装位置变更默认apt源 Python环境变更默认Python版本安装pip WSL安装和调整 这里使用的WSL2,Ubuntu22.04 如果在WSL中需要使用系统代理但是报以下的错: 在当前Windows用户目录下创建.wslconfig并写入以下配…

网络工程师考试真题及解析

1. 在不同类型的操作系统中,批处理操作系统的缺点是()。 A) 缺少交互性 B) 不能并发运行 C) CPU利用率低 D) 周转时间太长 A【解析】批处理操作系统的优点是作业流程自动化较高,资源利用率较高,作业吞吐量大&…

word文档无损原样转pdf在windows平台使用python调用win32com使用pip安装pywin32

前提: windows环境下,并且安装了office套装,比如word,如果需要调用excel.也需要安装。在另外的文章会介绍。这种是直接调用word的。所以还原度会比较高。 需求: word文档转pdf,要求使用命令行形式,最终发布为api接口…

1992-2022年各省市县夜间灯光数据(excel+shp格式)

1992-2022年各省市县夜间灯光数据(excelshp格式) 1、时间:1992-2022年 2、来源: DMSP-OLS、NPP-VIIRS 3、指标:均值、总和、最小值、最大值、标准差 4、范围:34省市(含港澳台)、…

learn C++ NO.16——模板

typename关键字 typename是一个c关键字,主要用于解决模板定义中的依赖类型名称的解析问题。它告诉编译器紧随其后的名称是一个类型,而不是静态成员或成员函数。在模板编程中正确使用typename是理解和编写复杂模板代码的关键。 那什么是模板定义中的依赖…

聚鼎装饰画:做一家装饰画店铺能不能赚钱呢

在当今这个快节奏、高压力的社会环境中,人们越来越渴望在繁忙的生活中找到一丝宁静与美感。装饰画,作为提升居家和办公环境品位的艺术品,其市场需求日益增长。那么,做一家装饰画店铺究竟能不能赚钱呢? 从市场需求的角度来看&…

Codeforces practice /C++ 2024/9/11 - 2024/9/13

D. Mathematical Problem Codeforces Round 954 (Div. 3) 原题链接:https://codeforces.com/contest/1986/problem/D 题目标签分类:brute force,dp,greedy,implementation,math,two pointers…

深度学习经典模型之T5

T5(Text-to-Text Transfer Transformer) 是继BERT之后Google的又外力作,它是一个文本到文本迁移的基于Transformer的NLP模型,通过将 所有任务统一视为一个输入文本并输出到文本(Text-to-Text)中,即将任务嵌入在输入文本中,用文本的…

element ui form 表单出现英文提示的解决方案

场景再现: 在使用 form 表单的时候,一般都需要对表单元素进行验证,错误就出现在了这里,除了配置的错误信息,还会出现一个 英文校验提示,如下图: 解决方案 出现的原因是在el-form-item中使用…

推动数据治理与传统产业深度融合:解锁产业升级新引擎

标题:推动数据治理与传统产业深度融合:解锁产业升级新引擎 在数字化浪潮席卷全球的今天,数据已成为驱动经济社会发展的关键生产要素。传统产业,作为国民经济的基石,正面临着前所未有的变革挑战与转型升级的机遇。数据…

SVN的使用技巧

SVN(Subversion)是近年来崛起的版本管理工具,因为是免费的,所以用的人还是不少的。故做一些总结。 如果是新手,基本对SVN一点都不了解的话,建议去学习一下这个系统的教程,讲的也很详细Tortoise…

腾讯发布大模型安全与伦理报告:以负责任AI引领大模型创新

前言 随着AI模型的能力日益更加强大,如何让其行为和目的跟人类的价值、偏好、伦理原则、真实意图之间实现协调一致,这个被称为人机价值对齐的问题变得越来越重要。价值对齐对于确保人类与人工智能协作过程中的信任与安全至关重要,已经成为AI…

今年的智能手机不仅仅是AI

周一,苹果揭开了其iPhone 16系列的面纱,主要卖点是苹果智能。苹果的设备内AI系统提供了许多引人注目的功能,比如重写电子邮件、生成自定义表情符号和大幅升级的Siri。但在这些表面之下,AI为iPhone带来的还有一个重大变化&#xff…

使用API有效率地管理Dynadot域名,查看域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的?3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

【原创】java+swing+mysql长途客车售票管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

【双语新闻】 AI 安全新闻 :计算规模的下一代,按越狱敏感性和机器道德对模型进行排名

计算规模的下一代 The Next Generation of Compute Scale AI开发正处在计算规模大幅扩展的边缘。从芯片制造到电力基础设施的最新发展,都指向一个未来,即人工智能模型可能会超过今天最大的系统。在这篇文章中,我们将审视关键的发展以及它们对…