IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32-随机数发生器---RNG -> 正文阅读

[嵌入式]STM32-随机数发生器---RNG

随机数发生器—RNG

1.介绍

image-20220317115624902

硬件随机数发生器RNG,为主机读数时提供一个32位随机数。

模拟电路由环形振荡器组成,振荡器的输出进行异或运算以产生种子。RNG_LFSR由专用时钟提供。大量种子引入LFSR后,将数据传给数据寄存器RNG_DR。同时会监视种子和专用时钟PLL48CLK。当种子出现异常序列或PLL48CLK频率过低时,由状态寄存器RNG_SR读到。设置中断后,产生错误可以触发中断。

2.相关寄存器

typedef struct 
{
  __IO uint32_t CR;  //随机数控制寄存器,使能中断和使能随机数
  __IO uint32_t SR;  //随机数状态寄存器,错误状态和数据就绪(DRDY)
  __IO uint32_t DR;  //随机数数据寄存器,存储数据
} RNG_TypeDef;

3.配置方法

3.1RNG初始化详解

(1)使能RNG时钟

RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE);//使能RNG时钟 AHB2

(2)使能RNG

RNG_Cmd(ENABLE);//使能RNG

(3)判断DRDY位,等待随机数发生器稳定

while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0)  //等待DRDY稳定
	{
		i++;
		delay_us(100);
		if(i>=10000)
		{
			return 1; //随机数发生器不正常
		}
	}
//
FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG)
{
  FlagStatus bitstatus = RESET;
  assert_param(IS_RNG_GET_FLAG(RNG_FLAG));
  if ((RNG->SR & RNG_FLAG) != (uint8_t)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return  bitstatus;
}
3.2完整初始化
/*******************************************************************************
* 函 数 名         : RNG_Init
* 函数功能		   : RNG初始化函数
* 输    入         : 无
* 输    出         : 1:错误,0:成功
*******************************************************************************/
u8 RNG_Init(void)
{
	u16 i;
	RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE);//使能RNG时钟 AHB2
	RNG_Cmd(ENABLE);//使能RNG
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0)  //等待DRDY稳定
	{
		i++;
		delay_us(100);
		if(i>=10000)
		{
			return 1; //随机数发生器不正常
		}
	}
	return 0;
}
3.3 随机数调用函数
/*******************************************************************************
* 函 数 名         : RNG_Get_RandomNum
* 函数功能		   : 生成[min,max]范围的随机数
* 输    入         : [min,max]值
* 输    出         : 返回[min,max]范围的随机数
*******************************************************************************/
int RNG_Get_RandomRange(int min,int max)
{
	return min+RNG_Get_RandomNum()%(max-min+1);
}
/*******************************************************************************
* 函 数 名         : RNG_Get_RandomNum
* 函数功能		   : 返回32位随机数
* 输    入         : 无
* 输    出         : 返回32位随机数
*******************************************************************************/
u32 RNG_Get_RandomNum(void)
{
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0);
	return RNG_GetRandomNumber();
}

讲解不到位的希望大家指出,有需要我讲解的部分,希望大家提出,我会出文档讲解。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:41:35  更:2022-03-30 18:43:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:40:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码