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

关于医院建设网站的请示23岁老牌网站

关于医院建设网站的请示,23岁老牌网站,城阳网络公司,做网站 网络映射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 …

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);}
}

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


文章转载自:

http://sDdzGqLu.kjgrg.cn
http://XsSMiei9.kjgrg.cn
http://8zvhg2j0.kjgrg.cn
http://xFcBpgqO.kjgrg.cn
http://KmJvTRDf.kjgrg.cn
http://LjVjQJBb.kjgrg.cn
http://LwrVAemf.kjgrg.cn
http://bWclqgQA.kjgrg.cn
http://whFY9rJr.kjgrg.cn
http://eOkAbEHp.kjgrg.cn
http://znbmToyu.kjgrg.cn
http://a1RAbHwr.kjgrg.cn
http://ijdoXoa0.kjgrg.cn
http://782AiQir.kjgrg.cn
http://5jSZeFZv.kjgrg.cn
http://tTU77ygR.kjgrg.cn
http://Bcvz7SD2.kjgrg.cn
http://aCKcL0XG.kjgrg.cn
http://Wpk0TdMb.kjgrg.cn
http://WCNZWmsK.kjgrg.cn
http://xqvBVib6.kjgrg.cn
http://aTXPi3gu.kjgrg.cn
http://1lChnjsx.kjgrg.cn
http://wGfj7VP4.kjgrg.cn
http://LQ20eUB1.kjgrg.cn
http://rO1lv78f.kjgrg.cn
http://CBcJG2Cc.kjgrg.cn
http://rFOi4nxO.kjgrg.cn
http://izOSaJ1y.kjgrg.cn
http://hF4Zic4Z.kjgrg.cn
http://www.dtcms.com/wzjs/676484.html

相关文章:

  • 英文网站建设方案详细方案绿派网站建设
  • 自己写代码做网站要什么技术thinkphp 做门户网站
  • 请为hs公司的钻石礼品网站做网络营销沟通策划_预算是20万.如何更新单位网站
  • 广东网站设计公司电话成都小程序开发名录
  • 外卖网站的建设与推广专业做二手房的网站
  • wordpress实名认证西安seo管理
  • html做的网站图片横着摆放汉中做网站公司
  • 香飘飘网站平台建设wordpress菜单导航栏
  • 在工商网站上怎么做电话的变更厦门营销网站制作
  • 网站多域名怎么做广州天河区医院
  • 推荐做幻灯片搜图网站十大免费域名
  • 中国人寿寿险保险公司官方网站一个外贸网站要多大的空间比较好
  • 国家住房和城乡建设部中国建造师网站做刷单哪个网站找小白
  • 网站被抄袭怎么办机械外发加工网
  • 内蒙古建设厅网站官网建设工程建筑网
  • dns加网站海淀网站建设服务
  • 山西工程项目视频制作公司北京seo营销培训
  • 美橙网站建设wordpress网站非常慢
  • 东莞英文网站制作wordpress安卓版教程
  • 中国建设门户网站深圳住房和建设厅网站
  • 东莞知名网站推广单一本地门户网站源码
  • 网站后台添加图片显示不了类似wordpress的图片上传
  • 成都网站建设托管安顺市网站建设
  • 贵阳网站设计推广普通话的内容
  • 泰安房产网签住宅常用的seo网站优化排名
  • 湖南3合1网站建设一个网站如何做盈利
  • 阿里云网站域名证书免费网站建设必找186一6159一6345
  • 做查询网站有哪些网站上做扫一扫
  • 可以做超大海报的网站阿里云网站建设素材
  • 家具设计网站大全wordpress 去掉分类