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

STM32无硬件随机数发生器时生成随机数的方法

有硬件随机数发生器,(RNG)

对于有RNG功能的MCU,直接调用相关的函数即可,很简单
HAL_RNG_GetRandomNumber 获得随机数

在这里插入图片描述

无硬件随机数发生器

中低端的MCU是不包含RNG单元的,但是也有办法产生随机数。
在这里插入图片描述

通过随机数函数,生成伪随机数

有srand()和rand()这两个函数,需要配对使用。
srand()是输入一个随机数种子,然后调用rand()函数得到一个随机数。
但是,如果srand()提供的种子不变,则rand()生成的不是真随机数。
那我们每次给他的种子变一下,则rand()就可以输出接近真随机数了。
但是这个变,又不能像1,2,3,4这样来搞,对于STM32来说,可以调用SYSTICK时钟计数器的值作为种子,这样rand()就可以输出“真”随机数了。当然这个“真”是打了引号的,并不是真正的随机数,只是看起来比较像而已。

srand(SysTick->VAL);	//将systick计数器的值作为种子
k=rand()%100;			//获得100以内的随机数

通过ADC,生成伪随机数

STM32自带的ADC至少12位,而我们都知道ADC的最低1,2位其实是噪声,随机性比较大。
那么我们就可以将2个电阻分压后后,接入单片机的一个ADC引脚,多次读取ADC的值,取最低的1位或2位来组合成1个数值,这种办法得到的随机数是真正的随机数,其随机性与RNG单元基本相当,但这种方法非常耗MCU时间,酌情使用。
有一个折衷的办法,通过DMA来多次读取ADC的值,到最后再一次性的合并。这个办法虽然耗时较长,但不怎么占用MCU的开销。

相关文章:

  • 时序约束实战
  • FL Studio21中文完整版升级下载
  • Netty源码剖析之NIOEventLoopGroup创建流程
  • Python语言学习:Python语言学习之面向对象编程OO(继承封装多态)/类方法/装饰器的简介、案例应用之详细攻略
  • 计算机毕业设计ssm基于java网上心理咨询系统50fxl系统+程序+源码+lw+远程部署
  • 备战数学建模47-数模常规算法之图论(攻坚站12)
  • 算法学习十八补二叉树递归套路+贪心算法一
  • Linux常用命令(上).
  • 叠氮聚乙二醇生物素 N3-PEG-Biotin Azide-PEG-Biotin的结构式
  • Java网络编程1
  • Opencv项目实战:09 物体尺寸测量
  • 记一次vue前端导出excel
  • 缓存预热Springboot定时任务
  • 基于遗传算法的BP神经网络在汇率预测中的应用研究(Matlab代码实现)
  • vue3+three.js实现疫情可视化
  • 收藏网友的 源程序下载网
  • CSS居中完全指南——构建CSS居中决策树
  • ECS应用管理最佳实践
  • emacs初体验
  • Magento 1.x 中文订单打印乱码
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Rancher-k8s加速安装文档
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Webpack 4x 之路 ( 四 )
  • 程序员该如何有效的找工作?
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 前端面试总结(at, md)
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我感觉这是史上最牛的防sql注入方法类
  • 项目实战-Api的解决方案
  • 写代码的正确姿势
  • 用jquery写贪吃蛇
  • 正则表达式-基础知识Review
  • ​如何防止网络攻击?
  • # Panda3d 碰撞检测系统介绍
  • #{}和${}的区别?
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (solr系列:一)使用tomcat部署solr服务
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (离散数学)逻辑连接词
  • (三)docker:Dockerfile构建容器运行jar包
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)基于IDEA的JAVA基础12
  • (转)IOS中获取各种文件的目录路径的方法
  • ... 是什么 ?... 有什么用处?
  • .net 程序发生了一个不可捕获的异常
  • .net 无限分类
  • .net生成的类,跨工程调用显示注释
  • @ConfigurationProperties注解对数据的自动封装