当前位置: 首页 > news >正文

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器


文章目录

  • STM32 硬件随机数发生器
  • 前言
  • 第1章 随机数发生器简介
    • 1.1 RNG主要特性
    • 1.2.RNG应用
  • 第2章 RNG原理框图
  • 第3章 RNG相关寄存器
    • 3.1 RNG 控制寄存器 (RNG_CR)
    • 3.2 RNG 状态寄存器 (RNG_SR)
    • 3.3 RNG 数据寄存器 (RNG_DR)
  • 第3章 RNG代码部分
  • 第4章 STM32F1 软件模拟RNG


前言

在日常生活中有很多情况都有用到随机数的应用,比如手机验证码、快递取件码等。


第1章 随机数发生器简介

随机数发生器(Random Number Generators,RNG),用于生成随机数的程序或硬件
STM32F4自带了硬件随机数发生器(RNG),RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的(真)随机数。

RNG 已通过 FIPS PUB 140-2( 2001 年 10 月 10 日)测试,成功率达 99%。

注意:M3内核等低端些的的芯片不具有这个硬件随机数发生器,具体需要参考“芯片选型手册”! 如果要产生随机数,只能利用软件方式模拟生成伪随机数。

在这里插入图片描述

在这里插入图片描述

1.1 RNG主要特性

1、提供由模拟量发生器产生的 32 位随机数。
2、两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期。
3、通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)。
4、可被禁止以降低功耗。
5、真随机数:完全随机,毫无规律(STM32的部分型号上具备真随机数发生器)。
6、伪随机数:伪随机数是用确定性的算法计算出的随机数序列,并非真正的随机。

1.2.RNG应用

验证码、快递取件码、贪吃蛇游戏食物坐标等应用。

第2章 RNG原理框图

STM32F4 的随机数发生器框图如下图所示:

在这里插入图片描述

随机数发生器采用模拟电路实现的。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR) 的种子,用于生成 32 位随机数。该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。

RNG_LFSR 由专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将大量种子引入 RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR)。同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位( RNG_SR 寄存器中)指示何时在种子上出现异常序列,或指示何时PLL48CLK 时钟频率过低,出现过低时可以由RNG_SR寄存器的对应位读取,如果设置了中断,则在检测到错误时生成中断。

第3章 RNG相关寄存器

3.1 RNG 控制寄存器 (RNG_CR)

在这里插入图片描述

该寄存器主要用RNGEN 位,该位用于使能随机数发生器,所以设置为 1。

3.2 RNG 状态寄存器 (RNG_SR)

在这里插入图片描述

该寄存器需要用到DRDY 位,该位用于表示 RNG_DR 寄存器包含的随机数数据是否有效,如果该位为 1,则说明 RNG_DR 的数据是有效的,可以读取出来了。读 RNG_DR后,该位自动清零。

3.3 RNG 数据寄存器 (RNG_DR)

在这里插入图片描述

RNG_DR 寄存器是只读寄存器,可以读取该寄存器获得 32 位随机数值。此寄存器在最多 40 个 PLL48CLK 时钟周期后,又可以提供新的随机数值。

第3章 RNG代码部分

由于这个RNG涉及的寄存器比较少,可以直接用寄存器方式来操作即可,就不用库函数方式了,寄存器看上去就比较简洁。

示例代码如下:

//初始化RNG
//返回值:0,成功;1,失败
u8 RNG_Init(void)
{u16 retry=0; RCC->AHB2ENR=1<<6;	//开启RNG时钟,来自PLL48CLKRNG->CR|=1<<2;		//使能RNGwhile((RNG->SR&0X01)==0&&retry<10000)	//等待随机数就绪{retry++;delay_us(100);}if(retry>=10000)return 1;//随机数产生器工作不正常return 0;
}//得到随机数
//返回值:获取到的随机数
u32 RNG_Get_RandomNum(void)
{	 while((RNG->SR&0X01)==0);	//等待随机数就绪  return RNG->DR;	
}//得到某个范围内的随机数
//min,max,最小,最大值.
//返回值:得到的随机数(rval),满足:min<=rval<=max
int RNG_Get_RandomRange(int min,int max)
{ return RNG_Get_RandomNum()%(max-min+1)+min;
}
int main(void)
{u32 random = 0;delay_init(168);        // 初始化 延时函数uart_init(115200);      // 初始化串口,波特率为115200RNG_Init();             // 初始化 RNG 硬件接口while(1){random = RNG_Get_Random_Num();        // 获取一个32位的随机数 printf("random = %d\r\n", random);    // 显示32位随机数 random = RNG_Get_Random_Range(10, 20);// 获取[10, 20]区间内的随机数 printf("random = %d\r\n", random);    // 显示区间随机数 delay_ms(500);}
}

下载例程后,可以在串口看到不断输出随机数了。


第4章 STM32F1 软件模拟RNG

单纯用软件方式模拟生成一个伪随机数

#include "delay.h"
#include "usart.h"
#include <stdlib.h>           //* 使用rand函数,库文件,使用尖括号 *//* 设置随机数的取值区间范围 */
#define RANDOM_MIN    1000    // 随机数最小值
#define RANDOM_MAX    9999    // 随机数最大值int main(void)
{u32 random_value = 0;   // 保存随机值delay_init();           // 初始化 延时函数uart_init(115200);      // 初始化串口,波特率为115200while(1){/* 随机数生成 */random_value = rand();     //产生32位随机数 printf("当前随机数为:%d\r\n", random_value);random_value = rand() % (RANDOM_MAX + 1 - RANDOM_MIN) + RANDOM_MIN;// 产生区间随机数 printf("当前随机数为:%d\r\n", random_value);delay_ms(500);}
}

这种用软件生成的伪随机数只能说是接近实验目的效果,但是并不可取的方案。

相关文章:

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器 文章目录 STM32 硬件随机数发生器前言第1章 随机数发生器简介1.1 RNG主要特性1.2.RNG应用 第2章 RNG原理框图第3章 RNG相关寄存器3.1 RNG 控制寄存器 (RNG_CR)3.2 RNG 状态寄存器 (RNG_SR)3.3 RNG 数据寄存器 (RNG_DR) 第3章 RNG代码部分第4章 STM32F1 …...

Window环境下使用go编译grpc最新教程

网上的grpc教程都或多或少有些老或者有些问题&#xff0c;导致最后执行生成文件时会报很多错。这里给出个人实践出可执行的编译命令与碰到的报错与解决方法。&#xff08;ps:本文代码按照煎鱼的教程编写&#xff1a;4.2 gRPC Client and Server - 跟煎鱼学 Go (gitbook.io)&…...

STM32——FLASH(1)简单介绍、分类、读写流程及注意事项

文章目录 FLASH的特点Nor flash和nand flashflash的读写flash 的存储单位 flash的读写过程 FLASH的特点 可擦写数据可修改可重写访问速度<ROM Nor flash和nand flash Nor flash 1、与SDRAM相似&#xff0c;用户可以直接运行装载到NORFLASH里面的代码&#xff0c;减少SRAM…...

MySQL的DML语言

DML&#xff1a;Data Manipulation Language&#xff08;数据操作语言&#xff09; DML语言用来对数据库中表的数据记录进行增、删、改操作。 一、添加数据命令 注意&#xff1a; 插入数据时&#xff0c;指定的字段顺序需要与值的顺序是一一对应的。 字符串和日期型数据应该包…...

Vivado-IP核

Vivado-IP核 主程序 timescale 1ns / 1ps ////module ip_clk_wiz(input sys_clk,input sys_rst_n,output clk_out1,output clk_out2,output clk_out3,output clk_out4,output locked);clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_out1), // output clk_out…...

品牌如何营造生活感氛围?媒介盒子分享

「生活感」简而言之是指人们对生活的感受和意义&#xff0c;它往往没有充斥在各种重要的场合和事件中&#xff0c;而是更隐藏在细碎平凡的生活场景中。在营销越来越同质化的当下&#xff0c;品牌应该如何打破常规模式&#xff0c;洞察消费情绪&#xff0c;找到更能打动消费者心…...

Java 学习和实践笔记(2)

今天的学习进度&#xff1a; 注册并下载安装好了Java 8&#xff0c;之后进行以下配置。 1&#xff09;path 是一个常见的环境变量&#xff0c;它告诉系统除了在当前的目标下妹寻找此程序外&#xff0c;还可以到path指定的目录下找。这句话是什么意思呢&#xff1f;以下举报例…...

Python:批量url链接保存为PDF

我的数据是先把url链接获取到存入excel中&#xff0c;后续对excel做的处理&#xff0c;各位也可以直接在程序中做处理&#xff0c;下面就是针对excel中的链接做批量处理 excel内容格式如下&#xff08;涉及具体数据做了隐藏&#xff09; 标题文件链接文件日期网页标题1http://…...

【LeetCode每日一题】525连续数组 303区域和检索(前缀和的基本概念和3个简单案例)

前缀和 // 构造prefix let prefix [0] arr.forEach(num > {prefix.push(prefix.at(-1) num); })如果想要计算某个区间 i 到 j 这个子数组的和时&#xff0c;可以根据 prefix[j1] - prefix[i] 获得。 例题1&#xff1a;303.区域和检索 - 数组不可变 给定一个整数数组 num…...

形态学算法应用之连通分量提取的python实现——图像处理

原理 连通分量提取是图像处理和计算机视觉中的一项基本任务&#xff0c;旨在识别图像中所有连通区域&#xff0c;并将它们作为独立对象处理。在二值图像中&#xff0c;连通分量通常指的是所有连接在一起的前景像素集合。这里的“连接”可以根据四连通或八连通的邻接关系来定义…...

Kafka系列之:Kafka集群同时设置基于时间和日志大小两种方式保存Topic的数据

Kafka系列之:Kafka集群同时设置基于时间和日志大小两种方式保存Topic的数据 一、基于日志大小二、基于时间大小三、参数设置四、设置命令一、基于日志大小 "log.retention.bytes"是Apache Kafka中的一项配置参数,用于指定每个日志段文件的最大大小。当日志段文件的…...

pytest+allure批量执行测试用例

在 Pytest 中,可以使用装饰器 `@pytest.fixture` 来定义用例级别的前置和后置操作。下面是一个示例代码,演示了如何使用 Pytest 的前置和后置操作: ```python import pytest @pytest.fixture(scope="function") def setup_function(): print("Setup fu…...

SpringBoot和SpringMVC

目录 一、springboot项目 &#xff08;1&#xff09;创建springboot项目 &#xff08;2&#xff09;目录介绍 &#xff08;3&#xff09;项目启动 &#xff08;4&#xff09;运行一个程序 &#xff08;5&#xff09;通过其他方式创建和运行springboot项目 二、SpringMVC…...

免费搭建幻兽帕鲁服务器,白嫖阿里云游戏服务器

阿里云幻兽帕鲁服务器免费搭建方案&#xff0c;先在阿里云高校计划「云工开物」活动领取学生专享300元无门槛代金券&#xff0c;幻兽帕鲁专用服务器4核16G配置26元1个月、149元半年&#xff0c;直接使用这个无门槛300元代金券抵扣即可免费搭建幻兽帕鲁服务器。阿里云服务器网al…...

[技术杂谈]如何下载vscode历史版本

网站模板&#xff1a; https://code.visualstudio.com/updates/v1_85 如果你想下载1.84系列可以访问https://code.visualstudio.com/updates/v1_84​​​​​​ 然后看到&#xff1a; 选择对应版本下载即可&#xff0c;我是windows x64系统选择x64即可开始下载...

nginx slice模块的使用和源码分析

文章目录 1. 为什么需要ngx_http_slice_module2. 配置指令3. 加载模块4. 源码分析4.1 指令分析4.2 模块初始化4.3 slice模块的上下文4.2 $slice_range字段值获取4.3 http header过滤处理4.4 http body过滤处理5 测试和验证 1. 为什么需要ngx_http_slice_module 顾名思义&#…...

AI应用开发-python实现redis数据存储

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…...

2024年Java架构篇之设计模式

2024年Java实战面试题_java 5 年 面试-CSDN博客 1、单例模式...

搭建macOS开发环境-1:准备工作

请记住&#xff1a; 最重要的准备工作永远是&#xff1a;备份数据 !!! 通过图形界面检查 Mac 的 CPU 类型&#xff1a; 在搭载 Apple 芯片的 Mac 电脑上&#xff0c;“关于本机”会显示一个标有“芯片”的项目并跟有相应芯片的名称&#xff1a; 通过命令行检查Mac的CPU类型 …...

【Makefile语法 02】Makefile语法基础

目录 一、Makefile概述 二、Makefile变量 三、Makefile符号 一、Makefile格式 1. 基本格式&#xff1a; targets : prerequisties [tab键]command target&#xff1a;目标文件&#xff0c;可以是 OjectFile&#xff0c;也可以是执行文件&#xff0c;还可以是一个标签&…...

“为什么我的NotebookLM Agent总在胡说?”——20年NLP老兵手把手调试LLM引用可信度的5个黄金检查点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM Agent研究辅助 核心能力与适用场景 NotebookLM Agent 是 Google 推出的基于私有文档理解的 AI 助手&#xff0c;专为研究者设计。它支持上传 PDF、TXT、Markdown 等格式的研究资料&#xf…...

Perplexity无法解析Springer LaTeX公式?2024.06最新MathJax兼容补丁+3类数学文献精准摘要生成术

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity解析Springer文献的底层机制与失效归因 Perplexity 作为衡量语言模型预测能力的关键指标&#xff0c;在学术文献解析场景中常被误用为“质量代理”&#xff0c;尤其在处理 Springer 出版集团…...

《QGIS空间数据处理与高级制图》008:OGR2OGR命令行工具核心优势

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

终极暗黑2存档编辑器:5分钟学会免费修改d2s文件的完整指南

终极暗黑2存档编辑器&#xff1a;5分钟学会免费修改d2s文件的完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾因暗黑破坏神2的角色属性分配不当而懊恼&#xff1f;是否因稀有装备难以获取而沮丧&#xff1f;d2s…...

别再只调API了!深入Qt QGraphicsView事件流,彻底搞懂拖拽缩放背后的‘为什么’

深入Qt QGraphicsView事件流&#xff1a;从拖拽缩放的底层机制到高效调试 在Qt的图形视图框架中&#xff0c;QGraphicsView、QGraphicsScene和QGraphicsItem构成了一个强大的交互系统。许多开发者虽然能够通过调用API实现基本功能&#xff0c;但当遇到事件被意外吞噬、坐标计算…...

独立开发者如何下载使用Taotoken管理多个AI项目的模型与密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何下载使用Taotoken管理多个AI项目的模型与密钥 对于独立开发者或小型工作室而言&#xff0c;同时推进多个AI应用项目…...

信息安全工程师-网络安全风险评估(上篇):框架、流程与量化基础

一、引言 &#xff08;一&#xff09;核心定位与定义 网络安全风险评估是信息安全管理体系的核心方法论&#xff0c;在软考信息安全工程师考试中属于信息安全管理模块的高频考点&#xff0c;占比约 8-10 分。其标准定义为&#xff1a;依据 GB/T 20984-2007《信息安全技术 信息…...

实战指南:如何通过Vosk API实现95%+准确率的离线语音识别系统

实战指南&#xff1a;如何通过Vosk API实现95%准确率的离线语音识别系统 【免费下载链接】vosk-api Offline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node 项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-ap…...

“枯笔”“泼墨”“留白”在Midjourney中根本不存在?——资深数字书画师拆解6个被长期误用的东方美学关键词

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;东方美学与AI绘图的本质断层 气韵生动与像素采样的不可通约性 东方绘画传统以“气韵生动”为最高准则&#xff0c;强调笔意流转、留白呼吸、时间性观照与心手相忘的即兴生成。而当前主流AI绘图模型&am…...

别再乱加电阻了!手把手教你用SI9000搞定PCB阻抗匹配(附50欧姆计算实例)

高速PCB设计实战&#xff1a;用SI9000精准计算阻抗匹配的工程方法 当信号频率突破百兆赫兹时&#xff0c;PCB走线就不再是简单的电气连接——它们变成了需要精密控制的传输线。去年参与一个千兆以太网项目时&#xff0c;我曾目睹团队因阻抗失配导致信号完整性崩溃的惨痛案例&am…...