有哪些单片机函数信号发生器带真随机发生器(RNG)功能的

【NUCLEO-L476RG开发】硬件随机数 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 501|回复: 2
【NUCLEO-L476RG开发】硬件随机数
在线时间16 小时
主题帖子精华
中级会员, 积分 350, 距离下一级还需 150 积分
中级会员, 积分 350, 距离下一级还需 150 积分
& && &&&这次的NUCLEO-L476RG学习笔记,为大家带来的是硬件随机数。
& && &&&STM32F4系列单片机自带了硬件随机数发生器( RNG ), RNG 处理器是一个以连续模拟噪声为基础的 随机数发生器,在主读时提供一个 32 位的随机数。 STM32F4 的随机数发生器构图如图1:
& && &&&STM32F4的随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR)的种子,用于生成 32 位随机数。
& && &&&该模拟电路由几个环形振荡器组成,的输出进行异或运算以产生种子。 RNG_LF&&由专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将大量种子引入 RNG_LFSR 后, RNG_LFSR 的内容会传入数据寄存器 (RNG_DR) 。同时,系统会监视模拟种子和专用时钟 PLL48CLK,当种子上出现异常序列,或 PLL48CLK 时钟频率过低,可以由 RNG_SR 寄存器的对应位读取到,如果设置了中断则在检测到错误时,还可以产生中断。
& && &&&随机数发生器操作步骤如下:
& && &&&1.使能随机数发生器时钟
& && && && &随机数发生器时钟来自PLL48CK,通过AHB2ENR寄存器使能。
& && &&&2.势能随机数发生器
& && && & 通过RNG_CR寄存器的最低位设置为1,使能随机数发生器。
& && &&&3.判断DRDY位,读取随机数值
& && && & 每次读取随机数之前,先判断RNG_SR寄存器的DRDY位,如果该位为1.则可以读取RNG_DR得到的随机数。
实现随机数的具体函数(库函数版本):
u8 RNG_Init(void)//函数功能:初始化RNG
{
& && &&&u16 retry=0;
& && &&&RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);//开启RNG时钟,来自PLL48CLK
& && &&&RNG_Cmd(ENABLE);& && &&&//使能RNG
& && &&&while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET&&retry&10000)& && &&&//等待随机数就绪
& && &&&{
& && && && && & retry++;
& && && && && & delay_us(100);
& && &&&}
& && &&&if(retry&=10000)return 1;//随机数产生器工作不正常
& && &&&return 0;
}
u32 RNG_Get_RandomNum(void)//函数功能:得到随机数。返回值:获取到的随机数
{& && && &
& && &&&while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET);& && &&&//等待随机数就绪&&
& && &&&return RNG_GetRandomNumber();& && &&&
}
int RNG_Get_RandomRange(int min,int max)//函数功能:生成[min,max]范围的随机数
{
& &return RNG_Get_RandomNum()%(max-min+1) +
}复制代码
以上函数可以成功产生随机数,别忘了添加库函数!!
当然,主函数因人而异,有的朋友喜欢串口打印,有的喜欢显示屏输出,在这里我就不贴出来了。
以后有机会还会和大家分享学习成果!!
(55.53 KB, 下载次数: 0)
10:34 上传
欢迎加入STM32/STM8社区技术交流群:&7779516 & &STM32L系列开发群:
ST金币2456
在线时间801 小时
主题帖子精华
谢谢分享.png (991 Bytes, 下载次数: 0)
11:59 上传
在线时间16 小时
主题帖子精华
中级会员, 积分 231, 距离下一级还需 269 积分
中级会员, 积分 231, 距离下一级还需 269 积分
多谢分享,学习了
欢迎加入STM32/STM8社区技术交流群:&7779516 & &STM32L系列开发群:
站长推荐 /1
本课程将涉及前后台系统的设计,详细分析RTOS的基本功能,包括内核调度机制,任务管理,中断管理,任务间的同步与通信机制等。
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by21ic官方微信-->
后使用快捷导航没有帐号?
查看: 304|回复: 6
有没有真随机数发生器(RNG)芯片或是带这个功能的单片机吗?
&&未结帖(20)
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
有谁知道还有哪家的芯片有这个真随机数发生器(RNG)功能的不,STM32F4系统倒是有,但是价格太高,况且体积也大,IO口也多,我们用不了那么大的,或是外置真随机数发生器芯片也可以,但是不知道有没有这样的芯片
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:86%打赏:129.96受赏:331.00
主题帖子积分
PIC24F“GB2”系列
欢迎进入& && &21ic TI技术交流1群:(已满),&&21ic TI技术交流2群:
主题帖子积分
主题帖子积分
专家等级:结帖率:86%打赏:129.96受赏:331.00
主题帖子积分
另外,你可以用台系51单片机方面找找
欢迎进入& && &21ic TI技术交流1群:(已满),&&21ic TI技术交流2群:
主题帖子积分
主题帖子积分
专家等级:结帖率:86%打赏:129.96受赏:331.00
主题帖子积分
瑞萨的RX71M系列里也有带RNG的
欢迎进入& && &21ic TI技术交流1群:(已满),&&21ic TI技术交流2群:
主题帖子积分
资深工程师, 积分 11938, 距离下一级还需 8062 积分
资深工程师, 积分 11938, 距离下一级还需 8062 积分
主题帖子积分
专家等级:结帖率:95%打赏:0.00受赏:27.30
主题帖子积分
资深工程师, 积分 11938, 距离下一级还需 8062 积分
资深工程师, 积分 11938, 距离下一级还需 8062 积分
Mifare One 卡芯片就可以产生真随机数。价格还便宜。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
PIC24F“GB2”系列
请问这个全称是多少啊,我找了一些好像都没有这个功能
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:86%打赏:129.96受赏:331.00
主题帖子积分
请问这个全称是多少啊,我找了一些好像都没有这个功能
PIC24FJ128GB202/04/06等等
欢迎进入& && &21ic TI技术交流1群:(已满),&&21ic TI技术交流2群:
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
无冕之王奖章
等级类勋章
奔腾之江水
发帖类勋章
热门推荐 /2STM32F4学习笔记12——RNG随机数发生器
STM32F4学习笔记12——RNG随机数发生器
STM32F4笔记
RNG主要特性
RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的 随机数。
RNG的主要特性
● 提供由模拟量发生器产生的 32 位随机数
● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期
● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)
● 可被禁止以降低功耗
RNG功能描述
随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR) 的种子, 用于生成 32 位随机数。
该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。RNG_LFSR 由 专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将 大量种子引入 RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR)。
同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR 寄存器中)指示何时 在种子上出现异常序列,或指示何时 PLL48CLK 时钟频率过低。检测到错误时生成中断。
要运行 RNG,请按以下步骤操作:
1.如果需要,使能中断(为此,将 RNG_CR 寄存器中的 IE 位置 1)。准备好随机数时或 出现错误时生成中断。
2. 通过将 RNG_CR 寄存器中的 RNGEN 位置 1 使能随机数产生。这会激活模拟部分、RNG_LFSR 和错误检测器。
3. 每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0), 并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR 寄存器中的内容。
按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第 一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)
如果 CEIS 位的值为 1(时钟错误)
出现时钟错误时,RNG 无法再产生随机数,因为 PLL48CLK 时钟不正确。检查时钟控制器是 否正确配置,是否可提供 RNG 时钟,然后将 CEIS 位清零。当 CECS 位为 0 时,RNG 可正 常工作。时钟错误对产生的上一个随机数没有影响,因此 RNG_DR 寄存器内容可以使用。
如果 SEIS 位的值为 1(种子错误)
出现种子错误时,只要 SECS 位为 1,就会中断随机数产生。如果 RNG_DR 寄存器中有可 用随机数,不能使用该随机数,因为它可能没有足够的熵。
应执行以下操作:将 SEIS 位清零,然后将 RNGEN 位清零并置 1,以便重新初始化和重新 启动 RNG。
STM32F4的RNG库
如何使用RNG驱动
1.通过函数RCC_AHB2PeriphClockCmd(RCC_AHB2Perph_RNG,ENABLE)使能RNG控制器时钟。
2.通过函数RNG_Cmd()使能RNG。
3.等待直到随机数发生器产生有效的随机数(中断或查询模式)。
4.通过函数RNG_GetRandomNumber()得到随机数。
从上面第三步开始继续得到后面的随机数。
初始化和配置函数
这部分函数主要提供以下功能
· 初始化RNG外设
· 使能或禁止RNG外设。
void RNG_DeInit()功能:从新初始化RNG外设寄存器数据到复位值。
void RNG_Cmd(FunctionanState NewState)功能:使能或禁止RNG
得到32位随机数函数
uint32_t RNG_GetRandomNumber(void)
函数功能:返回32位随机数
调用此函数之前需要等待直到DRDY标志置位,调用函数RNG_GetFlagStatus(RNG_FLAG_DRDY)进行等待标志位。每次在的调用RNG_GetrandomNumber(void)后RNG_FLAG_DRDY标志自动清除。
在seed错误的情况下只要SECS位是1,随机数产生将被中断。如果RNG_DR寄存器中有数据可用,但是请不要使用,应为没有足够的entopy。这种情况下推荐用户通过函数RNG_ClearFlag(RNG_FLAG_SECS)清除SEIS标志,然后禁止并重新使能RNG外设(通过函数RNG_Cmd())来从新初始化和启动RNG。
在时钟错误的情况下,应为PLL48CLK时钟的不准确,RNG将无法产生随机数。检查是否正确配置时钟控制器RNG时钟,同时清除CEIS(通过函数RNG——ClearFlag(RNG_FLAG_CECS))位。当CECS位是0的时候RNG次啊能正常工作。时钟错误对先前残生的随机数没有影响,RNG_DR寄存器中的数据仍然可以使用。
中断标志管理
RNG_FLAG_DRDY:RNG_DR寄存器有有效随机数时,通过读此寄存器来清除标志(可通过函数RNG_GetRandomNumber()实现)。
RNG_FLAG_CECS:seed检测错误
RNG_FLAG_SECS:时钟检测错误
如果是能了RNG中断,下面三种情况僵尸的RNG中断会被挂起。
RNG_DR寄存器含有有效的随机数,只有通过读RNG_DR寄存器才能清除中断源,也就是清除中断挂起标志。
发生seed错误,检测到下面的错误序列之一:
64个以上的的连续位都是0或者1
32个以上出现连续的01.
通过函数RNG_ClearITPendingBit(RNG_IT_SEI)清除此中断源。
发生时钟错误,PLL48CLK不能被正确的检测到(fPLL8CL
我的热门文章
即使是一小步也想与你分享当前位置:
ATmega128单片机的真随机数发生器
随机数已广泛地应用于仿真、抽样、数值分析、计算机程序设计、决策、美学和娱乐之中。常见的随机数发生器有两种:使用数学算法的伪随机数发生器和以物理随机量作为发生源的真随机数发生器。
&  1.2.2 AVR单片机获得不确定的2位二进制数据  AVR单片机主时钟采用普通晶体振荡器。用该主时钟来测量RC电路的充放时间,用AVR单片机的定时器(1个16位定时器)来量化充放电时间。由于主时钟的周期远远小于RC充放电时间,观察实验数据,最低2位二进制有效数字具有不确定性。以下为AVR单片机定时器对外部RC电路进行3次充电和2次放电所花时间的量化值:    1.2.3 程序设计  由以上数据统计特征可见,每次测量结果仅有两位不确定二进制数据。为了产生1个8位数据,设计了C语言程序控制专用函数测量4次,每次得到了2个二进制随机数,这样调用该函数1次即可得到1字节的随机数。  主要程序如下:    &  2 实验结果和分析&  经实验,得到两位不确定二进制数的概率分布。  5 min后数据分布:P(00)=16%,P(01)=19%,P(10)=37%,P(11)=28%。  10 min后的数据分布:P(00)=16%,P(01)=21%,P(10)=38%,P(11)=25%。  22 min后的数据分布:P(00)=14%,P(01)=23%,P(10)=38%,P(11)=25%。  37 min后的数据分布:P(00)=16%,P(01)=26%,P(10)=36%,P(11)=22%。  以上数据由单片机统计后经串口直接输出到超级终端的显示参数。  25℃下产生的3 500个8位数据的分布如图3所示。&  &  从图中可以看出,有4个区间分布概率较大,分别是[0,32]、[40,90]、[160,225]、[230,255]。产生这样的分布和具体使用的元器件特性以及测试现场的环境有关。在采集得到大量的序列后,通过计算机分析没有发现有周期重复性。&  3 提高性能的措施&  在实际应用中,若采用该方法产生的随机数进行数据加密时,为防止解密者拆除、短接RC电路或更改RC电路参数,可利用测得的充放电时间来确定外部RC电路的存在和参数的稳健。如若充放电时间不在程序预先设定的区间内,单片机立即销毁相关数据并停止程序运行,从而达到加密的效果。  提高随机数产生速率。采用本文的方法产生的随机数的速率和RC充放电时间有关系,由于RC充放电速率影响,在产生高速率随机数的时候不合适。针对该问题,可将得到的真随机数作为种子来产生一定数量的伪随机数,这样可大大提高产生随机数的速率。&  结 语&  设计和实现了一种基于AVR单片机的真随机数发生器,利用RC充放电电路的不稳定性完成了真随机数的产生。该随机数发生器利用AVR单片机少量硬件资源完成,具有设计简单,成本低廉的优点。最后提出了软硬件结合的方式,提高了该随机数发生器的性能,拓展了该真随机数发生器的应用范围。
责任编辑:Kevin
免责声明:
本文仅代表作者个人观点,与
OFweek电子工程网
无关。其原创性以及文中陈述文字和内容未经本站证实,
对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅
作参考,并请自行核实相关内容。
邮箱/用户名:
忘记密码?
用其他账号登录: QQ
请输入评论
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:}

我要回帖

更多关于 单片机脉冲发生器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信