13 STM32-随机数发生器 (RNG)

13.1 随机数发生器 (RNG)简介

RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数.
RNG 提供由模拟量发生器产生的 32 位随机数,两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期

13.2 RNG框图

在这里插入图片描述

随机数发生器采用模拟电路实现。模拟电路会源源不断的产生随机数的种子,并放入LFSR中,当将大量种子引入 RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR),即产生了随机数。同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR 寄存器中)指示何时在种子上出现异常序列,或指示何时 PLL48CLK 时钟频率过低。检测到错误或生成随机数时可以生成中断。
如果 CEIS 位的值为 1(时钟错误)出现时钟错误时,RNG 无法再产生随机数,因为 PLL48CLK 时钟不正确。此时应检查时钟控制器是否正确配置,是否可提供 RNG 时钟,然后将 CEIS 位清零。当 CECS 位为 0 时,RNG 可正常工作。时钟错误对产生的上一个随机数没有影响,RNG_DR 寄存器内容可以使用。
如果 SEIS 位的值为 1(种子错误)出现种子错误时,只要 SECS 位为 1,就会中断随机数产生。如果 RNG_DR 寄存器中有可用随机数,不能使用该随机数,因为它可能没有足够的熵。
应执行以下操作:将 SEIS 位清零,然后将 RNGEN 位清零并置 1,以便重新初始化和重新启动 RNG。
13.3 寄存器
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

13.4 示例

#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"void RngInit()
{RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE); // 使能随机数时钟RNG_Cmd(ENABLE); // 命令开始RNG_ITConfig(ENABLE); // 使能中断
}int main(void)
{uint32_t t=0;uart_init(38400);delay_init(168);RngInit();while(1){t = RNG_GetRandomNumber();printf("t:%d\r\n",t);delay_ms(1000);}
}// 随机数发生错误中断
void HASH_RNG_IRQHandler()
{if(RNG_GetITStatus(RNG_IT_CEI)){RNG_ClearITPendingBit(RNG_IT_CEI);while(1);}if(RNG_GetITStatus(RNG_IT_SEI)){RNG_ClearITPendingBit(RNG_IT_SEI);while(1);}
}

结果:
串口输出随机数,1秒一个
t:1022588955
t:-657224238
t:749173973
t:1695776011
t:59840523
t:963349731
t:146175500
t:-1360248947
t:1275759650
t:-1859302243
t:-971661004
t:1853953939
t:-72955338
t:-465182740
t:1388639291
t:-1443259421
t:121775036
t:815789949
t:1291676023
t:867471519
t:-1935526956

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

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

相关文章

SpringCloud整合Zookeeper代替Eureka案例

文章目录 本期代码下载地址zookeeper简介zookeeper下载安装新建服务提供者测试 新建消费者测试 本期代码下载地址 地址:https://github.com/13thm/study_springcloud/tree/main/days4 zookeeper简介 zookeeper是一个分布式协调工具,可以实现注册中心功能 关闭Lin…

您已启用软件包 GPG 签名检查,这样很好。不过您尚未安装任何 GPG 公钥。请下载您希望安装的软件签名公钥并安装

安装tesseract时提示该错误 [rootlocalhost data]# yum -y install tesseract 已加载插件:fastestmirror, langpacks您已启用软件包 GPG 签名检查,这样很好。不过您尚未安装任何 GPG 公钥。请下载您希望安装的软件签名公钥并安装。假设公钥已下载&#…

C语言第二弹---C语言基本概念(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 C语言基本概念 1、字符串和\02、转义字符3、语句和语句分类3.1、空语句3.2、表达式语句3.3、函数调⽤语句3.4、复合语句3.5、控制语句 4、注释4.1、注释的两种形…

MySQL存储函数与存储过程习题

创建表并插入数据: 字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass VARCHAR(50) 否 否 是 否 否 ​ ​ sch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun glass 2 1、创建一个可以统计表格内记录…

【数据结构和算法】删除链表的中间节点

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 前言 这是力扣的 2095 题,难度为中等,解题方案有很多种…

SpringBoot整合Redis实现缓存信息监控

SpringBoot整合Redis可以通过RedisTemplate和Redisson两种方式。 1. RedisTemplate获取Redis信息 根据Connection获取Redis缓存信息 // 方式1:获取Redis缓存全部信息 Properties info redisTemplate.getRequiredConnectionFactory().getConnection().info(); // …

php 源码解读函数解释

zend_hash_num_elements获取一个哈希表中元素的数量扩展Z_TYPE获取变量类型ZEND_HASH_FOREACH_VAL_IND对比第一个参数是否在第二个map里类型array_in()

Pytest参数化-你不知道的使用技巧

前言 unittest单元测试框架使用DDT进行数据驱动测试,那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢?其实Pytest是使用pytest.mark.parametrize装饰器来实现数据驱动测试的,那么今天我们就简单来说说在它是如何进…

[通知]rust跟我学八:获取指定目录下的所有文件全路径 已上线

大家好,我是带剑书生,开源库get_local_info的作者。目前我的付费专栏已经上线,用于介绍在实现get_local_info过程中,遇到该问题所使用的解决方法,喜欢的朋友可以去订阅了,19.9元,非常便宜的价格…

华为/华三设备巡检常用命令分享

驻场的网络工程师经常会开展网络设备的月度巡检、季度巡检,给各位朋友分享我平时在巡检过程中经常用到的巡检命令,华为华三的设备大部分可以通用。 一、查看硬件状态、IOS版本信息检查 display clock #系统时间 display version #查看版本信息&#…

shopee店铺选品规划:如何在Shopee平台上进行店铺选品规划

在如今激烈竞争的电商市场上,一个有效的选品策略对于卖家来说至关重要。在Shopee平台上进行店铺选品规划时,卖家可以遵循以下步骤来制定一个成功的选品策略。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址(复制浏览器打开&#…

高德地图绘制 GPX 数据路线

高德地图绘制 GPX 数据路线 .gpx 文件是在分享地图路径时最常用的一种数据格式。里面包含了路径点的相关信息,每个点还有可能拥有自己的时间、距离等信息。 一直想自己导出自己的 gpx 路线,然后导入到地图中查看这个路线的具体信息,今天细致…

CentOS 7上安装Anaconda 详细教程

目录 1. 下载Anaconda安装脚本2. 校验数据完整性(可选)3. 运行安装脚本4. 遵循安装指南5. 选择安装位置6. 初始化Anaconda7. 激活安装8. 测试安装9. 更新Anaconda10. 使用Anaconda 1. 下载Anaconda安装脚本 首先需要从Anaconda的官方网站下载最新的Anac…

千万不要在方法上打断点!千万不要!

我上周遇到了一个莫名其妙的搞心态的问题,浪费了我好几个小时。 气死我了,拿这几个小时来敲(摸)代(摸)码(鱼)不香吗? 主要是最后问题的解决方式也让我特别的无语&#…

C#设计模式教程(2):工厂方法模式

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 C# 代码实现 以下是C#中实现工厂方法模式的一个简单示例: 首先,定义一个抽象产品(Product)类,它是所有具体产品的基类。 pu…

2024年1月18日

1 vue3相较于vue2的优点 性能提升:Vue3通过优化虚拟DOM和渲染过程,提高了性能。它的虚拟DOM更轻量级,渲染过程更快,并且引入了编译时优化,使得代码体积更小,加载更快。例如,初次渲染快55%&#…

Redis实现好友功能

好友功能是目前社交场景的必备功能之一,一般好友相关的功能包含有:关注/取关、我(他)的关注、我(他)的粉丝、共同关注等这样一些功能。 1.关注和取关 1.设计思路 总体思路我们采用MySQL Redis的方式结合…

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

48-DOM节点,innerHTML,innerText,outerHTML,outerText,静态获取,单机click,cssText

1.DOM基础 Document Object Module,文档对象模型,window对象,document文档,都可以获取和操作 1)文档节点 2)属性节点(标签内的属性href,src) 3)文本节点(标签内的文字) 4)注释节点 5)元素节点(标签) 2.获取元素节点 2.1通过标签名获取getElementsByTagName() …

Python中HTTP代理的配置和使用

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中配置和使用HTTP代理。 一、配置HTTP代理…