随机发生器硬件功能

除了c标准库的随机发生器得到随机数以外;

stm也有一个硬件随机发生器,是通过种子信号模块模拟噪音得到的随机数;

RNG 简介


RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的 
随机数。

RNG 主要特性


● 提供由模拟量发生器产生的 32 位随机数
● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期
● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)
● 可被禁止以降低功耗

得到一个信息,时间周期长;尽量使用中断;

结构框图

1、挂在AHB总线上,所以时钟在AHB

2、模拟种子可以得到转态位监控,通过线性反馈寄存器,最后在数据寄存器得到随机数;

程序

#include"rang.h""

/****

 初始化成功返回1 不成功返回0

****/
typedef struct{

uint32_t random;//存随机数
bool random_end_flag;//随机数中断的标志
bool 	RNG_Clock_error_flag;//时钟错误标志,没用
bool  RNG_seed_error_flag;//种子模拟器的错误标志

}random_struct;

random_struct randmod_messge;



uint8_t rang_init()
{
	 uint32_t time=100000;
	 uint8_t state;
	 NVIC_InitTypeDef NVIC_InitStruct;
   RCC_AHB2PeriphClockCmd( RCC_AHB2Periph_RNG , ENABLE); //使能随机模块时钟
	 RNG_Cmd(ENABLE);//使能随机发生器
	
	 while(time--)
	 {
	    if( RNG_GetFlagStatus(RNG_FLAG_DRDY) )//等待到可以产生随机数,
			{
			  break;
			}
	 }
	 

	
	NVIC_InitStruct.NVIC_IRQChannel= HASH_RNG_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	
	RNG_GetFlagStatus(RNG_FLAG_DRDY);
	RNG_ITConfig(ENABLE);
	 
		 if( time == 0)
	 {
		  state=0;
	 }
	else
	{
	   state=1;
	
	}
  return state;
}

 

void HASH_RNG_IRQHandler()
{
  if(RNG_GetFlagStatus(RNG_FLAG_DRDY))
	{
	   randmod_messge.random=RNG_GetRandomNumber();
		 randmod_messge.random_end_flag=true;
	}
	if(RNG_GetITStatus(RNG_IT_CEI))
	{
		 randmod_messge.RNG_Clock_error_flag=true;
	   RNG_ClearITPendingBit(RNG_IT_CEI);
	}
	if(RNG_GetITStatus(RNG_IT_SEI))
	{
		 randmod_messge.RNG_seed_error_flag=true;
	   RNG_ClearITPendingBit(RNG_IT_SEI);
	}

}
void get_random_num( uint32_t *p)
{
	uint32_t temp;
  if(randmod_messge.random_end_flag == true )
	{
	    temp =randmod_messge.random ;
		  randmod_messge.random_end_flag == false;
		  *p=temp;
	}
  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值